Лабораторная работа 7. структуры.

Цель работы: приобретение практических навыков в составлении алгоритмов и программ со структурами.

Теоретический материал

Структура - это объединение одного или нескольких объектов (переменных, массивов, указателей, других структур и т.д.). Как и массив, она представляет собой совокупность данных. Отличием является то, что к ее элементам необходимо обращаться по имени и что различные элементы структуры не обязательно должны принадлежать одному типу.

Объявление структуры осуществляется с помощью ключевого слова struct и записывается в следующем виде:

struct тип { тип элемента_1 имя элемента_1; ......... тип элемента_n имя элемента_n; }

Именем элемента может быть любой идентификатор. В одной строке можно записывать через запятую несколько идентификаторов одного типа.

Пример:

struct date { int day; int month; int year; }

Определенный выше тип data включает три элемента: day, month, year, содержащий целые значения (int).

При определении переменных в функции, необходимо указать тип структуры и имя используемой переменной или массива, например:

data a[10];

Чтобы обратиться к отдельному элементу структуры, необходимо указать его имя, поставить точку и сразу же за ней записать имя нужного элемента, например:

a[i].day = 19; a[i].month = 2 a[i].year = 2000;

Пример: Дана информация о 10 товарах: название, цена, количество. Вычислить общую стоимость товара, название которого вводится с клавиатуры.

#include <stdio.h>

#include <string.h>

main()

{

int i,k; float sum; //k-количество искомых товаров, sum- их общая стоимость.

struct tov {char name[10]; float c; int kol;} t; //Объявление структуры t

struct tov a[10];

char s[10]; //Наименование искомого товара

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

{

scanf("%s%f%d",&t.name,&t.c,&t.kol); //Заполнение информацией структуры t

a[i]=t; //Присвоение i-му элементу массива структуры t целиком

}

scanf("%s",&s);

for (i=0,sum=0,k=0;i<10;i++)

if (strcmp(a[i].name,s)==0)

{ sum=sum+a[i].c*a[i].kol;

k++;

}

printf("Товаров %s %d, их стоимость %5.2f ",s,k,sum);

}

Задание:

Написать программу и нарисовать блок-схему к ней согласно данному варианту.

Вариант 1.

Дана информация о пяти студентах. Запись имеет вид: фамилия, год рождения, факультет. Вывести дан­ные о студентах по факультетам.

Вариант 2.

Дана информация о пяти школах. Запись имеет вид: номер школы, год, количество выпускников, число поступивших в ВУЗы. Вывести данные об общем количестве выпускников и доле поступивших в ВУЗ.

Вариант 3.

Дана информация о пяти комнатах в общежитии. Запись имеет вид: фамилии, номер комнаты, факультет, площадь. Вывести данные о комнатах по факультетам, а также количество комнат на факультетах.

Вариант 4.

Дана информация о пяти рабочих цеха. Запись имеет вид: фамилия, размер зарплаты, стаж работы. Вывести данные о рабочем с наибольшей зарплатой и наименьшим стажем.

Вариант 5.

Дана информация о четырех вузах. Запись имеет вид: название вуза, число студентов, количество факультетов, коли­чество кафедр. Вывести данные об общем числе студентов, факультетов и кафедр.

Вариант 6.

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

Вариант 7.

Дана информация о пяти больных. Запись имеет вид: фамилия, возраст, пол, давление. Вывести данные о больных с повышен­ным давлением (больше 140) .

Вариант 8.

Дана информация о пяти квартирах. Запись имеет вид: фами­лия владельца, площадь, число комнат, этаж. Вывести данные о квартирах с площадью меньше 30 кв.м и подсчитать их ко­личество.

Вариант 9.

Дана информация о шести студентах. Запись имеет вид: фамилия, год рождения, место рождения, факультет. Вывести дан­ные о старших по возрасту студентах, предполагая что год рождения может быть одинаков.

Вариант 10.

Дана информация о пяти школах. Запись имеет вид: номер школы, год, количество выпускников, число поступивших в ВУЗы. Вывести данные о школе с самым большим отношением числа поступивших к числу выпускников.

