Лабораторная работа № 2
Разработка программ, реализующих оператор ветвления
Цель работы: приобретение навыка программирования программ с оператором ветвления.
Задание к работе
К работе допущен:
Работу выполнил:
Работу защитил:
Введение.
В C/C++ есть два вида операторов ветвления (их еще называют условными операторами). Первый из них (if) создает два пути для программы (или сюда, или сюда), второй (switch) - несколько (или сюда, или сюда, или сюда и т. д.).
Приведем сразу несколько примеров:
if(a>0){
cout<<"а is positiv"; //a - положительное
}
else{
cout<<"а is negativ or zero"; //a - отрицательное или нуль
}
В C/C++ нет ключевого слова then.
Ветвь else можно не писать. Если внутри фигурных скобок пишется только один оператор:
if(a>0)
cout<<"а is positiv"; //a - положительное
...
Оператор switch:
int grade;
cin>>grade;
switch(grade){
case 5:
cout<<"Otlichnick\n"; //отличник
break;
case 4:
cout<<"Choroshyst\n"; //хорошист
break;
case 3:
cout<<"Troechnick\n"; //троечник
break;
case 1:
case 2:
cout<<"Dvoechnick\n"; //двоечник
|
|
break;
default:
cout<<"Error\n"; //ошибка
}
Переменная grade сравнивается со значением после первого case (т. е. с 5). Если выполняется равенство, то выполняются операторы расположенные сразу после строки
case 5:
до первого break;. Если не равно, то grade сравнивается со вторым case (т. е. с 4) и т. д. Если ни одна из проверок не выполняется, то выполняются операторы после строки
default:
Ветвь default можно не писать.
case 1:
case 2:
cout<<"Dvoechnick\n"; //двоечник
break;
...
Здесь после case 1: нет break'а, это значит, что операторы
cout<<"Dvoechnick\n"; //двоечник
break;
будут выполняться при обоих значения grade. Поэтому нужно записать break там, где это надо. Если забыть, компилятор ничего не скажет, так как синтаксической ошибкой это не является.
В C/C++ существует конструкция?;
b = (k>0)?k:-k;
В этом примере в b запишется модуль числа k. Работает эта конструкция следующим образом: проверяется условие до знака? (k>0). Если оно истинно, то в качестве результата возвращается значение выражения между? и двоеточия (k). Если же выражение ложно, то возвращается значение после знака двоеточия (-k).
Выполнение работы.
При выполнение работы студент выбирает из таблицы вариант, указанный преподавателем. При выполнении работы для заданного варианта необходимо составить программу, провести ее компилирование; исправить все выявленные ошибки, запустить программу на исполнение.
Практическая часть.
1) Задание: даны действительные числа x и y, не равные друг другу. Меньшее из этих двух чисел заменить половиной их суммы, а большее – их удвоенным произведением.
При выполнении первого задания лабораторной работы была разработана блок-схема приведенная на рис.1.
|
|
Рис 1.
#include "stdafx.h"
#include <iostream>
#include <math.h>
#include "conio.h"
#include <cmath>
using namespace std;
int _tmain()
{
double x,y,c,t;
cout <<"vvedite X: ";
cin >>x;
cout <<"vvedite Y: ";
cin>>y;
if (x<y)
{
c = ((x+y)/2);
t = ((x*y)*2);
}
else
{
if (x>y)
{
t = ((x+y)/2);
c = ((x*y)*2);
}
else
{
c=0;
t=0;
}
}
cout <<"otvet c= "<<c<<endl;
cout <<"otvet t= "<<t<<endl;
getch();
return 0;
}
2) Задание: для каждой введенной цифры (0-9) вывести соответствующее ей название на английском языке (0-zero, 1-one, 2-two, …).
При выполнении второго задания лабораторной работы была разработана блок-схема приведенная на рис.2.
Рис 2.
#include "stdafx.h"
#include <iostream>
#include <math.h>
#include "conio.h"
#include <cmath>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int x;
cout <<"Vvedite x= ";
cin >>x;
if (x<10)
{
switch (x)
{
case 0:
cout <<"zero";
break;
case 1:
cout <<"one";
break;
case 2:
cout <<"two";
break;
case 3:
cout <<"three";
break;
case 4:
cout <<"four";
break;
case 5:
cout <<"five";
break;
case 6:
cout <<"six";
break;
case 7:
cout <<"seven";
break;
case 8:
cout <<"eigch";
break;
case 9:
cout <<"nine";
break;
}
}
else
{
cout <<"Vvedite x<10";
}
getch();
return 0;
}
Вывод: В данной лабораторной работе я поработал с оператором ветвления, в с++ и написал 2 простые программы для разных условий.