Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
27
Добавлен:
21.03.2016
Размер:
6.05 Mб
Скачать

Примеры программ работы со структурами

 

 

 

Пример 1

 

#include <stdio.h>

 

 

main()

 

 

 

 

{

 

 

 

 

/*

Описание шаблона структуры

*/

struct Student

 

 

 

 

{ char *fio;

// Фамилия

- указатель на char

 

char

Adress[40]; // Адрес

- строка

 

int

Age;

// Возраст

- целое

 

int

oc[4];

// Оценки

- целочис. Массив

 

float

sr;

// Средний балл - вещественное

 

} ;

 

 

 

struct Student S;

// Описание структурной переменной S

int i;

 

 

 

 

float sr;

 

 

 

 

Продолжение примера 1

 

S.fio="Петушков";

//Присваивание полю значения

printf("Введите адрес студента %sa ",S.fio);

gets(S.Adress);

//Ввод значения поля

S.Age=1987;

//Присваивание полю значения

S.oc[0]=3;

 

S.oc[1]=5;

 

S.oc[2]=4;

S.oc[3]= S.oc[2];

Продолжение примера 1

sr=0;

//Вычисление

for(i=0;i<=3;i++)

//среднего

sr=sr+S.oc[i];

 

sr=sr/4;

//балла

S.sr=sr;

//Присваивание полю значения

printf(" Средний балл студента %sа",S.fio);

printf(" %d года рождения,\n проживающего по адресу: %s,", S.Age,S.Adress);

printf(" равен %5.2f\n",S.sr); fflush(stdin); getchar(); return(0);

}

Вид экрана после выполнения программы:

Введите адрес студента Петушковa ул. Солнечная, д.1, кв. 4 Средний балл студента Петушкова 1987 года рождения, проживающего по адресу: ул. Солнечная, д.1, кв. 4, равен 4.00

Пример 2. Поиск в массиве структур, вводимых с клавиатуры

Условие задачи. Ввести данные об n сотрудниках некоторой фирмы: фамилия, год рождения, оклад. Вывести список сотрудников в форме таблицы и фамилии сотрудников, имеющих оклад выше среднего.

Используемые переменные: n - число сотрудников;

db – массив записей с данными о сотрудниках; s – сумма окладов сотрудников;

sr – средний оклад сотрудников; fio – имя поля "фамилия";

pay - – имя поля "оклад";

year - – имя поля "год рождения"; lfio - – длина поля "фамилия": lpay - – длина поля "оклад"; lyear - – длина поля "фамилия"; ldb - – размер массива db.

Начало

Ввод n, db

Вывод db

 

s=o

 

 

 

i=o

 

 

 

i<n

Нет

Вычисление

 

 

 

ДА

 

среднего

 

s=s+db[i].pay

 

оклада

 

i=i+1

 

 

 

sr=s/n

 

 

 

i=o

 

 

 

i<n

Нет

 

 

 

 

ДА

ДА

Нет

Поиск

db[i].pay>sr

сотрудников

 

 

 

 

 

с окладом

Вывод db[i].fio

 

выше среднего

 

и вывод

 

 

 

их

 

i=i+1

 

фамилий

 

 

 

 

Конец

 

 

/* Фамилии сотрудников, имеющих оклад выше среднего */

#include <stdio.h> #include <string.h> main()

{

//длины полей фио, г.рожд., оклада

const int lfio=20, lyear =5, lpay =7, ldb=100; struct Man

{ char

fio[lfio+1];

// фио

int

year;

// год рожд.

float

pay;

// оклад

};

 

 

Man db[ldb];

// массив структур

int i, n;

 

 

float s,sr;

 

 

//Продолжение примера 2

puts("Число записей?(1<n<=10)"); scanf("%d",&n);

for(i=0; i<n; i++)

{

puts("Фамилия? "); gets(db[i].fio); puts("Год рождения? "); scanf("&d",&db[i].year); puts("Оклад? "); scanf("&f",&db[i].pay);

}

//Продолжение примера 2 //Вывод списка сотрудников

puts(" Список сотрудников"); puts("┌──────────┬───┬────┐"); puts("│ Фамилия │ г.р. │ оклад│"); puts("├──────────┼───┼────┤"); for(i=0; i<n; i++)

printf("|%-20s|% 5d | % 7.2f |\n", db[i].fio, db[i].year, db[i].pay); puts("└──────────┴───┴────┘");

//Продолжение примера 2

//Вычисление среднего оклада s=0;

for(i=0; i<n; i++)

s+=db[i].pay; //s=s+ db[i].pay; s/=n; //s=s/n;

puts("Фамилии сотрудников, имеющих оклад выше среднего"); for(i=0;i<n;i++)

if(db[i].pay>s) printf("%-s\n",db[i].fio);

fflush(stdin);

getchar(); return 0;

}

Соседние файлы в папке ЭУМК_ОАиП__PDF