Скачать презентацию Задача 1 Входной файл st txt содержит сведения Скачать презентацию Задача 1 Входной файл st txt содержит сведения

Пример КР.ppt

  • Количество слайдов: 15

Задача 1 Входной файл st. txt содержит сведения о сдаче студентами группы экзаменационной сессии. Задача 1 Входной файл st. txt содержит сведения о сдаче студентами группы экзаменационной сессии. Каждая запись файла содержит фамилию и инициалы студента (15 символов) и пять оценок (5 символов) и завершается символом ”перевод строки”. Напечатать список студентов с указанием среднего балла каждого студента.

Пример входного файла st. txt: 1 16 20 ------------------Анисимов А. И. 54435 Берхеев П. Пример входного файла st. txt: 1 16 20 ------------------Анисимов А. И. 54435 Берхеев П. В. 55445 Вавилова С. Н. 45343. . .

/*----------------------------*/ /* Печать среднего балла каждого студента */ /*----------------------------*/ #include <stdio. h> #include <conio. /*----------------------------*/ /* Печать среднего балла каждого студента */ /*----------------------------*/ #include #include struct STUDENT { char fio[15]; /* фамилия и. о. */ char oc[7]; /* 5 оценок + 'n' + '' */ };

void main() { FILE *f; /* указатель на входной файл */ struct STUDENT tz; void main() { FILE *f; /* указатель на входной файл */ struct STUDENT tz; /* текущая запись файла */ int i, s; /* сумма оценок */ if ((f= fopen("st. txt", "r")) == NULL) { puts ("Файл st. txt не найден"); return; }

puts ( puts ("n. Фамилия и. о. Ср. балл"); puts ("---------------"); while (fgets((char *)&tz, sizeof(struct STUDENT), f) != NULL) { for (i=0, s=0; i<5; i++) s+=tz. oc[i]-'0'; tz. fio[14]=''; printf("%s %. 1 fn", tz. fio, (float)s/5); } fclose(f); getch(); }

Задача 2 Дан текстовый файл “phone. txt”, содержащий телефонный справочник. Каждая строка файла содержит Задача 2 Дан текстовый файл “phone. txt”, содержащий телефонный справочник. Каждая строка файла содержит запись об одном абоненте. Структура записи: номер телефона (8 символов), фамилия и инициалы абонента (25 симв. ), адрес (не более 30 симв. ). Записи в файле не упорядочены по алфавиту. Напечатать в алфавитном порядке список телефонов абонентов, фамилии которых начинаются с заданной буквы, (адреса не выводить).

Пример записи файла: 2984556 Нигматуллин Р. А. ул. Даурская, д. 15, кв. 13 Пример Пример записи файла: 2984556 Нигматуллин Р. А. ул. Даурская, д. 15, кв. 13 Пример результата: Укажите первую букву (прописную) фамилий абонентов З Список абонентов: 1. Забиров Б. Ш. 2345467 2. Забиров Р. И. 2355639 3. Завойский А. В. 5710076 4. Завьялова А. С. 2649215 ….

Алгоритм решения задачи: 1. Построчное чтение файла и запоминание в массиве номеров телефонов и Алгоритм решения задачи: 1. Построчное чтение файла и запоминание в массиве номеров телефонов и фамилий, начинающихся с заданной буквы. 2. Сортировка массива в алфавитном порядке (в порядке возрастания кодов фамилий). 3. Печать массива.

Итак, задачу разбили на три отдельные подзадачи, которые нужно решить последовательно. Удобно первые две Итак, задачу разбили на три отдельные подзадачи, которые нужно решить последовательно. Удобно первые две подзадачи оформить как отдельные подпрограммы (функции). Третья подзадача (печать массива) – более простая, поэтому ее можно не выделять в виде отдельной функции. Таким образом, программа будет состоять из трех функций: main() – главная функция; Vvod() – функция чтения файла и формирования массива структур, содержащих фамилии и номера телефонов; Sort() – функция сортировки массива структур.

#include <stdio. h> #include <string. h> #include <conio. h> #define DL_FIO 25 /* длина #include #include #include #define DL_FIO 25 /* длина поля фамилии в файле */ #define DL_NOM 8 /* длина поля номера телефона */ #define DL_ADR 30 /* макс. длина адреса */ #define NMAX 100 /* макс. число эл-тов массива структур */

/* тип структуры записи файла */ struct ABONENT { char nom[DL_NOM]; /* номер телефона /* тип структуры записи файла */ struct ABONENT { char nom[DL_NOM]; /* номер телефона */ char fio[DL_FIO]; /* фамилия и инициалы абонента */ char adr[DL_ADR+2]; /* адрес + 'n' + '' */ }; /* тип элемента массива */ struct EL_MAS { char nom[DL_NOM]; /* номер телефона */ char fio[DL_FIO]; /* фамилия и инициалы абонента */ }; /* прототипы функций */ void Vvod(struct EL_MAS ms[NMAX], int *n); void Sort(struct EL_MAS ms[NMAX], int n);

/*-----------*/ /* главная функция */ /*-----------*/ int main() { struct EL_MAS ms[NMAX]; /* массив, /*-----------*/ /* главная функция */ /*-----------*/ int main() { struct EL_MAS ms[NMAX]; /* массив, содержащий номера телефонов и фамилии, начинающиеся с заданной буквы */ int n; /* число элементов массива ms */ int i; /* индекс тек. эл-та массива */ Vvod(ms, &n); if (n == 0) puts ("Нет абонентов, фамилии которых начинаются с указанной буквы"); else { Sort(ms, n); puts ("n. Список абонентов: "); for (i=0; i

/*--------------------*/ /* Функция чтения файла и формирования */ /* массива структур */ /*--------------------*/ void /*--------------------*/ /* Функция чтения файла и формирования */ /* массива структур */ /*--------------------*/ void Vvod (struct EL_MAS ms[NMAX], int *n) /* Вых. данные: ms - массив, содержащий номера телефонов и фамилии */ /* *n – число элементов массива { FILE *f; /* указатель на входной файл */ char b; /* заданная буква (1 -я буква фамилий) */ struct ABONENT tz; /* текущая запись файла */ clrscr(); f = fopen("phone. txt", "r"); if (f == NULL) { puts ("Файл phone. txt не найден"); getch(); exit (1); } */

puts ( puts ("Укажите первую букву (прописную) фамилий абонентов"); b = getchar(); *n=0; while (*n

/*--------------------*/ /* Функция сортировки массива структур */ /* в алфавитном порядке */ /*--------------------*/ void /*--------------------*/ /* Функция сортировки массива структур */ /* в алфавитном порядке */ /*--------------------*/ void Sort(struct EL_MAS ms[NMAX], int n) /* Вх. данные: ms, n */ /* Вых. данные: ms */ { int k, i; /* параметры циклов */ struct EL_MAS s; /* вспомогательная переменная для перестановки эл-тов массива */ for (k=n-1; k>0; k--) for (i=0; i0) { /* перестановка эл-тов ms[i] и ms[i+1] */ s = ms[i]; ms[i] = ms[i+1]; ms[i+1] = s; } }