Лабораторная работа № 10. Типы данных, определяемые пользователем. Структуры и объединения 
";


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Лабораторная работа № 10. Типы данных, определяемые пользователем. Структуры и объединения



Цель и порядок работы

Цель работы – ознакомиться с типами данных, определяемыми пользователем и их применением в процессе программирования.

 

Порядок выполнения работы:

- ознакомиться с описанием лабораторной работы;

- получить задание у преподавателя, согласно своему варианту;

- написать программу и отладить ее на ЭВМ;

- оформить отчет.

Контрольные вопросы

1. Как объявить пользовательский тип данных?

2. Что такое перечисления?

3. Как осуществляется описание структуры?

4. Что такое поле структуры?

5. Как обратится к элементу структуры?

6. К каким типам данных относятся объединения и структуры?

7. Как проинициализировать переменную структурного типа?

8. Для чего применяются структуры?

9. Как объявляется объединение?

10. Как используются объединения?

11. Как обратится к элементу объединения?

12. Что такое битовые поля?

13. Как обратится к элементу битового поля?


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

Вариант 1.

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

- фамилия и инициалы;

- номер группы;

- успеваемость (массив из пяти элементов).

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

- ввод с клавиатуры данных в массив, состоящий из 8 структур типа STUDENT;

- вывод на дисплей фамилий и номеров групп для всех студентов, включенных в массив, если средний балл студента больше 4.0;

- если таких студентов нет, вывести соответствующее сообщение.

 

Вариант 2.

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

- фамилия и инициалы;

- номер группы;

- успеваемость (массив из пяти элементов).

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

- ввод с клавиатуры данных в массив, состоящий из 6 структур типа STUDENT;

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

- если таких студентов нет, вывести соответствующее сообщение.

 

Вариант 3.

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

- фамилия и инициалы;

- номер группы;

- успеваемость (массив из пяти элементов).

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

- ввод с клавиатуры данных в массив, состоящий из 9 структур типа STUDENT;

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

- если таких студентов нет, вывести соответствующее сообщение.

 

Вариант 4.

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

- название пункта назначения рейса;

- номер рейса;

- тип самолета.

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

- ввод с клавиатуры данных в массив, состоящий из 9 элементов типа AEROFLOT;

- вывод на экран информации о рейсе, номер которого введен с клавиатуры;

- если таких рейсов нет, вывести соответствующее сообщение.

 

Вариант 5.

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

- название пункта назначения рейса;

- номер рейса;

- тип самолета.

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

- ввод с клавиатуры данных в массив, состоящий из 7 элементов типа AEROFLOT;

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

- если таких рейсов нет, вывести соответствующее сообщение.

 

Вариант 6.

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

- фамилия и инициалы работника;

- название занимаемой должности;

- зарплату;

- год поступления на работу.

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

- ввод с клавиатуры данных в массив, состоящий из 5 структур типа WORKER;

- вывод на дисплей фамилий работников, чей стаж работы в организации превышает значение, введенное с клавиатуры;

- если таких работников нет, вывести соответствующее сообщение.

 

Вариант 7.

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

- название пункта назначения;

- номер поезда;

- время отправления.

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

- ввод с клавиатуры данных в массив, состоящий из 6 структур типа TRAIN;

- вывод на экран информации о поездах, отправляющихся после введенного с клавиатуры времени;

- если таких поездов нет, вывести соответствующее сообщение.

 

Вариант 8.

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

- название пункта назначения;

- номер поезда;

- время отправления.

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

- ввод с клавиатуры данных в массив, состоящий из 9 структур типа TRAIN;

- вывод на экран информации о пункте назначения, в который отправляется поезд, номер которого введен с клавиатуры;

- если таких поездов нет, вывести соответствующее сообщение.

 

Вариант 9.

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

- название начального пункта маршрута;

- название конечного пункта маршрута;

- номер маршрута.

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

- ввод с клавиатуры данных в массив, состоящий из 7 структур типа MARSH;

- вывод на экран информации о маршруте, номер которого введен с клавиатуры;

- если таких студентов нет, вывести соответствующее сообщение.

 

Вариант 10.

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

- фамилия и имя;

- номер телефона;

- дата рождения (массив из трех чисел).

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

- ввод с клавиатуры данных в массив, состоящий из 6 структур типа NOTE;

- вывод на экран информации о человеке, номер телефона которого введен с клавиатуры;

- если таких людей нет, вывести соответствующее сообщение.

 

Вариант 11.

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

- фамилия и имя;

- номер телефона;

- дата рождения (массив из трех чисел).

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

- ввод с клавиатуры данных в массив, состоящий из 9 структур типа NOTE;

- вывод на экран информации о людях, чьи дни рождения приходятся на месяц, значение которого введено с клавиатуры;

- если таких людей нет, вывести соответствующее сообщение.

 

Вариант 12.

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

- фамилия и имя;

- номер телефона;

- дата рождения (массив из трех чисел).

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

- ввод с клавиатуры данных в массив, состоящий из 9 структур типа NOTE;

- вывод на экран информации о людях, чьи дни рождения приходятся на год, значение которого введено с клавиатуры;

- если таких людей нет, вывести соответствующее сообщение.

 

Вариант 13.

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

- фамилия и имя;

- номер телефона;

- дата рождения (массив из трех чисел).

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

- ввод с клавиатуры данных в массив, состоящий из 9 структур типа NOTE;

- вывод на экран информации о людях, чьи дни рождения приходятся на день, значение которого введено с клавиатуры;

