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

ЛАБОРАТОРНАЯ РАБОТА № 1.

ТИПЫ ДАННЫХ. ОПЕРАЦИИ И ВЫРАЖЕНИЯ.

Для выполнения лабораторной работы необходимо изучить теоретический материал учебного пособия пп. 1.4 – 1.8.

Первым шагом в разработке любой программы должен быть анализ входных и выходных данных: выбор объектов, в которых эти данные будут храниться (в простейшем случае это переменные и константы) и определение типа этих объектов. Рассмотрим следующий пример.

Пример 1.1

Студент сдаёт в сессию экзамены и зачёты и получает оценку за экзамен и отметку «зачтено» или «незачтено» за зачёт. Написать программу, в которой будут объявлены переменные (или константы) для учёта результатов сдачи сессии, переменные инициализированы значениями и выведены на экран дисплея. (Инициализация переменной означает, что она получит начальное значение в момент объявления.)

Для упрощения задачи будем считать, что студент будет сдавать три экзамена и два зачёта, а оценка за экзамен выражается числом от 2 до 5. Это число целое, поэтому необходимо выбрать целый тип данных. Чаще всего используется тип int. В данном случае, можно выбрать тип short, т.к. все возможные значения (2,3,4,5) входят в диапазон этого типа. Возможно также добавить спецификатор unsigned, т. к. значения заведомо положительные. Итак, для хранения оценок за экзамены, нам необходимо объявить три переменные, например, типа short. Желательно, чтобы идентификаторы для переменных отражали их назначение. Поэтому первый оператор объявления может быть таким:

short exam1, exam2,exam3; .

Отметки за зачёт выражаются в словесной форме: «зачтено», «незачтено». Поэтому мы могли бы использовать для них строковые константы "зачтено","незачтено". Но т. к. строковая константа не может быть присвоена одной переменной базового типа, будем считать, что отметка «зачтено» выражается символом «+», а «незачтено» – символом «­–». В этом случае можно объявить две переменные типа char:

char test1,test2; .

Наконец, чтобы оценить результаты сдачи сессии, объявим ещё одну переменную логического типа, которая может принимать два возможных значения: true и false. Пусть в нашем случае значению true (истина) будет соответствовать успешная сдача всех экзаменов и зачётов, а значению false (ложь) – если хотя бы один экзамен или зачёт не сдан.

После объявления переменных необходимо, чтобы они получили значения. Это возможно сделать двумя способами: 1) с помощью присваивания начальных значений 2) ввести значения с клавиатуры. Воспользуемся первым способом. Инициализация переменных происходит сразу при их объявлении. Далее все значения переменных будут выведены на экран с помощью операции << – вставки в стандартный поток cout. Кроме значений переменных, на экран будут выведены сообщения для пользователя в виде строковых констант, например, "оценки за экзамен:". Для того, чтобы была возможность работать с потоками cin (ввода) и cout (вывода), первой строкой программы будет директива препроцессора, подключающая заголовочный файл <iostream>:

#include <iostream>

Итак, код программы будет следующим:

#include <iostream>

using namespace std;

void main() // заголовок главной функции

{setlocale(LC_CTYPE, "rus"); // русификация консольного приложения

short exam1=2,exam2=4,exam3=5;

char test1='+',test2='-';

bool session;

cout<<"мат. анализ :"<<exam1<<"\t алгебра :"<<exam2<<"\t дискрет.

математика :"<<exam3<<endl;

cout<<"зачёты : \n";

cout<<"информатика "<<test1<<"\t мат. анализ "<<test2<<endl;

session=(exam1>2)&&(exam2>2)&&(exam3>2)&&(test1=='+')&&

(test2=='+');

cout<<"\nЕсли сессия успешно сдана, будет напечатана 1, если нет-

0,Ваш результат :"<<session<<endl;

}

Рассмотрим использование логической переменной в этой программе. Ей было присвоено значение логического выражения, в котором с помощью операций отношения > значения переменных exam1,exam2,exam3 сравниваются с 2, а значения переменных test1,test2 сравниваются со значением '+' с помощью операции == (равно). Получившиеся логические выражения объединены с помощью операции && («и»). Её использование предполагает, что только в случае истинности всех выражений в скобках итоговое выражение примет значение истина (). Если хотя бы одно из выражений в скобках ложно (), то переменная session также примет значение ложь. Для значений переменных, использованных в программе, результатом будет false(0), что и будет выведено на экран.

В результате объявления под переменные будет выделена оперативная память в соответствии с их типом. Выясним, сколько места занимают в памяти объявленные в программе переменные. Это можно сделать с помощью операции sizeof. Добавим в конец программы следующий оператор:

cout<<”exam1 занимает ”<<sizeof(exam1) <<” ,test1 занимает ”<<

sizeof(test1)<<”,session занимает ”<<sizeof(session)<<”байт\n\n”;

После выполнения программы в консольном режиме, можно увидеть окно:

Рассмотрим далее такой важный вопрос, как явное и неявное преобразование типа.

Пример 1.2

Пусть по курсу «Информатика» студент получает зачёт, если наберёт больше половины итогового балла, который рассчитывается по формуле:

,

где n – количество сданных лабораторных, k =1,5 – повышающий коэффициент за выполнение лабораторной работы повышенного уровня сложности. Например, студент сдал 3 лабораторные работы, из них две – повышенной сложности. Объявим в программе переменные:

