Структуры и функции языка С
Задание 3
- Проверьте работу программы без начальной инициализации полей структурной переменной systime.
- Результат выполнения программы запишите в текстовый файл с именем compX.txt, где Х – номер компьютера, за которым выполняется лабораторная работа.
- В программу добавьте нумерацию итераций цикла, т.е. 1), 2), ..., 10).
- Напишите программу по вводу своей фамилии, имени и подсчета в них количества букв. При этом создать шаблон структуры с полями для имени, фамилии и количества букв. Ввод имени и фамилии должна выполнять одна функция, подсчет количества букв должна выполнять вторая функция, печать результата должна выполнять третья функция. Для связи между функциями примените указатели на структуру.
Пример 4. Напишите программу, в которой используются функции, имеющие на входе структуру и возвращающие структуру.
Напишем программу расчета средней успеваемости студента за последнюю экзаменационную сессию (или другим экзаменам) с использованием структурного типа данных.
Программный код решения примера:
#include <stdio.h> #include <conio.h> #define MAX 79 // Шаблон структуры struct table { char name[MAX+1]; char surname[MAX+1]; char subject_1[MAX+1]; char subject_2[MAX+1]; char subject_3[MAX+1]; char subject_4[MAX+1]; int mark[4]; float mean; } student = { // Инициализация структурной переменной "Peter", "Bobrov", "Mathematics", "Informatics", "Programming", "Physics", {0,0,0,0}, 0.0f }; // Прототип вспомогательной функции struct table infor(struct table student); // Главная функция int main (void) { // Объявление и инициализация структурной переменной struct table infor2 = {" "," "," "," "," "," ", {0,0,0,0},0.0f}; // Присвоение структуры от функции infor2 = infor(student); printf("\n The level of knowledge a student of %s %s is: \ %1.2f\n", infor2.name, infor2.surname, infor2.mean); printf("\n\n Press any key: "); _getch(); return 0; } // Вспомогательная функция с аргументом структурного типа // и возвращающая структуру struct table infor(struct table student) { float x = 0.0f; int i; printf("\n\t Enter a name: "); gets_s(student.name, MAX); printf("\t Enter a surname: "); gets_s(student.surname, MAX); printf("\t Enter 1-st academic subject: "); gets_s(student.subject_1, MAX); printf("\t Enter a mark in the first subject: "); scanf_s("%d",&student.mark[0]); _flushall(); printf("\t Enter 2-nd academic subject: "); gets_s(student.subject_2, MAX); printf("\t Enter a mark in the second subject: "); scanf_s("%d",&student.mark[1]); _flushall(); printf("\t Enter 3-rd academic subject: "); gets_s(student.subject_3, MAX); printf("\t Enter a mark in the third subject: "); scanf_s("%d",&student.mark[2]); _flushall(); printf("\t Enter 4-th academic subject: "); gets_s(student.subject_4, MAX); printf("\t Enter a mark in the fourth subject: "); scanf_s("%d",&student.mark[3]); // Расчет средней оценки по 4 предметам for (i = 0; i < 4; ++i) { x += student.mark[i]; student.mean = x/4; } // Возвращение структурной переменной return (student); }
В программе приведена инициализация структурной переменной student для наглядности.
Инициализация переменной типа float выполнена с суффиксом f.
Присвоение одной структурной переменной другой может быть только в случае, когда они принадлежат одному и тому же шаблону структур.
Функции _flushall() введены для того, чтобы устранить пустую строку перед использованием функции gets_s() (или gets() ) после ввода с помощью функции scanf_s (или scanf() ).
Возможный результат выполнения программы показан на рис. 15.4.
- Проверьте содержимое структурной переменной student.
- Вместо структурной переменной student в аргументе вспомогательной функции используйте собственную фамилию.
- Введите свою фамилию, свое имя и результаты последней экзаменационной сессии.
- В программу добавьте вывод в главной функции main() всех полей структуры.
- Запишите результаты заполнения полей структуры в текстовый файл с именем compX.txt, где Х – номер компьютера, за которым выполняется лабораторная работа.
- Проверьте работу программы без начальной инициализации структурной переменной.
- Примените оператор typedef при создании шаблона структуры.