Лекции.Орг


Поиск:




Категории:

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

 

 

 

 


typedef struct // создаем свой тип адрес

Struct

{

char street[10];

char city[10];

unsigned long int index;

}kinoPenza[3];

 

В этом случае имя описания структуры указывать не обязательно, как в объявлении 3.

 

Часто удобно использовать ключевое слово typedef при описании структуры, таким образом создается новый тип данных, и при объявлении переменных можно опускать слово struct. Например так:

Typedef struct

{

char street[10];

char city[10];

unsigned long int index;

}address; // создали собственный тип данных address

address sovremenik; // создали переменную с типом address

address[3] kinoPenza; // создали массив переменных с типом address

 

Доступ к членам структуры.

Доступ к отдельным членам структуры осуществляется с помощью оператора. (который обычно называют оператором точка или оператором доступа к члену структуры). Например, в следующем выражении полю index в уже объявленной переменной-структуре sovremenik присваивается значение почтового индекса, равное 440008:

 

sovremenik.index = 440008;

Значению city присваивается значение Penza

char city[5] = {'P','e','n','z','a'};

int i =0;

while (i < 5){

sovremenik.city[i]= city[i];

i++;

}

Полями структуры могут быть другие структуры.

 

Например созданная ранее структура address может быть полем другой структуры:

 

typedef struct // создаем свой тип адрес

{

char street[10];

char city[5];

unsigned long int index;

}address;

 

typedef struct { // создаем свой тип студент

char name[10];

address adr;

}student;

 

 

student alex; // создаем переменную с типом студент

 

Тогда чтобы получить доступ к индексу во вложенной структуре используется два оператора.

alex.adr.index = 440049;// обращаемся к полю вложенной структуры

 

Присваивание структур

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

Например, так

alex.adr = sovremenik;

 

Указатель на структуру:

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

student* pointerStudent; // объявляем указатель на структуру типа студент

pointerStudent = &alex; // указатель указывает на alex

 

Указатели на структуры в Си широко распространены, поэтому присутствует специальный оператор доступа к полям структуры, через указатель на структуру. ->

 

address alexAdress = pointerStudent-> adr;// доступ к полю adr, через

// указатель на структуру.

 

Объединения.

Объединение — это объект, который в данный момент может содержать любой из нескольких членов. Т.е. описывает общее место в памяти для всех своих членов. Размер объединения равен размеру наибольшего члена.Объединение можно использовать для экономии памяти, или для представления одного значения в разных типах переменных. Для того чтобы описать объединение используется ключевое слово union. Описание и использование объединения похоже на описание структуры, например.

// описание объединения, размер 32 бита.

union bit32{

int int_value;

char char_massive[4];

short int short_massive[2];

float float_value;

};

// создание переменной

union bit32 myUnion;

Доступ до полей с помощью оперетора «.»

 

printf ("%d \n", sizeof (myUnion));// размер переменной myUnion в байтах

myUnion.int_value = 0x11223344; // присваиваем значение одному из полей

// в других полях появилось этоже значение.

for (i = 0; i < 4; i++){

printf ("%x \n",myUnion.char_massive[i]); // выведет 44 33 22 11

}

for (i = 0; i < 2; i++){

printf ("%x \n",myUnion.short_massive[i]);// выведет 3344 1122

}

printf ("%e \n",myUnion.float_value);// выведет 1.279534e-028.

 

 

Практическая часть.

 

1. Создать и инициализировать структуру для хранения отметок в зачетной книжке за семестр. С обязательными полями – фамилия, оценки за 3 экзамена, и с любым количеством дополнительных полей.

2. Создать и инициализировать массив из 3, созданных ранее структур.

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

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

5. Сделать инициализацию массива структур из пункта 2, с помощью ввода данных с клавиатуры. Повторить пункты 3-4.

 

Пример кода программы:

 

#include <stdio.h>

#include <math.h>

#include <ctype.h>

 

enum {

TAU,

Informatika,

NumberExamsSubject,

};

enum {

NumberStudents = 3,

};

typedef struct {

char name[40];

unsigned char examsMark[ NumberExamsSubject ];

float meanExamsMark;

}recordBook;

 