short sum, sumM,lab1,lab2,lab3;

float k;

Тогда найти итоговый балл можно с помощью оператора присваивания:

sum=sumM+lab1+k*(lab2+lab3);

При вычислении данного выражения в соответствии с приоритетами операций и правилами повышения типа тип переменных lab2 и lab3 будет вначале повышен до int, выполнится сложение, а далее результат будет повышен до типа float и выполнится умножение. После выполнения ещё двух сложений результат выражения имеет тип float. Например, вычисленное значение равно 50,5. Далее оно присваивается целой переменной sum и, в соответствии с правилами преобразования типа, будет усечено до целого значения 50. Итак, студенту не хватило полбалла для получения зачёта! Исправить ситуацию можно, если использовать тип float для переменной sum.

Вернёмся к примеру 1.1. Допустим, нам необходимо найти среднюю оценку, полученную студентом за экзамены. Объявим ещё две переменных: sred – для средней оценки и n – для количества экзаменов:

float sred;

int n=3;

Добавим в программу следующий оператор:

sred=(exam1+exam2+exam3)/n;

При выводе значения sred на экран мы ожидаем увидеть 3,66667. Но будет выведено значение 3. Переменные exam1,exam2,exam3,n имеют целый тип, поэтому произойдёт деление нацело. В этом случае можно явным образом преобразовать тип при помощи операции приведения типа:

sred=(exam1+exam2+exam3)/float(n); или

sred=float(exam1+exam2+exam3)/n;

Интересный эффект будет получаться, если использовать переменные символьного типа в арифметических выражениях. Например, попытаемся найти «среднюю отметку за зачёты» с помощью оператора:

sred=(test1+test2)/2;

На экран будет выведено число 44. Символьный тип будет приведён к типу int, а это означает, что символ '+' будет заменен своим кодом в таблице ASCII – 43, а символ '-' кодом 45. В итоге получаем значение 44. Если результат арифметического выражения снова привести к типу char и включить в программу оператор cout<<char((test1+test2)/2)<<endl; , то в результате на экране появится символ ',' ,т. к. код этого символа 44.

Варианты лабораторных работ.

Для каждого варианта лабораторной работы необходимо сделать следующее:

с помощью директивы #include включить в свою программу заголовочные файлы <limits.h> и <float.h>. Открыть эти файлы для просмотра (например, нажатием правой кнопки мыши на имени файла). Найти в файлах объявления констант для задания минимального и максимального значения базовых типов. Вывести на экран значения констант, например, так:

cout<<"диапазон значений типа double от "<<DBL_MIN<<" до "<<

DBL_MAX;

Часть А (базовый уровень).

А1. 1) Объявить в программе переменные и константы (выбор обосновать) для хранения следующих данных:

а) площадь произвольного цилиндра,

б) масса Солнца,

в) масса планеты Солнечной системы,

г) ответ от пользователя на вопрос в форме «да» или «нет».

2) Сделать в программе следующие объявления: int x; long y; float z;

3) Все объявленные в программе переменные и константы инициализировать.

4) Присвоить некоторой переменной (определить её тип) результат следующего выражения: z/(x+y++).

5) Результат вывести на экран и объяснить его с точки зрения преобразований типов и приоритетов операций.

6) Вывести на экран размерности всех использованных в программе типов данных.

А2. 1) Объявить в программе переменные и константы (выбор обосновать) для хранения следующих данных:

а) число ,

б) возраст человека,

в) масса электрона,

г) расстояние между космическими объектами.

2) Сделать в программе следующие объявления: double a; const float b=1.23e22; int c; short d=32767;.

3) Все объявленные в программе переменные и константы инициализировать.

4) Присвоить некоторым переменным (определить их тип) результаты следующих выражений: ++d+10, (a+b)*(a++ – c).

5) Результат вывести на экран и объяснить его с точки зрения преобразований типов и приоритетов операций.

6) Вывести на экран размерности всех использованных в программе типов данных.

А3. 1) Объявить в программе переменные и константы (выбор обосновать) для хранения следующих данных:

а) гравитационная постоянная,

б) натуральное число,

в) буквы английского алфавита,

г) индикатор «включен», «выключен».

2) Сделать в программе следующие объявления unsigned short num; char ch; long l_n;

3) Все объявленные в программе переменные и константы инициализировать.

4) Присвоить некоторой переменной (определить её тип) результат следующего выражения: ++num -(ch+l_n*3.5).

5) Результат вывести на экран и объяснить его с точки зрения преобразований типов и приоритетов операций.

6) Вывести на экран размерности всех использованных в программе типов данных.

Часть В (уровень повышенной сложности).

В1. Объявить в программе две переменные логического типа. Вывести на экран таблицу истинности. Можно ли изменение значений логических переменных выполнять с помощью операции инкремента?

B2. Максимальное значение для типа данных можно найти по формуле:

(умножение на 8 происходит, т. к. в байте 8 бит). Написать программу, в которой находятся максимальные значения базовых типов и сравнить их с константами, объявленными в файлах <limits.h> , <float.h>.

Указание : для возведения в степень воспользоваться функцией pow(x,y).

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

Соседние файлы в папке Архив(1 курс)