Вариант 11.

Дана информация о пяти комнатах в общежитии. Запись имеет вид: фамилии, номер комнаты, факультет, площадь. Вывести данные о комнате, в которой наименьшая площадь.

Вариант 12.

Дана информация о пяти квартирах. Запись имеет вид: фами­лия владельца, площадь, число комнат, этаж. Вывести данные о квартирах с самой большой площадью и самой маленькой.

Вариант 13.

Дан список учащихся из 10 записей. Каждая запись имеет поля: фамилия, имя, номер класса, буква класса. Найти однофамильцев, обучающихся в одном классе.

Вариант 14.

Багаж пассажира характеризуется количеством вещей (целый тип) и общим весом вещей (вещественный тип). Дан список из сведений о багаже 10 пассажиров. Найти багаж, средний вес одной вещи, в котором отличается не более, чем на 0,3 кг от общего среднего веса одной вещи по всему списку.

Вариант 15.

Список книг состоит из 10 записей. Запись содержит поля: фамилия автора, название книги, год издания. Найти названия книг данного автора, изданных с 1960 г.

Вариант 16.

Дан список учащихся из 10 записей. Каждая запись имеет поля: фамилия, имя, номер класса, оценки по трем предметам. Вывести отдельно отличников для указанного извне класса.

Вариант 17.

Дана структура, задающая дату вида:

Struct date {int day;

int month;

int year;};

Пользуясь таким структурным типом, составить программу, определяющую дату, которая наcтупит через m дней.

Вариант 18.

Дана информация о пяти квартирах. Запись имеет вид: фами­лия владельца, площадь, число комнат, этаж. Вывести данные о n комнатных квартирах.

Вариант 19.

Багаж пассажира характеризуется количеством вещей (целый тип) и общим весом вещей (вещественный тип). Дан список из сведений о багаже 10 пассажиров. Найти число пассажиров, имеющих более двух вещей.

Вариант 20.

Дан список учащихся из 10 записей. Каждая запись имеет поля: фамилия, имя, номер класса, буква класса. Найти тезок (одинаковые имена), обучающихся в одном классе.

Вариант 21.

Список книг состоит из 10 записей. Запись содержит поля: фамилия автора, название книги, год издания. Определить, имеются ли книги с названием «Информатика» и если да, то сообщить фамилии авторов, год издания этих книг.

Вариант 22.

Дан список учащихся из 10 записей. Каждая запись имеет поля: фамилия, имя, номер класса, оценки по трем предметам. Вывести список всех учеников с указанием среднего балла для каждого.

Вариант 23.

Багаж пассажира характеризуется количеством вещей (целый тип) и общим весом вещей (вещественный тип). Дан список из сведений о багаже 10 пассажиров. Число пассажиров, количество вещей которых превосходит среднее число вещей по всему списку.

Вариант 24.

Дан список учащихся из 10 записей. Каждая запись имеет поля: фамилия, имя, номер класса, оценки по трем предметам. Вывести отдельно двоечников (хотя бы одна двойка) для указанного извне класса.

Вариант 25.

Дана структура, задающая дату вида:

Struct date {int day;

int month;

int year;};

Пользуясь таким структурным типом, составить программу, определяющую число суток, прошедших от заданной даты n до даты m.

Вариант 26.

Дан список учащихся из 10 записей. Каждая запись имеет поля: фамилия, имя, номер класса, буква класса. Найти двух учащихся, у которых совпадают имя и фамилия.

Вариант 27.

Дан список учащихся из 10 записей. Каждая запись имеет поля: фамилия, имя, номер класса, оценки по трем предметам. Вывести отдельно «хорошистов» (оценки 4 и 5) для указанного извне класса.

Вариант 28.

Багаж пассажира характеризуется количеством вещей (целый тип) и общим весом вещей (вещественный тип). Дан список из сведений о багаже 10 пассажиров. Выяснить, имеется ли пассажир, багаж которого состоит из одной вещи весом менее 30 кг.

Вариант 29.

Дана структура, задающая дату вида:

Struct date {int day;

int month;

int year;};

Пользуясь таким структурным типом, составить программу, определяющую дату, которая была за m дней до сегодняшнего дня.

Вариант 30.

Дан список учащихся из 10 записей. Каждая запись имеет поля: фамилия, имя, номер класса, оценки по трем предметам. Вывести отдельно «троечников» (имеется хотя бы одна тройка, но нет двоек) для указанного извне класса.

Вариант 31.

Дан список учащихся из 10 записей. Каждая запись имеет поля: фамилия, имя, номер класса, буква класса. Вывести фамилию и первую букву имени для всех учеников указанного извне класса.
Лабораторная работа 8. Функции.

Цель работы: научится использовать функции для выполнения однотипных действий над различными данными, правильно задавать параметры функций, передавать указатели на функции в качестве параметров.

Теоретический материал

Часто в программе требуется повторить определенную последовательность операторов в разных частях программы. Для того, чтобы описывать эту последовательность один раз, а применять многократно, в языках программирования применяются подпрограммы. Подпрограмма - автономная часть программы, выполняющая определенный алгоритм и допускающая обращение к ней из различных частей общей программы.

В языке Си существует один вид подпрограмм - функции. Каждая программа в своем составе должна иметь главную функцию main(), служащую точкой входа в программу. Кроме функции main(), в программу может входить произвольное число функций, выполнение которых инициализируется либо прямо, либо вызовами из функции main(). Каждая функция по отношению к другой является внешней. Для того, чтобы функция была доступной, необходимо, чтобы до ее вызова о ней было известно компилятору. Форма записи функции:

<тип > <имя функции>(<формальные параметры>){<тело функции >}

Если тип возвращаемого функцией значения не указан, то подразумевается int. Если с именем функции не связан результат, то нужно указать тип функции void. Параметры, записываемые в обращении к функции, называются фактическими; параметры, указанные в описании функции - формальными. Фактические пара­метры должны соответствовать формальным по количеству, порядку следования и типу. Объекты, объявленные вне функции, действуют в любой функции и называются глобальны­ми. Объекты, объявленные в функции, действуют только в ней и называются локальными. В теле функции обычно присутствует оператор return <выражение>, определяющий возвращаемое функцией значение.

Все параметры функции, кроме массивов, передаются по значению, т.е. внутри функции создаются локальные копии параметров. Если необходимо передать саму переменную, а не её копию, то в функцию передаётся адрес этой переменной. Таким образом, через параметры можно передавать результат выполнения функции. То есть, параметры, с помощью которых результаты должны передаваться из функции в точку вызова, описываются как указатели. Вызов функции может быть оформлен в виде оператора, если с именем функции не связано возвращаемое значение, или в виде выражения, если возвращаемое значение связано с именем функции.

Прототип функции может указываться до вызова функции вместо описания функции для того, чтобы компилятор мог выполнить проверку соответствия типов аргументов и параметров. Прототип функции по форме такой же, как и заголовок функции. В конце него ставится «;».

Функции можно подключать с помощью директивы #include <имя файла>. Такие файлы с функциями удобно использовать в диалоговых программах с пользовательским меню, позволяющих выбрать один из режимов.

Пример 1: Функция с параметрами-значениями. Результат связан с именем функции. В программе объявляется прототип функции, а сама функция описывается ниже.

#include <stdio.h>

int max(int,int); //Прототип функции

void main()

{ int x,y,z;

printf(" input x,y ");

scanf("%d %d",&x,&y);

z=max(x,y); //Вызов функции с фактическими параметрами

printf("x=%d y=%d max=%d",x,y,z);

getch();

}

int max(int a ,int b) //Заголовок функции с формальными параметрами

{ int c;

if (a>b) c=a;

else c=b;

return c;

}

Задание:

Написать программу, максимально разбив ее на модули и нарисовать блок-схему к ней согласно данному варианту.

Вариант 1.

Даны две матрицы А(3x4) и В(3x3). Программа находит и выводит на экран сумму элементов последнего столбца матрицы А и сумму элементов 2-й строки матрицы В.

Вариант 2.

Даны матрицы А(3x4). Программа определяет, сколько положительных элементов в матрице.

Вариант 3.

Даны две матрицы А(3x3) и В(3x3). Программа находит и распечатывает сумму элементов 5-го столбца матрицы А и сумму элементов последней строки матрицы В.

Вариант 4.

Дана матрица А(3x4. Программа находит максимальный элемент I-ой строки и выводит его на экран.

Вариант 5.

Даны матрицы А[3][3] и В[3][3]. Программа выводит матрицу С=А+В

Вариант 6.

Программа вводит целую матрицу А(3x4) и выводит транспонированную к ней матрицу А’, все элементы которой уменьшены в 2 раза.

Вариант 7.

Написать программу, которая вводит целочисленную матрицу А(4x4), находит сумму элементов главной диагонали и количество четных элементов матрицы.

Вариант 8.

Дана матрица А(4x3). Программа находит и распечатывает сумму элементов 2-го столбца матрицы А.

Вариант 9.

Программа находит среднее арифметическое вещественной матрицы А(2x2).

Вариант 10.

Дана матрица А(3x4). Программа находит максимальный элемент 2-го столбца.

Вариант 11.

Даны матрицы А(4x3) и В(2x2). Программа определяет, сколько нулей в матрице А и сколько единиц в матрице В, результат выводит на экран.

Вариант 12.

Дана матрица А(3х4). Определить количество положительных элементов каждого столбца матрицы А и сформировать из них одномерный массив В(4).

Вариант 13.

Найти минимальный элемент матрицы X(4х4) и вывести на экран номер строки и столбца, в которых он находится.

Вариант 14.

Даны матрицы А[3x3] и В[2x2]. Сформировать одномерный массив С, который содержит все элементы двумерного массива А, меньшие максимального элемента матрицы В.

Вариант 15.

Даны матрицы А[4х4], В [4x4] и q. Вывести на экран все элементы массива А, которые меньше, чем максимальный элемент столбца матрицы В, номер которого задается значением q.

Вариант 16.

Вычислить сумму чисел в каждой строке матрицы А(3х4).

Вариант 17.

Вычислить произведение чисел в каждом столбце матрицы А(3х4).

Вариант 18.

Вычислить количество положительных чисел в каждом столбце матрицы А(3х4).

Вариант 19.

Дана матрица А(4х4).Вычислить сумму чисел для каждого столбца, удовлетворяющих условию а[i,j] > х. Здесь х- произвольная величина.

Вариант 20.

Дана матрица А(4х4).Вычислить значение наибольшего элемента для каждой строки массива.

Вариант 21.

Дана матрица А(3х4).Вычислить значение наименьшего элемента для каждого столбца массива.

Вариант 22.

Дана матрица А(3х4).Вычислить значение наибольшего элемента и его индекс для каждого столбца массива

Вариант 23.

Дана матрица А(3х4).Вычислить сумму элементов для каждого столбца. Поменять местами столбцы с максимальным и минимальным значением суммы.

Вариант 24.

Дана матрица А(3х4).Вычислить сумму отрицательных чисел в каждой строке.

Вариант 25.

Дана матрица А(3х4).Вычислить среднее значение чисел в каждой строке массива.

Вариант 26.

Дана матрица размера 3 × 4. Преобразовать матрицу, поменяв местами минимальный и максимальный элемент в каждой строке.

Вариант 27.

Дана матрица размера 4 × 4. Найти количество ее строк, элементы которых упорядочены по возрастанию.

Вариант 28.

Дана целочисленная матрица размера 4 × 4. Найти количество ее столбцов, все элементы которых различны

Вариант 29.

Дана целочисленная матрица размера 3 × 4. Найти номер первого из ее столбцов, содержащих только нечетные числа. Если таких столбцов нет, то вывести 0.

Вариант 30.

Дана матрица размера 4 × 4. Преобразовать матрицу, поменяв местами минимальный и максимальный элемент в каждом столбце.

Вариант 31.

Дана матрица размера 3 × 4. Поменять местами строки, содержащие минимальный и максимальный элементы матрицы.

Наши рекомендации