- •Московский государственный социальный университет академия информатики и информационных технологий
- •Введение
- •Часть. Основы программирования на Си
- •1.1. Структура простейшей Си-программы
- •1.2. Данные в Си и операции над ними
- •1.2.1. Свойства ячейки памяти. Переменные и константы
- •1.2.2. Типы данных в Си
- •1.2.3. Правила записи констант в Си
- •1.2.4. Описание переменных и именованных констант в Си.
- •1.2.5. Выражения в Си
- •1.3. Операторы преобразования данных
- •1.3.1. Общие положения
- •1.3.2. Функция форматного выводаprintf()
- •1.3.3. Функция форматного вводаscanf()
- •1.4. Разработка программ на Си
- •1.4.1. Понятие о качестве программы и основные технологические принципы разработки программ
- •1.4.2. Алгоритм и способы его записи.
- •1.4.3. Изображение алгоритмов в виде блок-схем
- •1.4.4. Базовые структуры алгоритмов и их кодирование на Си.
- •1. Следование
- •2. Разветвление (развилка)
- •If (условие)
- •If (условие)
- •3. Цикл
- •1.4.4. Примеры разработки программ
- •1.5. Массивы и указатели
- •1.5.1. Понятие массива. Основные правила работы с массивами в Си
- •1.5.2. Примеры программ с массивами.
- •1.5.3. Инициализация массивов
- •1.5.4. Указатели в Си10
- •1.5.5. Связь массивов с указателями в Си
- •Часть. Функции и многофайловые программы в Си
- •2.1. Общие сведения о подпрограммах и функциях
- •2.2. Функции си
- •2.2.1. Описание функции
- •2.2.2. Обращение к функции
- •2.2.3. Место описания функции в программе
- •2.2.4. Примеры программ, использующих функции
- •2.3. Краткие сведения о препроцессоре Си
- •2.3.2.Директива макроопределения #define
- •2.3.3. Директива #include включения файлов
- •2.3.4. Директивы условной компиляции
- •2.415. Многофайловые си-программы
- •2.4.1. Структура программы на Си. Область действия переменных
- •2.4.2. Время жизни и класс памяти переменных
- •Описатели класса памяти
- •2.4.3 Понятие о файле проекта
- •Часть. Обработка символьной информации и документов сложной структуры
- •3.1. Обработка символьной информации на Си
- •3.1.1. Символьный тип
- •3.1.2. Работа со строками символов в Си. Строковые литералы. .
- •3.1.3. Функции и макросы для работы с символьной информацией
- •3.1.4. Примеры программ
- •3.2. Тип "структура" в Си
- •Структура
- •3.3. Файлы в Си
- •3.3.1. Общие понятия.
- •3.2.Функции Си для работы с файлами
- •3.3.3. Примеры программ, использующих файлы
- •Литература
- •Содержание
3.3.3. Примеры программ, использующих файлы
Пример 1. В файле с именемd:\stud\datхранятся сведения о студентах, представленные в виде таблицы. Программа выводит ФИО студенток первого курса по имени Татьяна в файл d:\stud\resstr, а также вычисляет и выводит в тот же файл среднюю стипендию всех студентов.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
void main()
{char tabl[58], /*строка таблицы*/
name[16],/*ФИО студента, поле таблицы*/
ku[3], /*курс, поле таблицы */
fio[20][46],/*Массив ФИО “Татьян”*/
stip[8];/*стипендия, поле таблицы*/
int k /*число Татьян*/,i/*число всех студентов*/;
FILE *dat,*res;/*программные имена исх. и вх. файлов*/
double sr/*средняя стипендия*/,v/*вещ. представление*/
/*стипендии*/;
dat=fopen("d:\\stud\\dat","r"); /*открытие файла для чтения*/
res=fopen("d:\\stud\\resstr","w");/*открытие файла для записи*/
k=0;sr=0;
i=0;
while (!feof(dat)) /*считываем данные, пока не закончится файл*/
{ fgets(tabl,58,dat); /*ввод строки таблицы*/
strncpy(name,tabl+18,15);name[15]='\0'; /*выделение поля ФИО*/
strncpy(ku,tabl+48,2); ku[2]='\0'; /*выделение поля “курс”*/
/*далее: является ли студентка Татьяной-первокурсницей*/
if ((strstr(name,"Татьяна")!=NULL) /*&&(!strcmp(ku," 1"))*/)
{k++;
strncpy(fio[k-1],tabl+3,45);fio[k-1][45]='\0';
/*запоминание ФИО в массиве */
};
strncpy(stip,tabl+50,7); /*выделение поля “стипендия”*/
v=atof(stip);/*преобразование строки “стипендия” в число*/
if (!v) /*нет ли ошибки преобразования*/
printf(" Ошибка в записи числа в %d стpоке таблицы\n ",i+1);
else
sr=sr+v;/*накапливание суммы стипендий*/
i++;
};
sr=sr/(i);/*вычисление средней стипендии*/
/*Далее вывод результатов*/
fprintf(res," Сpедняя стипендия pавна %8.0f\n", sr);
if(!k)
fputs(" Студенток пеpвого куpса по имени Татьяна нет",res);
else
{fputs(" Студентки пеpвого куpса по имени Татьяна",res);
for(i=0; i<k; i++)
fputs(fio[i],res);
} fclose(res);fclose(dat);/*закрытие файлов*/
}
Пример 2. Программа записывает сведения об игрушках, введенные с клавиатуры, в двоичный файл. Обозначения как в примере п. 3.2.
#include <stdio.h>
#include <conio.h>
#include <string.h>
void main()
{typedef struct {int nu;
char name[30];
int minage,maxage;
double rub;}TOYS;
TOYS toy,*ptoy=&toy;
int n,i; int zap=sizeof(toy);
FILE *fbin;
fbin=fopen("G:\\valia\\datbin","wb");
puts(" Введите число игрушек");
scanf("%d",&n);
for (i=0; i<n;i++)
{toy.nu=i+1;
fflush(stdin);
printf(" Номер игрушки \n",toy.nu);
puts(" Название");
gets(toy.name);
puts(" Мин. и макс. возраст и стоимость");
scanf("%d%d%lf",&toy.minage,&toy.maxage,&toy.rub);
fwrite(ptoy,zap,1,fbin);
}
fclose(fbin)
}
Вывод информации из двоичного файла на экран:
#include <stdio.h>
#include <conio.h>
#include <string.h>
void main()
{typedef struct {int nu;
char name[30];
int minage,maxage;
double rub;}TOYS;
TOYS toy,*ptoy=&toy;
int n,i; int zap=sizeof(toy);
FILE *fbin;
fbin=fopen("G:\\valia\\datbin","rb");
fread(ptoy,zap,1,fbin);
do
{
printf("\n Игрушка %d : %s \n" " от %d до %d лет %8.0f\n" toy.nu,toy.name,toy.minage,toy.maxage,toy.rub);
fread(ptoy,zap,1,fbin);
}
while (!feof(fbin));
fclose(fbin);
}