Операнд_1 ? операнд_2 : операнд_3 1 глава

Первый операнд может иметь арифметический тип или быть указателем. Он оценивается с точки зрения его эквивалентности нулю (операнд, равный нулю, рассматривается как false, не равный пулю — как true). Если результат вычисления первого операнда равен true, то результатом условной операции будет значение второго операнда, иначе — третьего операнда. Вычисляется всегда либо второй операнд, либо третий. Их тип может различаться. Условная операция является сокращенной формой условного оператора if.

#include

int main()

{

int a = 11, b = 4, max;

max = (b a)? b : a;

printf(“Наибольшее число: %d”, max);

return 0;

}

Результат работы программы:

Наибольшее число: 11.

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

(а + 0.12) / 6

х у | | !z

(t * sin(x) — 1.05e4)/((2 * k + 2) * (2 * k + 3))

Операции выполняются в соответствии с приоритетами. Для изменения порядка выполнения операций используются круглые скобки. Если в одном выражении записано несколько операций одинакового приоритета, унарные операции, условная операция и операции присваивания выполняются справа налево, остальные — слева направо. Например, а = b = с означает а = (b = с), а а + b + с означает (а + b) + с. Порядок вычисления подвыражений внутри выражений не определен: например, нельзя считать, что в выражении (sin(x + 2) + cos (у + 1)) обращение к синусу будет выполнено раньше, чем к косинусу, и что х + 2 будет вычислено раньше, чем y + 1.

Результат вычисления выражения характеризуется значением и типом. Например, если а и b — переменные целого типа и описаны так:

int а = 2, b = 5;

то выражение а + b имеет значение 7 и тип int, а выражение а = b имеет значение, равное помещенному в переменную а (в данному случае 5) и тип, совпадающий с типом этой переменной. Таким образом, в C++ допустимы выражения вида а = b = с: сначала вычисляется выражение b = с, а затем его результат становится правым операндом для операции присваивания переменной а.

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

Преобразования бывают двух типов:

— изменяющие внутреннее представление величин (с потерей точности или без потери точности);

— изменяющие только интерпретацию внутреннего представления.

К первому типу относится, например, преобразование целого числа в вещественное (без потери точности) и наоборот (возможно, с потерей точности), ко второму — преобразование знакового целого в беззнаковое.

В любом случае величины типов char, signed char, unsigned char, short int и unsigned short int преобразуются в тип int, если он может представить все значения, или в unsigned int в противном случае.

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

Стандартные математические функции.В языке C для математических вычислений используются стандартные математические функции, декларированные в заголовочном файле math.h (табл. 1.8 и табл. 1.9).

Таблица 1.8- Тригонометрические и гиперболические функции

Тригонометрические функции (угол задается в радианах) Обратные тригонометрические функции (возвращают угол в радианах) Гиперболические функции
sin(x) — синус asin(x) — арксинус sinh(x) — гиперболический синус
cos(x) — косинус acos(x) — арккосинус cosh(x) — гиперболический косинус
tan(x) — тангенс atan(x) — арктангенс tanh(x) — гиперболический тангенс
atan2(y, x) — угол в полярных координатах точки (x, y) в диапазоне .

Таблица 1.9 — Другие наиболее часто используемые
математические функции

Функция Действие
hypot(x,y) вычисляет гипотенузу прямоугольного треугольника с катетами x и y
exp(x) экспоненциальная функция,
log(x) натуральный логарифм, ln(x), x 0
log10(x) десятичный логарифм, lg(x), x 0
pow(x, y) вычисляет . Ошибка области, если x = 0 и y ? 0 или x 0, y — не целое
pow10(p) Вычисляет . Результат вычисляется в виде double. Все аргументы считаются допустимыми, p типа int.
sqrt(x) корень квадратный из x, x ? 0
ceil(x) находит наименьшее целое типа double, не меньшее x ceil(6.25) = 6.00, ceil(-6.25) = -6.00
floor(x) находит наибольшее целое типа double не превышающее значение x. floor(6.25) = 6.00, floor(-6.25) = -7.00
fabs(x) абсолютное значение (модуль) числа с плавающей точкой fabs(-6.25) = 6.25

Пример:

#include stdafx.h

#include math.h

using namespace std;

int _tmain(int argc, _TCHAR* argv[])

{

double x, z, s;

const double a=0.5, b=1.08, c=2.1, m=0.7;

z=(sin(x)/sqrt(1+m*m*sin(x*x))-c*m*log10(m*x));

cout

cout

s=(exp(-a*x)*sqrt(x+1)+exp(-b*x)*sqrt(x+1.5));

cout

cout

getch();

return 0;

}

В этом примере вычисляется функция:

при заданных значениях: х = 1.7; a = 0.5; b =1.08; c = 2.1; m =0.7.

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

