
- •Часть 1
- •Новосибирск
- •Информатика
- •Часть 1 Методические указания
- •630092, Г. Новосибирск, пр. К. Маркса, 20
- •Оглавление
- •1. Общие требования и порядок выполнения лабораторных работ
- •2. Работа в интегрированной среде visual studio
- •Исправление ошибок компиляции с помощью интегрированной среды разработки
- •Дополнительные средства интегрированной среды visual studio
- •Панель инструментов
- •Комплексные числа
- •Порядок выполнения работы
- •Структурная схема циклического алгоритма
- •Понятие массива. Его объявление и инициализация
- •Связь массивов и указателей
- •Вариант 17
- •Вариант 18
- •Вариант 19
- •Вариант 20
- •Вариант 21
Исправление ошибок компиляции с помощью интегрированной среды разработки
В файле first.cpp удалите точку с запятой в последней строке, как указано ниже:
cout<<name<<endl
В меню Построение выберите команду Построить решение.
Сообщение, появляющееся в окне Вывод (рис. 7) указывает на то, что построение проекта выполнить не удалось.
Рис. 7. Информация об ошибке при компиляции
В окне Вывод щелкните кнопку К следующему сообщению (зеленая стрелка вправо). Сообщение об ошибке, отображаемое в окне Вывод и строке состояния, указывает на отсутствие точки с запятой перед закрывающей фигурной скобкой. Верните точку с запятой в конец строки с синтаксической ошибкой.
В меню Построение выберите команду Построить решение. Сообщение, появляющееся в окне Вывод (см. рис. 4), указывает на то, что построение проекта было выполнено успешно.
Дополнительные средства интегрированной среды visual studio
Контекстное меню редактора кода
Если щелкнуть правой кнопкой мыши на какой-нибудь идентификатор в редакторе (например, на названии функции sqrt()), откроется вот такое контекстное меню:
Здесь нас интересуют следующие пункты: Перейти к определению, Перейти к объявлению, Найти все ссылки.
Первые два пункта не имеет смысла объяснять – из названий и так все понятно. А вот при выборе пункта Найти все ссылки откроется окно Результат поиска символа, в котором будут перечислены все места в коде, где встречается данный идентификатор.
IntelliSence (Интелектуальные опции)
Возможности IntelliSence доступны автоматически или через пункт меню Правка → IntelliSence). Нас интересуют первые три пункта.
Первый – Список членов. Установим курсор на названии функции (например, sgrt()), и выберем данный пункт меню. В результате в редакторе отобразится подсказка – как выглядит прототип данной функции и где он находится (название заголовочного файла).
Следующий пункт – Сведения о параметрах. Ставим курсор в редакторе в область параметров функции и вызываем данный пункт меню. В результате появится подсказка о том, какие аргументы принимает данная функция. С помощью стрелочек вверх-вниз можно посмотреть различные варианты перегруженной функции.
И последний пункт IntelliSence – Краткие сведения. Устанавливаем курсор на любой объект и вызываем данный пункт. Результат – подсказка с информацией о данном объекте.
Панель инструментов
Первая выделенная группа элементов – это элементы IntelliSence, с которыми мы уже познакомились. Вторая пиктограмма в верхнем ряду – добавление нового или существующего файла к проекту.
Вторая группа – это инструменты для работы с кодом: выделяете кусок кода и щелкаете на одном из этих инструментов. Первые два увеличивают/уменьшают отступ кода от начала строки. Два последних позволяют добавить/убрать комментарии для всех выделенных строк кода.
Лабораторная работа № 1
Программирование линейных вычислительных процессов
Цель работы
Ознакомление с правилами записи арифметических выражений, с операторами ввода-вывода.
Пояснение к работе
В языке С++ понятие оператора трактуется шире, чем в других языках, поскольку не делается существенного различия между оператором и арифметическим выражением. Другими словами, любое арифметическое выражение, заканчивающееся точкой с запятой, является оператором языка С++, например, a/b. Поскольку результат деления не присваивается никакой переменной, он теряется, но действия будут произведены.
Каждый оператор языка С++ обязательно заканчивается точкой с запятой. Этот символ не отделяет операторы друг от друга, а является неотъемлемой завершающей частью любого оператора. Группа операторов, заключенных в общие фигурные скобки, образует составной оператор, иначе называемый блоком. Ограничителем блока служит закрывающая фигурная скобка, поэтому точка с запятой после блока не нужна. Однако внутри блока каждый оператор должен оканчиваться точкой с запятой, в том числе и последний. На количество операторов в блоке и на их тип не накладывается никаких ограничений.
Действие составного оператора заключается в последовательном выполнении всех составляющих его операторов, кроме случая, когда один из них явно передает управление в другое место программы. Составной оператор рассматривается в программе как цельная конструкция и может использоваться везде, где синтаксис разрешает запись одиночного оператора. В начале любого блока (до первого оператора) разрешается описывать и объявлять любые объекты программы, которые будут локальными для данного блока.
Арифметическим выражением в языке С++ называется совокупность операндов, знаков арифметических операций и круглых скобок. Арифметическое выражение вычисляется слева направо. К арифметическим операциям языка С++ относятся:
– вычитание и унарный минус;
+ сложение;
* умножение;
/ деление;
% остаток от деления;
++ увеличение на единицу;
– – уменьшение на единицу.
Существует следующий приоритет выполнения арифметических операций.
Выполняются выражения в круглых скобках по уровню их вложения.
Вычисляются функции арифметического выражения.
Находятся постфиксная и префиксная формы ++ и – –.
Вычисляются *, /, %.
Находятся + и –.
Преобразование и приведение типов операндов
Вычисления в языке С++ могут выполняться только между однотипными значениями. Когда вы пишите выражение, включающее переменные или константы, то для каждой выполняемой операции компилятор должен преобразовать тип одного операнда в другой. Процесс преобразования типов называется приведением.
Запомните общее правило.
При вычислении выражений операнды преобразуются к типу того операнда, который имеет наибольший размер.
Типы операндов в порядке убывания их размеров:
При присваивании производится преобразование типа правого операнда к типу левого операнда.
Пример: 1
int a=5;
char сh = '0';
float z = 50.21;
double t = ch/a+z;
cout<<"t ="<<t;
Результат:
t = 59.21
Преобразование типов в этом примере производится следующим образом. Операнд ch преобразуется к типу int операнда a, результат деления ch на a преобразуется к типу float операнда z. Затем в результате присваивания все выражение примет тип double.
Проверим полученный результат. Символ 0 имеет код 48, в результате операции деления мы должны получить 9.6, а все выражение должно быть равно 59.81. Результаты не совпали. Дело в том, что результат деления двух целых операндов (ch и a) также будет целым, т. е. остаток 0.6 отбрасывается, отсюда и конечный результат. Чтобы эту проблему решить, надо использовать явное преобразование типов.
Явное преобразование типов может быть осуществлено посредством операции приведения типов, которая имеет формат
static_cast <тип_к которому_привести> (выражение).
Ключевое слово static_cast означает, что приведение выполняется статически, т. е. при компиляции программы. Результат этой операции – преобразование результирующего значения выражения в тип, указанный в угловых скобках. Выражение может быть любым – от единственной переменной до сложнейшего составного оператора.
Решение проблемы для приведенного примера: t = ch/ static_cast <float>(a)+z;
Операции ввода и вывода
В языке С++ разработан способ ввода/вывода с использованием так называемых потоков ввода и вывода cin и cout. Для того чтобы использовать эти стандартные потоки, необходимо включить заголовочный файл <iostream>. Для ввода используется операция >>, для вывода – операция <<. Компилятор определяет тип вводимой/выводимой переменной и соответствующим образом форматирует ее.
#include <iostream>
using namespace std;
cin>>x; //Ввод значения в переменную х из стандартного потока cin
cin>>x>>y; // Ввод двух переменных
cout << "x = " << x << "\ny = " << y << endl; // Функция endl осуществляет перевод строки
Форматирование
Формат задает место и форму вводимого/выводимого значения. Для управления форматом используются так называемые манипуляторы. Это функции, которые изменяют способ управления выводом данных. Для использования манипуляторов необходимо включить заголовочный файл <iomanip>.
Изменения, сделанные всеми манипуляторами, кроме setw, остаются в силе до отмены. Действие манипулятор setw распространяется только на одно вводимое/выводимое значение (табл. 1.1).
Таблица 1.1
Манипулятор |
Описание |
fixed |
Для вещественных чисел используется фиксированный формат |
internal |
Знак выравнивается по левому краю, а само число – по правому краю |
left |
Выравнивание по левому краю |
scientific |
Для вещественных чисел используется научный формат (экспотенциальный) |
setfill(c) |
Задает символ для заполнения. По умолчанию используется пробел |
setprecision() |
Задает количество цифр справа от десятичной точки |
setw(n) |
Устанавливает минимальное количество символов, используемых для вывода значения. Если значение представляется меньшим количеством символов, остальные позиции заполняются символом, установленным с помощью манипулятора setfill. Выравнивание задается манипуляторами left, right и internal. Чтобы установить поведение по умолчанию (столько символов, сколько необходимо), нужно использовать манипулятор setw с параметром 0 |
showpoint |
Вывод и целой, и дробной частей вещественного числа, даже если дробная часть равна 0 |
showpos |
Вывод знака перед положительным числом |
Пример 2
#include <iostream
#include <iomanip>
using namespace std;
void main ()
{ setlocale(LC_ALL,"rus_rus.1251");
int m, n, x;
double y;
cout<<"Введите значение двух целых переменных"<<endl;
cin >> m >> n;
cout << "m = " << setw(5) << m << "\nn = " << setw(7) << n << endl;
cout<<"Введите отрицательное целое число "<<endl;
cin >> x;
cout << setfill('0')<< setw(10) << internal << x << endl;
cout<<"Введите вещественное число 3.1415926 "<<endl;
cin >> y;
cout << setfill(' ') << fixed << setw(7) << setprecision(2) << y << endl;}
Результат: