Опубликован: 14.12.2010 | Уровень: для всех | Доступ: свободно
Лекция 16:

Структуры и функции языка С

< Лекция 15 || Лекция 16: 1234 || Лекция 17 >

Задание 3

  1. Проверьте работу программы без начальной инициализации полей структурной переменной systime.
  2. Результат выполнения программы запишите в текстовый файл с именем compX.txt, где Х – номер компьютера, за которым выполняется лабораторная работа.
  3. В программу добавьте нумерацию итераций цикла, т.е. 1), 2), ..., 10).
  4. Напишите программу по вводу своей фамилии, имени и подсчета в них количества букв. При этом создать шаблон структуры с полями для имени, фамилии и количества букв. Ввод имени и фамилии должна выполнять одна функция, подсчет количества букв должна выполнять вторая функция, печать результата должна выполнять третья функция. Для связи между функциями примените указатели на структуру.

Пример 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.

Пример расчета средней успеваемости студента

Рис. 15.4. Пример расчета средней успеваемости студента
  1. Проверьте содержимое структурной переменной student.
  2. Вместо структурной переменной student в аргументе вспомогательной функции используйте собственную фамилию.
  3. Введите свою фамилию, свое имя и результаты последней экзаменационной сессии.
  4. В программу добавьте вывод в главной функции main() всех полей структуры.
  5. Запишите результаты заполнения полей структуры в текстовый файл с именем compX.txt, где Х – номер компьютера, за которым выполняется лабораторная работа.
  6. Проверьте работу программы без начальной инициализации структурной переменной.
  7. Примените оператор typedef при создании шаблона структуры.
< Лекция 15 || Лекция 16: 1234 || Лекция 17 >
Мухаммадюсуф Курбонов
Мухаммадюсуф Курбонов