К ошибкам, выявляемым на этапе компиляции, относятся, прежде всего, синтаксические ошибки (нарушения правил языка C++ в исходном тексте программы). Такие ошибки обычно выявляются самой средой программирования. Встретив синтаксическую ошибку в программе, прервет компиляцию и выдаст сообщение об ошибке.

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

Сообщение об ошибке содержит указание на имя файла и строку, в которой обнаружена ошибка, код ошибки и ее краткое описание. Более подробные сведения об ошибке можно получить в справочной системе. Для этого нужно щелкнуть на строке сообщения об ошибке один раз (при этом строка будет выделена) и нажать клавишу F1. Если щелкнуть на строке сообщения об ошибке дважды, в окне редактора исходных текстов будет выделена строка, в которой обнаружена ошибка. Visual C++ выводит сразу все сообщения об ошибках, обнаруженных в программе.

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

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

Аппаратура и материалы. Для выполнения лабораторной работы необходим персональный компьютер со следующими характеристиками: процессор Intel Pentium-совместимый с тактовой частотой 800 МГц и выше, оперативная память — не менее 64 Мбайт, свободное дисковое пространство — не менее 500 Мбайт, устройство для чтения компакт-дисков, монитор типа Super VGA (число цветов от 256) с диагональю не менее 15?. Программное обеспечение — операционная система Windows2000/XP и выше, среда разработки приложений Microsoft Visual Studio.

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

Методика и порядок выполнения работы.Перед выполнением лабораторной работы каждый студент получает индивидуальное задание. Защита лабораторной работы происходит только после его выполнения (индивидуального задания). При защите лабораторной работы студент отвечает на контрольные вопросы, приведенные в конце, и поясняет выполненное индивидуальное задание. Ход защиты лабораторной работы контролируется преподавателем.Номер индивидуального задания студента , где — номер студента в журнале преподавателя. Порядок выполнения работы:

1. Оформить программу, указав свою фамилию и инициалы, группу с использованием однострочного и многострочного комментариев.

2. Объявить и проинициализировать переменные основных типов (int, double, char).

3. По инструкции cin ввести одно из предложенных значений переменных с клавиатуры (int, double).

4. Оставшиеся значения определить как константы, используя константные переменные.

5. Вычислить значения выражение по заданным расчетным формулам и наборам исходных данных.

6. Инструкцией cout

7. Изменить программу таким образом, чтобы значения всех переменных вводились с клавиатуры.

Индивидуальное задание №1. Вариант:

Задание Задание
1. при х = 1.426; у = — 1.220; z = 3.5. 2. при х = 1.4; a = 0.5; b = 3.1.
3. при х = 1.825; у = 18.225; z = — 3.289. 4. при х = 0.3; a = 0.5; b = 2.9.
5. при х = 0.335; у = 0.025. 6. при х = 1.426; у = -0.823; z = 2.724.
7. при a = — 0.5; b = 1.7; t = 0.44. 8. при х = 0.9; m = 1.2; c = 2.4.
9. при a = — 1.5; b = 15.5; x = -2.9. 10. при х = 5.4; у = 1.9; b = 3.5; m = 0.2.
11. при a = 16.5; b = 3.4; x = 0.61. 12. при х = 0.54; a = 1.1; b = — 1.22.
13. при a = 0.7; b = 0.05; x = 0.5. 14. при х = 1.82; у = 18.23; z = 3.44.
15. при х = 0.2; a = 1.1; b = 0.04. 16. при a = 1.5; b = 15.6; t = 0.9.
17. при m = 2; c = -1; t = 1.2; b = 0.7. 18. при b = 0.7; c = -1.8; t = 1.2.
19. при a = 3.2;b = 17.5; x =- 4.8. 20. при a = 3.44; b = 17.52; x=- 4.8, z = 5.34.
21. при a = 10.2; b = 9.2; x = 2.2; c = 0.5. 22. при х = 3.23; a = 10.23; b = 9.84; c = 0.5.
23. при a = 0.3; b = 0.9; x = 0.61. 24. при a =0.001; b = 5.8; x = 1.77.

Содержание отчета и его форма. Отчет по лабораторной работе должен состоять из:

1. Названия лабораторной работы.

2. Цели и содержания лабораторной работы.

3. Ответов на контрольные вопросы лабораторной работы.

4. Формулировки индивидуального задания и порядка его выполнения.

Отчет о выполнении лабораторной работы в письменном виде сдается преподавателю.

Вопросы для защиты работы

1. Назовите преимущества языка С++.

2. Какие окна включает в себя рабочий стол Visual C++?

3. Каковы этапы создания консольного приложения в среде Visual C++?

4. Какова структура программы, написанной на языке C++?

5. Какие существуют основные типы данных в языке C++? Дать их назначение.

6. Каково назначение директивы #include в языке C++?

7. Каково назначение функций printf() и puts() в языке C++?

8. Каково назначение функций clrscr(), getch() и cputs() в языке C++?

9. Каким образом осуществляется потоковый ввод-вывод в языке C++? Каково назначение объектов cin и cout?

