Студопедия — ПРАКТИЧЕСКАЯ ЧАСТЬ. Пример 1. Написать программу структурного описания каталога одной книги.
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

ПРАКТИЧЕСКАЯ ЧАСТЬ. Пример 1. Написать программу структурного описания каталога одной книги.






Пример 1. Написать программу структурного описания каталога одной книги.

Программный код решения примера

#include <stdio.h> #include <conio.h> #include <string.h> #define N 40 struct book { // определение структуры char title[N+1]; // название книги char author[N+1]; // автор int year; // год издания int page; // количество страниц float price; // цена в у.е. } Library; int main (void) { // Инициализация полей структуры Library.year = 2007; Library.page = 496; Library.price = 12.78F; strcpy_s(Library.title, N, "Programming in C"); strcpy_s(Library.author, N, "Stephen G. Kochan"); // Вывод на консоль printf("\n\t Title: %c\n", Library.title); printf("\t Author: %c\n", Library.author); printf("\t Year: %d\n", Library.year); printf("\t Number of pages: %d p.\n", Library.page); printf("\t Price: %1.2f y.e.\n", Library.price); printf("\n\n Press any key: "); getch(); return 0; }

В программе использованы функции strcpy_s() вместо стандартных функций strcpy(),что позволило избавиться от предупреждений в системе Visual Studio 2010.


Результат выполнения программы показан на рис. 13.1.

Рис. 13.1. Пример инициализированных полей структуры

Задание 1

1. Совместите объявление и инициализацию структуры. После инициализации структуры выполните изменение ее полей с последующим выводом на консоль.

2. Примените оператор typedef.

3. Поля структуры title и author определите с помощью указателей.

4. Произведите инициализацию структуры после ввода значений полей с клавиатуры.

5. Выполните вывод полей структуры в текстовый файл compX.txt, где Х – номер компьютера, на котором выполняется лабораторная работа.

Пример 2. Написать программу анализа средней успеваемости четырех студентов по четырем предметам за сессию на основе структурного типа данных.

Программный код решения примера

#include <stdio.h> #include <conio.h> #include <stdlib.h> #define N 4 // число студентов #define CH 30 // число символов для фамилии или имени // Определение структуры Struct { char**name; // имя студента char**surname; // фамилия студента int M; // отметка по математическому анализу int A; // отметка по алгебре int H; // отметка по истории int In; // отметка по информатике } student[N]; int main (void) { float mark; int i; // Выделение памяти для символьных указателей for (i = 0; i < N; ++i) { student[i].name = (char**) malloc(CH*sizeof(char)); student[i].surname = (char**) malloc(CH*sizeof(char)); } printf("\n"); for (i = 0; i < N; ++i) { printf("\t Enter a name of %d student \n\t: ", i+1); gets_s(student[i].name, CH - 1); printf("\t Enter a surname of %d student \n\t: ", i+1); gets_s(student[i].surname, CH – 1); printf("\t Enter marks in 4 subjects for %d student (through a blank) \n\t: ", i+1); scanf_s("%i%i%i%i", &(student[i].M),&(student[i].A), &(student[i].H),&(student[i].In)); _flushall(); } puts("\n====================================================================================="); printf("\t Statement of Achievement students:\n"); puts("======================================================================================\n"); for (i = 0; i < N; ++i) { printf("\t %c \t %c:\n\t Mathematical analyses, Algebra, History, Informatics\n \ \n\t\t %d\t\t %3d\t \ %3d\t %5d\n----------------------------------------------\n", \ student[i].name, student[i].surname, \ student[i].M,student[i].A,student[i].H,student[i].In); } mark = 0.0F; // F – спецификатор для типа float for (i = 0; i < N; ++i) { mark += (student[i].M + student[i].A + student[i].H + student[i].In); } // Средняя оценка группы из 4 (N)студентов printf("\n\t The average mark groups of %d students: %1.4f", N, mark/(4*N)); // 4*N - общее количество оценок // Освобождение памяти for (i = 0; i < N; ++i) { free(student[i].name); free(student[i].surname); } printf("\n\n Press any key: "); getch(); return 0; }

В программе использован массив структур – переменная student[N]. С целью определения имени и фамилии предварительно выделяется память под символьные указатели с помощью функций malloc(), для которых включен заголовок #include <stdlib.h>;.

Определение структуры выполнено за пределами главной функции main(), что позволяет использовать ее в других функциях, если бы они были определены в программе.

Шаблон структуры задан без имени-этикетки.

Возможный результат выполнения программы приведен на рис. 13.2.


Рис. 13.2. Пример сводной ведомости успеваемости студентов

Задание 2

1. Выполните усреднение оценок для каждого студента.

2. Предусмотрите ввод названий предметов (математический анализ, алгебра и т. д.) и определите их в виде инициализаторов структуры.

3. Увеличьте число студентов до семи и произведите запись результатов в текстовый файл с именем compX.txt, где Х – номер компьютера, на котором выполняется лабораторная работа.

4. В шаблоне структуры задайте теговое имя. Проанализируйте работу программы.

5. Примените оператор typedef для определения структурного типа данных.

6. Расположите фамилии (с именем) студентов в порядке возрастания их среднего балла за сессию.

Пример 3. Написать программу создания карточки служащего с помощью структурного типа данных и указателя на структуру. Предусмотреть инициализацию полей структуры и изменение этих полей.

Для решения примера воспользуемся структурой, рассмотренной в теоретической части данной темы:

struct employee {

char Name [20+1]; // имя

char Surname [20+1]; // фамилия







Дата добавления: 2015-09-06; просмотров: 587. Нарушение авторских прав; Мы поможем в написании вашей работы!



Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...

Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...

Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...

ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...

Демографияда "Демографиялық жарылыс" дегеніміз не? Демография (грекше демос — халық) — халықтың құрылымын...

Субъективные признаки контрабанды огнестрельного оружия или его основных частей   Переходя к рассмотрению субъективной стороны контрабанды, остановимся на теоретическом понятии субъективной стороны состава преступления...

ЛЕЧЕБНО-ПРОФИЛАКТИЧЕСКОЙ ПОМОЩИ НАСЕЛЕНИЮ В УСЛОВИЯХ ОМС 001. Основными путями развития поликлинической помощи взрослому населению в новых экономических условиях являются все...

ТЕОРИЯ ЗАЩИТНЫХ МЕХАНИЗМОВ ЛИЧНОСТИ В современной психологической литературе встречаются различные термины, касающиеся феноменов защиты...

Этические проблемы проведения экспериментов на человеке и животных В настоящее время четко определены новые подходы и требования к биомедицинским исследованиям...

Классификация потерь населения в очагах поражения в военное время Ядерное, химическое и бактериологическое (биологическое) оружие является оружием массового поражения...

Studopedia.info - Студопедия - 2014-2024 год . (0.011 сек.) русская версия | украинская версия