Имя функции | Назначение |
fopen() | Открывает файл |
fclose() | Закрывает файл |
putc() | Записывает символ в файл |
fputc() | Записывает символ в файл (для совместимости) |
getc() | Читает символ из файла |
fgetc() | Читает символ из файла (для совместимости) |
fgets() | Читает строку из файла |
fputs() | Записывает строку в файл |
fseek() | Устанавливает файловый указатель на определенный байт файла |
ftell() | Возвращает текущее значение указателя |
fprintf() | Вывод в файл |
fscanf() | Ввод из файла |
feof() | Возвращает значение истина, если достигнут конец файла |
ferror() | Возвращает значение истина, если произошла ошибка |
rewind() | Устанавливает указатель текущей позиции в начало файла |
remove() | Стирает файл |
fflush() | Дозапись потока в файл |
Изменение программы: // стр. 49
#include<stdio.h>
int (*fun)(int,int), sum(int,int), razn(int,int);
void main()
{
int a=10, b=20, c;
c=sum(a,b);
printf("c=%d\tsum=%d\trazn=%d\n", c, sum(a,b), razn(a,b));
fun=sum;
printf("*fun=%d\n",(*fun)(a,b));
fun=razn;
printf("*fun=%d\n",(*fun)(a,b));
}
int sum(int x,int y)
{
return (x+y);
}
int razn(int x,int y)
{
return (y-x);
}
// Программа " Шифр Цезаря "
Открытый текст – сообщение, которое подлежит шифрованию.
Результат применения к открытому тексту алгоритма шифрования называют шифротекстом.
Шифр Цезаря – каждая буква открытого текста заменяется третьей после нее буквой в алфавите, который считается записанным по кругу.
Пусть x – номер буквы открытого текста в алфавите, с – элемент шифротекста.
Шифрование – x ->c=x+3 (mod 67)
Дешифрование производится обратным сдвигом: x=c-3 (mod 67), что эквивалентно x=c+(33-3) (mod 67)
#include <stdio.h>
#include<string.h>
#define K 3
#define M 67
#include <windows.h>
void Shifr(char*,char*,char*,int);
void DeShifr(char*,char*,char*,int);
void main()
{
int n,n1;
char cAr[]="абвгдеёжзийклмнопрстуфхцчшщъыьэюя АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ";
char cStr1[]="Введите максимальный размер строки:\n";
CharToOem(cStr1,cStr1);
printf("%s",cStr1);
scanf("%d",&n);
char *pStr,*pStr1,*pStr2;
pStr=new char[n];
char cStr2[]="Введите строку \"открытого текста\":\n";
CharToOem(cStr2,cStr2);
printf("%s",cStr2);
getchar();
gets(pStr);
n1=strlen(pStr);
pStr1=new char[n1];
pStr2=new char[n1];
CharToOem(cAr,cAr);
int ch;
char cStr3[]="1. Произвести шифрование\n";
char cStr4[]="2. Произвести дешифрование\n";
char cStr5[]="3. Выход ";
char cStr6[]="\n МЕНЮ \n\n";
char cStr7[]="Выбор (1,2,3):";
CharToOem(cStr3,cStr3);
CharToOem(cStr4,cStr4);
CharToOem(cStr5,cStr5);
CharToOem(cStr6,cStr6);
CharToOem(cStr7,cStr7);
label:
printf("%s",cStr6);
printf("%s",cStr3);
printf("%s",cStr4);
printf("%s\n\n",cStr5);
printf("%s ",cStr7);
scanf("%d",&ch);
getchar();
switch (ch)
{
case 1: Shifr(pStr,pStr1,cAr,n1);
break;
case 2: DeShifr(pStr1,pStr2,cAr,n1);
break;
case 3: exit(0);
default: printf("\n\nInput 1,2,3\n");
}
goto label;
}
void Shifr(char* pStr,char* pStr1,char* cAr,int n1)
{
for(int i=0;i<n1;i++)
for(int j=0;j<M;j++)
{
if(pStr[i]==cAr[j])
pStr1[i]=cAr[(j+K)%M];
}
for(i=0;i<n1;i++)
printf("%c",pStr1[i]);
printf("\n");
}
void DeShifr(char* pStr1,char* pStr2,char* cAr,int n1)
{
for(int i=0;i<n1;i++)
for(int j=0;j<M;j++)
{
if(pStr1[i]==cAr[j])
pStr2[i]=cAr[(j+(M-K))%M];
}
for(i=0;i<n1;i++)
printf("%c",pStr2[i]);
printf("\n");
}
Приложение: /* Стандарт языка С99 (изменения, внесенные в язык Си, по сравнению с С89) */