10. Что такое литерал?

11. Как производится объявление переменной и константной переменной в языке C++? В чем отличие присваивания от инициализации?

12. Какие спецификаторы используются для задания класса памяти?

13. Какое существует деление операций в соответствии с количеством операндов, которые в них используются?

14. Из чего состоят выражения?

15. Какие существуют математические функции в языке C++?

16. Каким образом осуществляется диагностирование ошибок компиляции в среде Visual C++?

Пример выполнения лабораторной работы №1:

1. Формулировка индивидуального задания:

Вычислить:

при х = 1.7; a = 0.5; b =1.08; c = 2.1; m =0.7.

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

// Лабораторная работа №1

#include stdafx.h

#include

#include conio.h

#include math.h

#include windows.h

using namespace std;

int _tmain(int argc, _TCHAR* argv[])

{

setlocale( LC_ALL, Russian );

double x, z, s;

//const double a = 0.5, b = 1.08, c = 2.1, m = 0.7;

double a, b, c, m;

cout

cin x;

cout

cin a;

cout

cin b;

cout

cin c;

cout

cin m;

z=(sin(x)/sqrt(1+m*m*sin(x*x))-c*m*log10(m*x));

cout

cout

s=(exp(-a*x)*sqrt(x+1)+exp(-b*x)*sqrt(x+1.5));

cout

cout

getch();

return 0;

}

3. Результаты работы программы:

Лабораторная работа №2.
Программирование алгоритмов разветвляющейся структуры
в языке C++

Цель работы и содержание: приобретение навыков программирования разветвляющихся алгоритмов. Освоить операторы языка C++ if и switch, позволяющего реализовывать разветвляющиеся алгоритмы.

Ход работы

Диаграммы деятельности.Унифицированный язык моделирования (UML) является стандартным инструментом для создания «чертежей» программного обеспечения. С помощью UML можно визуализировать, специфицировать, конструировать и документировать артефакты программных систем. UML пригоден для моделирования любых систем: от информационных систем масштаба предприятия до распределенных Web-приложений и даже встроенных систем реального времени. Это очень выразительный язык, позволяющий рассмотреть систему со всех точек зрения, имеющих отношение к ее разработке и последующему развертыванию. Несмотря на обилие выразительных возможностей, этот язык прост для понимания и использования.

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

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

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

а) б) в)

Рисунок 2.1 — Состояния действия и комментарий: а) простое действие;

б) выражение; в) комментарий

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

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

Переходы. Когда действие или деятельность в некотором состоянии завершается, поток управления сразу переходит в следующее состояние действия или деятельности. Для описания этого потока используются переходы, показывающие путь из одного состояния действия или деятельности в другое. В UML переход представляется простой линией со стрелкой, как показано на рис. 2.2.

Рисунок 2.2 — Нетриггерные переходы

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

Ветвление. Простые последовательные переходы встречаются наиболее часто, но их одних недостаточно для моделирования любого потока управления. Как и в блок-схеме, вы можете включить в модель ветвление, которое описывает различные пути выполнения в зависимости от значения некоторого булевского выражения. Как видно из рис. 2.3, точка ветвления представляется ромбом. В точку ветвления может входить ровно один переход, а выходить — два или более. Для каждого исходящего перехода задается булевское выражение, которое вычисляется только один раз при входе в точку ветвления. Ни для каких двух исходящих переходов эти сторожевые условия не должны одновременно принимать значение «истина», иначе поток управления окажется неоднозначным. Но эти условия должны покрывать все возможные варианты, иначе поток остановится.

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

Реализовать итерацию можно, если ввести два состояния действия — в первом устанавливается значение счетчика, во втором оно увеличивается — и точку ветвления, вычисление в которой показывает, следует ли прекратить итерации.

Рисунок 2.3 — Ветвление

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

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

i++; // выполняется операция инкремента

а* = b + с; // выполняется умножение с присваиванием

fun(i, k); // выполняется вызов функции

Логическоевыражение — некоторое утверждение, относительно которого можно сказать: истинно оно или ложно.

В языке C++ любое выражение, равное нулю считается ложным, тогда как любое выражение не равное нулю будет истинным.

В Си++ используются шесть операторов отношения (табл. 2.1), позволяющих сравнивать между собой значения числовых переменных, а также значение переменной и константы.

Условия, которые составлены с использованием одного оператора сравнения, называются простыми условиями. Общий вид:

Из простых условий, которые являются выражениями логического типа можно строить составные условия.В этом случае простые условия необходимо связывать при помощи логических операций: !(не), (и), ||(или).

Таблица 2.1 — Операторы отношения в языке C++

a = b равно a == b
a b больше a b
a b меньше a b
a ? b больше или равно a = b
a ? b меньше или равно a
a ? b не равно a != b

Super Mario World — Random Number Generation


Похожие статьи.

Понравилась статья? Поделиться с друзьями: