Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практическое занятие №1234 по си++.docx
Скачиваний:
9
Добавлен:
08.11.2018
Размер:
787.62 Кб
Скачать

Практическое занятие №1. Линейные программы. Расчет по формуле

1. Цель работы

Целью практического занятия является получение практических навыков при создании консольных приложений на языке C++ в интегрированной среде разработки Microsoft Visual Studio 10.0, в работе с типами данных языка C++ и в использовании функций стандартного ввода-вывода.

2. Темы для предварительного изучения

  • Типы данных языка C.

  • Объявление переменных.

  • Основные операции.

  • Функции потокового ввода-вывода.

3. Задание для выполнения

Разработать программу для расчета по двум формулам [ ]. Предварительно подготовить тестовые примеры по второй формуле с помощью калькулятора (результат вычисления по первой формуле должен совпадать со второй). Для использования математических функций библиотеки C++ необходимо подключить к программе заголовочный файл <math. h>.

4. Варианты индивидуальных заданий

Вариант 1

Вариант 2

Вариант 3

Вариант 4

Вариант 5

Вариант 6

Вариант 7

Вариант 8

Вариант 9

Вариант 10

Вариант 11

Вариант 12

Вариант 13

Вариант 14

Вариант 15

Вариант 16

Вариант 17

Вариант 18

Вариант 19

Вариант 20

5. Пример решения задачи

5.1. Разработка алгоритма решения

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

Написать программу, которая переводит температуру в градусах по Фаренгейту в градусы Цельсия по формуле:

где С — температура по Цельсию, a F — температура по Фаренгейту.

5.2. Определение переменных программы

Перед написанием любой программы надо четко определить входные данные (то есть что в нее требуется ввести) и выходные данные (результаты). В данном случае в качестве исходных данных выступает одно вещественное число, представляющее собой температуру по Цельсию, в качестве результата — другое вещественное число (температура по Фаренгейту). Алгоритм трудности не представляет, поэтому приводить его не будем.

5.3. Разработка текста программы

Вариант программы приведен ниже.

#include <conio.h>

#include <windows.h>

#include <iostream>

using namespace std;

int main() //1

{

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

float fahr, сels; //2

cout << endl << " Введите температуру по Фаренгейту" << endl;

_getch(); //3

cin >> fahr; //4

сels = 5.0 / 9 * (fahr - 32); //5

cout << " По Фаренгейту: " << fahr << ". в градусах Цельсия: "<< сels << endl; getch(); //6

_getch();

return 0; //7

}

5.4. Результат работы программы представлен на рисунке:

Рассмотрим каждую строку программы отдельно.

В начале программы записаны директивы препроцессора, по которой к исходному тексту программы подключаются заголовочные файлы <conio.h>, <windows.h>, <iostream>. Директивы препроцессора записываются в отдельной строке, перед знаком # могут находиться только пробельные символы.

Заголовочный файл conio.h (от англ. console input-output — консольный ввод-вывод)  используется в компиляторах для создания текстового интерфейса пользователя. Этот заголовочный файл объявляет несколько библиотечных функций для работы с «консольным вводом и выводом» программы. В программе использована функция int getch(void), считывающая символ напрямую из консоли без использования буфера и echo-вывода. Вызов этой функции обеспечивает задержку командного окна до нажатия любой клавиши на клавиатуре.

Заголовочный файл windows.h содержит объявления всех библиотечных функций Windows API (Application Programming Interface - интерфейс прикладного программирования), все макросы и типы данных, используемые в программировании под Windows. В нашей программе использованы функции SetConsoleCP(1251) и SetConsoleOutputCP(1251),обеспечивающие правильную кодировку кириллицы в консольном приложении. Задержку командного окна, кстати, мог обеспечить вызов функции Sleep(a) из этой же библиотеки (например,Sleep(10);)

Заголовочный файл iostream содержит описания элементов стандартной библиотеки, необходимых для выполнения ввода-вывода. Если говорить более конкретно, то в этом файле описан набор классов для управления вводом/выводом, стандартные объекты-потоки cin для ввода с клавиатуры и cout для вывода на экран, а также операции помещения в поток << (вывода на экран) и извлечения из потока >> (ввода с клавиатуры).

Программа на C++ состоит из функций. Функция — это именованная последовательность операторов. Функция состоит из заголовка и тела. Строка, помеченная комментарием 1, представляет собой заголовок главной (а в данном случае и единственной) функции программы. Она должна иметь имя main, указывающее, что именно с нее требуется начинать выполнение. Заголовок любой функции пишется по определенным правилам. За именем функции в скобках обычно следует список передаваемых ей параметров. В данном случае он пуст, но скобки необходимы для того, чтобы компилятор мог распознать, что это именно функция, а не другая конструкция языка. Перед именем записан тип значения (int — целое), возвращаемого функцией в точку ее вызова (в данном случае — во внешнюю среду). По стандарту главная функция должна возвращать целочисленное значение, этим в программе занимается оператор return 0 (7).

После круглых скобок в фигурных скобках записывается тело функции, то есть те операторы, которые требуется выполнить. Для удобства восприятия принято рас­полагать тело с отступом в 3-4 позиции от заголовка. Обратите внимание, что закрывающая скобка находится в той же колонке, что и первый символ заголовка функции. Это требование хорошего стиля, а не синтаксиса.

Для хранения исходных данных и результатов надо выделить достаточно места в оперативной памяти. Для этого служит оператор 2. В нашей программе требуется хранить два значения: температуру по Цельсию и температуру по Фаренгейту, поэтому в операторе определяются две переменные. Одна, для хранения температуры по Фаренгейту, названа fahr, другая (по Цельсию) — сels.

Имена переменным дает программист, исходя из их назначения. Имя может состоять только из латинских букв, цифр и знака подчеркивания и должно начинаться не с цифры (требования стандарта к идентификаторам). От того, насколько удачно подобраны имена в программе, зависит ее читаемость — одна из важных характеристик программы.

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

Поскольку температура может принимать не только целые значения, для переменных выбран вещественный тип float. Можно также выбрать тип double, позволяющий представлять вещественные числа большего диапазона значений и с большей точностью, но для данной задачи это неразумно.

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

Для того, чтобы пользователь программы знал, в какой момент требуется ввести с клавиатуры данные, применяется так называемое приглашение к вводу (оператор 3). На экран выводится указанная в операторе строка символов, и курсор переводится на следующую строку. Строка символов, более строго называемая символьным литералом, — это последовательность любых представимых в компьютере символов, заключенная в кавычки.

Стандартный объект, с помощью которого выполняется вывод на экран, называется cout. Ему с помощью операции « передается то, что мы хотим вывести. Для вывода нескольких элементов используется цепочка таких операций. Для перехода на следующую строку записывается волшебное слово endl. Это — так называемый манипулятор; он управляет, то есть «манипулирует» стандартным объекте» cout. Существуют и другие манипуляторы, с помощью которых можно задать вид выводимой информации.

В операторе 4 выполняется ввод с клавиатуры одного числа в переменную fahr. Для этого используется стандартный объект cin и операция извлечения (чтения) >>. Как видите, семантика ввода очень проста и интуитивно понятна: значение со стандартного ввода передается в переменную, указанную справа. Если требуется ввести несколько величин, используется цепочка операций >>. В процессе ввода число преобразуется из последовательности символов, набранных на клавиатуре, во внутреннее представление вещественного числа и помещается в ячейку памяти, зарезервированную для переменной fahr.

В операторе 5 вычисляется выражение, записанное справа от операции присваивания (обозначаемой знаком =), и результат присваивается переменной cels, то есть заносится в отведенную этой переменной память. Выражение — это правило для вычисления некоторого значения, можно назвать его формулой. Порядок вычислений определяется приоритетом операций. Основные правила достаточно просты и соответствуют принятым в математике: вычитание имеет более низкий приоритет, чем умножение, поэтому для того, чтобы оно было выполнено раньше, соответствующая часть выражения заключается в скобки. Деление и умножение имеют одинаковый приоритет и выполняются слева направо, то есть сначала целая константа 5 будет поделена на целую константу 9, а затем результат этой операции умножен на результат вычитания числа 32 из переменной fahr.

Для вывода результата в операторе 6 также применяется объект cout. Выводится цепочка, состоящая из четырех элементов. Это строка "По Фаренгейту: ", значение переменной fahr, строка ", в градусах Цельсия: " и значение переменной cels. Обратите внимание, что при выводе строк все символы, находящиеся внутри кавычек, включая и пробелы, выводятся без изменений. При выводе значении переменных выполняется преобразование из внутреннего представления числа в строку символов, представляющую это число. Под значение отводится ровно столько позиций, сколько необходимо для вывода всех его значащих цифр. Это значит, что если вывести две переменные подряд, их значения «склеятся», поэтому рекомендуется всегда предварять выводимые значения текстовыми пояснениями

В одиночные кавычки в языке C++ заключается отдельный символ. В данном при­мере это пробел. Наконец, последний оператор (оператор 7) этой программы предназначен для возврата из нее и передачи значения во внешнюю среду. В главной функции разрешается его опускать, но в этом случае компилятор может выдать предупреждение (warning) и сформирует возвращаемое значение по умолчанию, равное нулю.

Описание переменных

Любая переменная обладает двумя основными характеристиками: временем жизни и областью действия. Они зависят от места и способа описания переменной.

Если переменная описана вне любого блока (функции), она называ­ется глобальной, размещается в сегменте данных (см. модели памяти в первой части практикума). Время жизни глобальной переменной — с начала выполнения программы и до ее окончания, а область действия (область, в которой эту переменную можно использовать, обратившись к ней по имени) - весь файл, в котором она описана, начиная с точки описания.

Переменная, описанная внутри блока (в частности, внутри функции main), является локальной, память под нее выделяется в сегменте стека в момент выполнения оператора описания. Для локальных переменных автоматическое обнуление не производится. Областью действия локальной переменной является блок, в котором она описана, начиная с точки описания. Время ее жизни также ограничено этим блоком. Сколько раз выполняется блок, столько раз «рождается» и «умирает» локальная переменная.

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