- если таких людей нет, вывести соответствующее сообщение.

 

Вариант 14.

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

- фамилия и имя;

- номер телефона;

- дата рождения (массив из трех чисел).

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

- ввод с клавиатуры данных в массив, состоящий из 5 структур типа NOTE;

- вывод на экран информации о людях, чьи дни рождения совпадают с введенными с клавиатуры;

- если таких людей нет, вывести соответствующее сообщение.

 

Вариант 15.

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

- расчетный счет плательщика;

- расчетный счет получателя;

- перечисляемая сумма в руб.

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

- ввод с клавиатуры данных в массив, состоящий из 5 структур типа ZNAK;

- вывод на экран информации о сумме, снятой с расчетного счета плательщика, введенного с клавиатуры;

- если таких людей нет, вывести соответствующее сообщение.

Содержание отчета

1. Титульный лист.

2. Наименование и цель работы.

3. Краткое теоретическое описание.

4. Задание на лабораторную работу.

5. Схема алгоритма.

6. Листинг программы.

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

 

 


7. Работа со строками в C++. Потоки ввода-вывода. Файловые операции

Краткая теория

1) Строки в C++

Ввод-вывод строк

const int len_str = 100;

char msg[len_str] = "Новая строка";

Если строка при определении инициализируется, ее размерность можно опускать (компилятор сам выделит память, достаточную для размещения всех символов строки и завершающего нуля):

 

char msg[ ] = "Новая строка"; //13 символов

Для размещения строки в динамической памяти надо описать указатель на char, а затем выделить память с помощью new или mallос (первый способ предпочтительнее).

 

char *p = new char[len_str];

 

Для ввода-вывода строк используются как уже известные нам объекты cin и cout, так и функции, унаследованные из библиотеки С.

Рассмотрим сначала первый способ:

 

#include <iostream>

using namespace std;

int main()

{

const int n = 80;

char s[n];

cin >> s;

cout << s << endl;

return 0;

}

 

При вводе строки из нескольких слов, программа выведет только первое слово. Это связано с тем, что ввод выполняется до первого пробельного символа (то есть пробела, знака табуляции или символа перевода строки '\n')

Если требуется ввести строку, состоящую из нескольких слов, в одну строковую переменную, используются методы getline или get класса istream, объектом которого является cin.

#include <iostream>

using namespace std;

int main()

{

const int n = 80;

char s[n];

cin.getline(s, n);

cout << s << endl;

return 0;

}

Если в программе требуется ввести несколько строк, метод getl1nе удобно использовать в заголовке цикла, например:

#include <iostream>

using namespace std;

int main()

{

const int n = 80;

char s[n];

while (cin.getline(s, n))

{

cout << s << endl;

};

return 0;

}

 

Рассмотрим теперь способы ввода-вывода строк, перекочевавшие в С++ из языка С. Во-первых, можно использовать для ввода строки известную нам функцию scanf, а для вывода – printf, задав спецификацию формата %s.

Ввод будет выполняться так же, как и для классов ввода-вывода – до первого пробельного символа. Чтобы ввести строку, состоящую из нескольких слов, используется спецификация %c (символы) с указанием максимального количества вводимых символов, например:

 

scanf("%10c", s);

 

Количество символов может быть только целой константой. При выводе можно задать перед спецификацией %s количество позиций, отводимых под строку:

printf("%10s", s);

 

Функциями семейства printf удобнее пользоваться в том случае, если в одном операторе требуется ввести или вывести данные различных типов. Если же работа выполняется только со строками, проще применять специальные функции для ввода-вывода строк gets и puts.

 

Операции со строками

Для строк не определена операция присваивания, поскольку строка является не основным типом данных, а массивом. Присваивание выполняется с помощью функций стандартной библиотеки или посимвольно «вручную» (что менее предпочтительно, так как чревато ошибками). Например, чтобы присвоить строке p строку a, можно воспользоваться функциями strcpy или strncpy, а для определения длинны строки – strlen.

 

#include <iostream>

#include <string.h>

using namespace std;

int main()

{

char a[100] = "Working with a strings";

size_t m = strlen(a) + 1; //добавим 1 для учета нуль-символа

char *p = new char [m];

strcpy(p, a);

strncpy(p, a, strlen(a) + 1);

return 0;

}

 

Для использования этих функций к программе следует подключить заголовочный файл <string.h>.

Для преобразования строки в целое число используется функция atoi(str). Если преобразование не удалось, возвращает 0.

Аналогичные функции преобразования строки в длинное целое число (long) и в вещественное число с двойной точностью (double) называются atol и atof соответственно.

 

//Пример применения функций преобразования

#include <iostream>

#include <string.h>

using namespace std;

 

int main()

{

char a[] = "15) Кол-во - 249 шт. Цена - 499.99 руб.";

int num;

long quantity;

double price;

num = atoi(a);

quantity = atol(&a[12]);//12 - смещение начала кол-ва

price = atof(&a[27]); //27 - смещение начала цены

cout << num << ' ' << quantity << ' ' << price;

return 0;

}

 

Замечание. При переводе вещественных чисел разделитель целой и дробной части зависит от настроек локализации. По умолчанию используется символ точка. При изменении локализации (функция setlocale(LC_ALL, "Russian")), разделитель меняется на принятый в России, т.е. символ запятая.

 

 



Поделиться:


Последнее изменение этой страницы: 2016-12-11; просмотров: 414; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.224.4.65 (0.005 с.)