void main ( void ){

// длякорректнойработыprintf и scanf

setvbuf (stdin, NULL, _IONBF, 0);

setvbuf (stdout, NULL, _IONBF, 0);

 

// Инициализация в текстепрограммы

recordBook students[ NumberStudents ] = {

{" Иванов ", {4,4}},

{" Петров ", {5,5}},

{" Сидоров ", {3,4}}

};

// инициализация с помощьюклавиатуры

int i = 0;

int j = 0;

for (i = 0; i < NumberStudents; i++){

printf (" Введитефамилию %d студента \n", i+1);

scanf ("%s", students[i].name);

for (j = 0; j < NumberExamsSubject;j++){

printf (" Введитеоценку %d студентаза %d предмет \n", i+1, j+1);

scanf ("%d", &students[i].examsMark[j]);

}

}

// Нахождениесреднейоценкипоэкзаменам

for (i = 0; i < NumberStudents; i++){

int summa = 0;

for (j = 0; j < NumberExamsSubject;j++){

summa += students[i].examsMark[j];

}

students[i].meanExamsMark = (float)summa/ NumberExamsSubject;

}

// Нахождениесреднейоценкипогруппе

float meanMarkGroup = 0;

for (i = 0; i < NumberStudents; i++){

meanMarkGroup += students[i].meanExamsMark;

}

meanMarkGroup = meanMarkGroup/ NumberStudents;

 

// Нахождениестудента с оценкойсамойблизкой к средней

float difference = 0;

float min_difference = fabs (meanMarkGroup - students[0].meanExamsMark);// начальнаяразница

int student_index = 0;

for (i = 1; i < NumberStudents; i++){

difference = fabs (meanMarkGroup - students[i].meanExamsMark);

if (difference < min_difference){

min_difference = difference;

student_index = i;

}

}

printf (" Cтудент с самойблизкой к среднейоценкой - %s",students[student_index].name);

}

 

 

Варианты заданий.

 

 

Вариант 1.
1.Описать структуру с именем student, содержащую следующие поля:
• name – фамилия;
• group – номер группы (целое число);
• marks – успеваемость, оценки (массив из пяти элементов).
2. Написать программу, выполняющую следующие действия:

• инициализацию массива massiveStudents, состоящий из 3 структур типа student в тексте программы;
• ввод с клавиатуры данных в массив massiveStudents, состоящий из 3 структур типа student;
• вывод на дисплей фамилий и номеров групп для всех студентов, включенных в массив, если средний балл студента больше 4,0;
• если таких нет, вывести соответствующее сообщение.

Вариант 2
1. Описать структуру с именем student, содержащую следующие поля:
• name – фамилия;
• group – номер группы (целое число);
• marks – успеваемость, оценки (массив из пяти элементов).


2. Написать программу, выполняющую следующие действия:

• инициализацию массива massiveStudents, состоящий из 3 структур типа student в тексте программы;

• ввод с клавиатуры данных в массив massiveStudents, состоящий из 3 структур типа student;

• вывод на дисплей фамилий и номеров групп для всех студентов, имеющих оценки 4 и 5;
• если таких нет, вывести соответствующее сообщение.

Вариант 3
1. Описать структуру с именем student, содержащую следующие поля:
• name – фамилия;
• group – номер группы (целое число);
• marks – успеваемость, оценки (массив из пяти элементов).


2. Написать программу, выполняющую следующие действия:

• инициализацию массива massiveStudents, состоящий из 3 структур типа student в тексте программы;

• ввод с клавиатуры данных в массив massiveStudents, состоящий из 3 структур типа student;

• вывод на дисплей фамилий и номеров групп для всех студентов, имеющих хотя бы одну оценку 2;
• если таких студентов нет, вывести соответствующее сообщение.

 

Вариант 4

1. Описать структуру с именем student, содержащую следующие поля:
• name – фамилия;
• group – номер группы (целое число);
• marks – успеваемость, оценки (массив из пяти элементов).


2. Написать программу, выполняющую следующие действия:

• инициализацию массива massiveStudents, состоящий из 3 структур типа student в тексте программы;

• ввод с клавиатуры данных в массив massiveStudents, состоящий из 3 структур типа student;

• вывод на дисплей фамилий и всех оценок студентов, фамилия которых содержит букву а;
• если таких студентов нет, вывести соответствующее сообщение.

Вариант 5

1. Описать структуру с именем student, содержащую следующие поля:

• name – фамилия;
• attendance – посещаемость в процентах (целое число);
• marks – успеваемость, оценки (массив из пяти элементов).

• balls – общая характеристика учебы. (число с плавающей точкой)


2. Написать программу, выполняющую следующие действия:

• инициализацию массива massiveStudents, состоящий из 3 структур типа student в тексте программы, поле balls не заполняется;

• ввод с клавиатуры данных в массив massiveStudents, состоящий из 3 структур типа student, поле balls не заполняется;

• для каждого студента рассчитать балы (balls) по формуле – сумма оценок (marks) * посещаемость (attendance)/ 100;
• для каждого студента вывести на экран фамилию и рассчитанный бал.

 

Вариант 6

2. Описать структуру с именем student, содержащую следующие поля:

• name – фамилия;
• attendance – посещаемость в процентах (целое число);
• marks – успеваемость, оценки (массив из пяти элементов).

• balls – общая характеристика учебы. (число с плавающей точкой)


2. Написать программу, выполняющую следующие действия:

• инициализацию массива massiveStudents, состоящий из 3 структур типа student в тексте программы, поле balls не заполняется;

• ввод с клавиатуры данных в массив massiveStudents, состоящий из 3 структур типа student, поле balls не заполняется;

• для каждого студента рассчитать балы (balls) по формуле – посещаемость (attendance)/100 + средняя оценка по всем 5 дисциплинам;
• для каждого студента вывести на экран фамилию и рассчитанный бал.

 

Вариант 7

3. Описать структуру с именем student, содержащую следующие поля:

• name – фамилия;
• attendance – посещаемость в процентах (целое число);
• marks – успеваемость, оценки (массив из пяти элементов).

• balls – общая характеристика учебы. (число с плавающей точкой)


2. Написать программу, выполняющую следующие действия:

• инициализацию массива massiveStudents, состоящий из 3 структур типа student в тексте программы, поле balls не заполняется;

• ввод с клавиатуры данных в массив massiveStudents, состоящий из 3 структур типа student, поле balls не заполняется;

• узнать среднюю посещаемость (attendance) в массиве студентов;

• узнать среднюю оценку (marks) для каждого студента;
• вывести рассчитанные значения на дисплей.

 

Вариант 8

4. Описать структуру с именем student, содержащую следующие поля:

• name – фамилия;
• attendance – посещаемость в процентах (целое число);
• marks – успеваемость, оценки (массив из пяти элементов).

• year – год поступления (целое число).

• payment – платник?(может быть 0 или 1).

 

 


2. Написать программу, выполняющую следующие действия:

• инициализацию массива massiveStudents, состоящий из 3 структур типа student в тексте программы,

• ввод с клавиатуры данных в массив massiveStudents, состоящий из 3 структур типа student.

• Вывести на дисплей фамилию студента с лучшей посещаемостью;

• Вывести на дисплей фамилии студентов - платников, если такие есть.

 

 

Вариант 9

1. Описать структуру с именем student, содержащую следующие поля:

• name – фамилия;
• attendance – посещаемость в процентах (целое число);
• marks – успеваемость, оценки (массив из пяти элементов).

• year – год поступления (целое число).

• payment – платник?(может быть 0 или 1).

 


2. Написать программу, выполняющую следующие действия:

• инициализацию массива massiveStudents, состоящий из 3 структур типа student в тексте программы,

• ввод с клавиатуры данных в массив massiveStudents, состоящий из 3 структур типа student.

• Вывести на дисплей фамилии студентов - бюджетников, если такие есть.

• Вывести на дисплей фамилию студента с лучшей суммой оценок;


Вариант 10

2. Описать структуру с именем student, содержащую следующие поля:

• name – фамилия;
• marks – успеваемость, оценки (массив из пяти элементов).

• payment – плата за обучение.

• grant – стипендия за обучение.

 


2. Написать программу, выполняющую следующие действия:

• инициализацию массива massiveStudents, состоящий из 3 структур типа student в тексте программы,

• ввод с клавиатуры данных в массив massiveStudents, состоящий из 3 структур типа student.

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

 

 



<== предыдущая лекция | следующая лекция ==>
Оценка рыночных взаимоотношений между производителями и посредниками з использованием матрицы связей | Понятие, классификация, структура основных фондов предприятия
Поделиться с друзьями:


Дата добавления: 2016-10-06; Мы поможем в написании ваших работ!; просмотров: 1317 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Наука — это организованные знания, мудрость — это организованная жизнь. © Иммануил Кант
==> читать все изречения...

2242 - | 2051 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.013 с.