Контрольные вопросы для подготовки и самостоятельной работы. Разработка программ с составными типами данных




 

Индивидуальное задание к лабораторной работе №13

Составить программу для обработки многомерных массивов с использованием циклов. Индивидуальные задания приведены в таблице 13.1.

Таблица 13.1 - индивидуальное задание

Вар. Условие задачи
  Вычислить произведение отрицательных чисел строки, у которой второй элемент четный
  Найти сумму нечетных чисел столбца, у которого первый элемент больше второго
  Определить количество отрицательных чисел столбца, у которого первый элемент меньше последнего
  Найти сумму положительных кратных 5 чисел столбца, у которого четвертый элемент отрицательный
  Найти произведение нечетных чисел столбца, у которого первый элемент нуль
  Найти произведение положительных чисел столбца, последний элемент которого нуль
  Найти сумму нечетных элементов строки, первый элемент которой кратен 3
  Найти максимальное отрицательное число строки, у которой второй элемент больше 20
  Найти сумму положительных четных чисел строки, у которой первый элемент отрицательный
  Найти минимальное положительное число строки, у которой пятый элемент отрицательный
  Найти минимальное четное число столбца, у которого первый элемент больше третьего
  Найти сумму положительных кратных 5 чисел столбца, у которого четвертый элемент отрицательный
  Найти количество отрицательных не кратных 3 чисел строки, у которой первый элемент нуль
  Найти количество положительных четных чисел строки, у которой пятый элемент больше 30
  Найти произведение квадратов положительных четных чисел столбца, у которого второй элемент нуль
  Найти среднее арифметическое отрицательных элементов строки, у которой четвертый элемент отрицательный
  Найти разность сумм отрицательных и положительных элементов строки, у которой третий элемент кратен 3
  Найти среднее геометрическое модулей отрицательных элементов столбца, у которого первый элемент положительный
  Найти все кратные 7 положительные элементы столбца, у которого третий элемент нечетный
  Найти среднее арифметическое положительных элементов строки, у которой первый элемент меньше второго
  Найти среднее геометрическое кратных 3 элементов столбца, у которого шестой элемент не кратен 4
  Найти частное от деления количества отрицательных элементов столбца, у которого первый элемент нуль, на их сумму
  Найти все положительные нечетные числа строки, у которой второй элемент не кратен 3
  Найти количество отрицательных кратных 5 элементов столбца, у которого второй элемент равен третьему
  Найти номер максимального четного числа строки, у которой первый элемент равен последнему
  Найти номер минимального нечетного числа строки, у которой первый элемент равен последнему
  Найти номер максимального четного числа столбца, у которого первый элемент равен последнему
  Найти номер минимального нечетного числа столбца, у которого первый элемент равен последнему
  Найти сумму максимального и минимального чисел строки, у которой второй элемент нечетный
  Найти номер минимального нечетного числа строки, у которой первый элемент четный

 

Контрольные вопросы для подготовки и самостоятельной работы

1 Приведите примеры объявления массивов с различной размерностью. Объясните организацию хранения элементов массива.

2 Как происходит масштабирование при последовательном разыменовании указателя (имени массива) в процессе доступа к элементам? Какие синтаксические конструкции можно использовать для доступа к элементам массива?

3 Приведите общую формулу для массива <Тип> <Имя> [N][M][K] при доступе к заданному элементу <Имя> [i][j][k] и объясните её.

4 Как осуществляется инициализация многомерных массивов?

5 Зависит ли инициализация массива от класса памяти при объявлении?

6 Как использовать средство typedef для объявления типа массива.

7 Какой из индексов можно не указывать при явной инициализации массивов?

8 Можно ли указывать не все элементы при инициализации? Как использовать скобки при инициализации?

9 Какой индекс не используется при расчёте величины смещения указателя в процессе доступа к элементу массива?

10 Для чего используется указанный индекс?

Лабораторная работа № 14

Разработка программ с составными типами данных

(2часа)

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

Теоретические сведения

Структуры

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

Объявление структур

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

Представим общий синтаксис для объявления структуры типа (stt) и приведём несколько примеров структур

struct sttype { type1 dataMember1; type2 dataMember2; //другие данныe-члены }[<имя_объекта 1>, <имя_объекта 2>];// объявление типа структуры и необязательное // объявление объектов struct Point { float x; float y; } Apoint, Bpoint, *Ppoint, Mpoint[10]; объявление типа и объектов struct Person {char firstname[12]; char lastname[15]; int birthday; float weight; }; // объявление // типа структуры

После объявления типа (<strucType>), его можно использовать для объявления объектов, например

sttype Astr, Mstr[5], *pstr;

Объявлены объекты структурного типа:

Astr - структура;

Mstr[5]- массив из 5 -ти структур;

pstr- указатель на структуру данного типа.

Структура типа Point имеет два члена-данных типа float.

Структура типа Person - пример структуры, которая содержит данные-члены, которые являются массивами:

firstname []- массив из 12 символов, в котором хранится имя.

lastname []- массив из 15 символов, в котором хранится фамилия.

birthday типа int, в котором хранится год рождения.

weight типа float, в котором хранится вес.

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

Общий синтаксис объявления Пример объявления объектов (переменных) структурного типа
//объявление единственной переменной //sttype sttype structVar; //объявление массива структур sttype sttype stArray[Kol_elem]; Point Origin, StartPoint, Points[10]; Person You, Me, Us[30], *PYou;  

 

В этом примере объявлены переменные- структуры Origin, StartPoint типа Point, массив Points [10], имеющий 10 элементов - структур типа Point, переменные Me и You типа Person, массив Us [30], имеющий 30 элементов- структур типа Person и указатель на тип Person.

С позволяет инициализировать данные-члены структур. Инициализация осуществляется подобно инициализации массивов и следует тем же правилам. Общий синтаксис для инициализации данных-членов структуры:

sttype strucVar ={value1,value2,...};

Компилятор присваивает значение value1 первому данному-члену структуры strucVar, value2 - второму данному-члену структуры strucVar и т.д. С требует соблюдения следующих правил:

1 Присваиваемые значения должны быть совместимы с соответствующими им данными-членами по типу, диапазону и количеству (для массивов).

2 Можно объявлять меньшее количество присваиваемых значений, чем количество данных. Компилятор присваивает нули остальным данным- членам структуры.

3 Нельзя указывать больше инициализирующих значений, чем количество данных-членов.

4 Значения из списка инициализации последовательно присваиваются данным-членам вложенных структур и массивов.

Пример инициализации структуры - Point fPoint={12.4,34.5};

В этом примере объявлена переменная fPoint типа Point и инициализированы данных члены х, у значениями 12.4 и 34.5.

Доступ к данным-членам осуществляется с помощью операции (.)"точка".

 

Общий синтаксис для доступа к данным-членам структуры Примеры доступа к данным - членам структуры
StrucVar.dataMember <Имя_структуры>. <данное_член>; Point myPoint; //объявление MyPoint. x=10.9; //доступ кх MyPoint. y=21.89;

 

myPoint -структурная переменная, доступ к её данным-членам х, у осуществляется с помощью выражения myPoint. x и myPoint. y соответственно.

 

Пример

 

/* ЗАНЯТИЕ N 14

Разработал Петров Ю.В.

Объявить составные типы данных, выполнить их

инициализацию. Массив структур инициализировать с

использованием операторов организации цикла. Получить доступ

к элементам структур. Вывести значения элементов массива

структур на экран с применением функции. */

 

#include <stdio.h>

#include <string.h>

#include <conio.h>

#include <alloc.h>

 

#define N 20

#define M 5

typedef struct Adr //Adr -тип структуры

{ char town[N]; char *country;

char region; float indeks; int kolvo;

} adr; //adr -тоже тип структуры (синоним Adr)

//input_st() -функция для инициализация структуры типа adr

adr input_st(char *town, char *coun, char reg, float ind, int kol);

void print_st(adr adr3); //Функция вывода элементов структуры

 

int main(void)

{ clrscr();

int a; float f1;

char str[125]; //Буфер для ввода строки символов

adr adress[M]; //Массив структур

adr adr1,adr2={"Kiev","Ukr",'r',12.3,15}; //Явная инициализация

adr1=adr2; //Инициализация adr1 присваиванием

printf("Вывод элементов структуры ");

print_st(adr1); //Вывод adr1

adr1=input_st("Kr","Ukr",'t',134.5,2); //Инициализация adr1

printf("Вывод элементов структуры ");

print_st(adr1); //Вывод adr1

int i=0,j;

 

while (a&&i<M) //Ввод элементов массива структур

{ printf("Ввод города (char array[N]) ");

scanf("%s",&adress[i].town); fflush(stdin);

printf("Ввод страны (char *) ");

scanf("%s",str); fflush(stdin);

adress[i].country=(char*)malloc(strlen(str)+1);

strcpy(adress[i].country,str);

//adress[i].country=strdup(str); //Возможный вариант иниц.

printf("Ввод кода региона (char) ");

scanf("%c", &adress[i].region); fflush(stdin);

printf("Ввод цифрового кода (float) ");

scanf("%f",&f1); fflush(stdin);

adress[i].indeks=f1;

printf("Ввод количества (int) ");

scanf("%i",&adress[i].kolvo); fflush(stdin);

printf("\n\t\t\t Продолжить ввод? y/n: ");

char c=getche(); printf("\n");

if (c=='n' || c=='N') a=0;

i++;

} //end while---------------------------------------------

printf("Вывод элементов структур\n ");

j=i;

for(i=0;i<j;i++) print_st(adress[i]);

getche();

return 0;

} //end main()-----------------------------------------------

 

adr input_st(char *t, char *c, char r, float f, int k)

{ adr ad; //Объявление локальной структуры

strcpy(ad.town,t); //Копирование "t" в "ad.town"

ad.country=(char*)malloc(strlen(c)+1); //Выделение памяти

strcpy(ad.country, c); //Копирование "c" в "ad.country"

// ad.country=strdup(c); //Возможный вариант инициализации

ad.region=r; ad.indeks=f; ad.kolvo=k;

return ad; //Возврат структуры из функции

} //end input_st ()---------------------------------------

void print_st(adr adr3) //Функция вывода элементов структуры

{ printf("| %s ", adr3.town);

printf("| %s ", adr3.country);

printf("| %4c | %10f|%6i|\n",adr3.region, adr3.indeks, adr3.kolvo);

} //end print_st()-----------------------------------------

 

/*Вывод элементов структуры | Kiev | Ukr | r | 12.300000| 15|

Вывод элементов структуры | Kr | Ukr | t | 134.500000| 2|

Ввод города (char array[N]) Don

Ввод страны (char *) Ukr

Ввод кода региона (char) t

Ввод цифрового кода (float) 45.67

Ввод количества (int) 8

Продолжить ввод? y/n: y

Ввод города (char array[N]) Khar

Ввод страны (char *) Ukr

Ввод кода региона (char) g

Ввод цифрового кода (float) 67.84

Ввод количества (int) 4

Продолжить ввод? y/n: n

Вывод элементов структур | Don | Ukr | t | 45.669998| 8|

| Khar | Ukr | g | 67.839996| 4| */

 

Ход работы

1 Изучить теоретические сведения.

2 В соответствии с индивидуальным заданием разработать алгоритм решения задачи. Объявить составные (комбинированные) типы, массивы структур, использовать указатели в качестве членов структуры, объявить объединение и выполнить работу с объединением. Результаты инициализации, изменения членов комбинированных типов в процессе вычисления вывести на экран.

3 Разработать программу, набрать программу на компьютере, устранить ошибки.

4 Получить результат.

5 Оформить отчет.

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

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2022-09-06 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: