- •Конспект лекций по дисциплине "Программирование"(іі часть)
- •123 "Компьютерная инженерия"
- •1 Функции 6
- •1 Функции
- •1.1 Определение, описание, вызов функции
- •Void prn1(int X)
- •Void prn2()
- •Void main()
- •1.2 Передача параметров в функции по значению и по указателю
- •Void func(int intg,float fltp)
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •1.3 Функции и массивы
- •Int func1(int arr[]) {...}
- •Void main()
- •Void main()
- •Void main()
- •1.4 Функции с умалчиваемыми значениями параметров
- •Void main()
- •Void main()
- •1.5 Функции с переменным числом параметров
- •Void main()
- •Void main()
- •1.6 Передача параметров в функцию main()
- •Int main(int argc,char**argv,char**envp)
- •Int main(int argc,char **argv)
- •1.7 Рекурсивные и подставляемые функции
- •Void main()
- •Void main()
- •1.8 Функции, возвращающие указатель
- •Void main()
- •1.9 Функции и структуры
- •Void f1(stud a)
- •Void f3(stud *p)
- •Void main()
- •1.10 Перегрузка функций
- •Void main()
- •Void main()
- •Int mul(double X,double y)
- •Int sum(int X) {return 2*X;}
- •Void main()
- •1.11 Шаблоны функций
- •Int main()
- •Void func(a);
- •Int main()
- •1.12 Указатели на функции
- •Void main()
- •Int f2(int X){return X*X;};
- •Void main()
- •Void main()
- •2 Работа с файлами
- •2.1 Потоковый ввод-вывод
- •2.2 Открытие и закрытие потока
- •Int fclose(file *имя);
- •Int main()
- •Void perror(const char *str);
- •2.3 Посимвольный ввод-вывод
- •Int fputc(int ch, file *fp);
- •Int fgetc(file *fp);
- •2.4 Построчный ввод-вывод
- •Int fputs(char*string, file *fp);
- •2.5 Форматированный ввод-вывод
- •Int fprintf(file *fp, char *format [,аргумент]…);
- •Int fscanf(file *fp, char *format [,указатель]…);
- •2.6 Форматированные вывод в строку и ввод из строки
- •Int a2; long b2;
- •2.7 Блоковый ввод-вывод
- •Int fwrite(void *ptr, int size, int n, file *fp);
- •Int fread(void *ptr,int size,int n,file *fp);
- •2.8 Произвольный доступ к файлу
- •Int fseek(file *fp, long offset, int from_where);
- •Int main()
- •3 Многофайловая компиляция
- •Void main()
- •Void main()
- •4 Объекты и их атрибуты
- •Void main()
- •5 Ссылки
- •Int &хref; // ошибка!!
- •Int f2_ptr(int *a, int *b) {return *a-*b;}
- •Int f4_ref(const int&a, int &b)
- •Void main()
- •Литература
2.5 Форматированный ввод-вывод
Форматированный ввод-вывод данных является частным случаем строкового ввода-вывода. Особенность этого ввода-вывода то, что при переносе данных между файлом через открытый поток и программой происходит преобразование этих данных в соответствии с заданными спецификаторами формата. Спецификаторы формата такие же, как при консольном вводе-выводе.
Функция форматированной записи (вывода) в файл имеет прототип:
Int fprintf(file *fp, char *format [,аргумент]…);
Эта функция выводит данные с преобразованием по формату в открытый поток fp, связанный с файлом. В случае успеха возвращает число выведенных байтов (символов), а в случае ошибки – EOF.
Пример. Запись чисел в открытый для записи файл через поток fp
FILE *fp=fopen("abc.txt","w");//открытие потока для записи
if(fp==NULL){puts("ошибка открытия файла"); return -1;}
int a=5; float b=3.56; long c=50000;
fprintf(fp,"%d %f %ld\n",a,b,c);
int arr[5]={1,2,3,4,5};
float mas[5]={1.1,2.2,3.3,4.4,5.5};
//запись массивов 5-и чисел типа int, float в файл
for(int i=0;i<5;i++)
fprintf(fp,"%d %f\n",arr[i],mas[i]);
Функция форматированного чтения (ввода) из файла имеет прототип:
Int fscanf(file *fp, char *format [,указатель]…);
Эта функция выполняет ввод из открытого файла данных с преобразованием по формату и с занесением в ячейки памяти, определяемые указателями. В случае успеха возвращает число обработанных при вводе полей (спецификаторов) или EOF (–1) в случае ошибки или достижения конца файла.
Пример. Чтение чисел из открытого для чтения файла через поток fp
freopen("data.txt","r",fp); //переоткрытие потока
if(fp==NULL){perror("Входной файл не открыт "); return 1;}
int n; float f; long l;
fscanf(fp,"%d %f %ld\n",&n,&f,&l);//чтение чисел из файла
printf("%d %f %ld\n",n,f,l); //вывод чисел на экран
int a[5]; float m[5];
//чтение из файла и вывод на экран массивов из 5-и чисел типа int, float
for(int j=0;j<5;j++)
{fscanf(fp,"%d %f\n",&a[j],&m[j]);
printf("%d %f\n",a[j],m[j]); }
fclose(fp);
2.6 Форматированные вывод в строку и ввод из строки
Не редко возникает необходимость форматированного вывода данных в строку и ввода данных из строки .
Функция форматированного записи (вывода) в строку имеет прототип:
int sprintf(char *buf, char *format [,аргумент]…);
Эта функция выводит данные с преобразованием по формату в строку buf. Последний символ устанавливается '\0'. В случае успеха возвращает число выведенных байтов (символов), а в случае ошибки – EOF.
Функция форматированного чтения (ввода) из строки имеет прототип:
int sscanf(char *buf, char *format [,указатель]…);
Эта функция вводит из строки данные с преобразованием по формату и помещает их в ячейки памяти, определяемые указателями. В случае успеха возвращает число обработанных при вводе полей или EOF(–1) в случае ошибки.
Пример. Запись чисел в строку и чтение чисел из строки
int a1=10; long b1=50000; char buf1[20];
sprintf(buf1,"a1=%d, b1=%ld",a,b);
puts(buf1);// a1=10, b1=50000
float e, pi; char buf2[25]="2.718281, 3.141592";
sscanf(buf2,"%f, %f",&e,&pi);
printf("e=%f pi=%f\n",e,pi); );//e=2.718281 pi=3.141592
