Условный оператор ?.
Условный оператор ? позволяет кратко записать условие проверки. Соответствующие действия выполняются в зависимости от вычисленного значения выражение_условие: истина или ложь. Этот оператор можно использовать вместо эквивалентного оператора if-else. Условный оператор имеет следующий синтаксис:
Выражение_условие ? действие_если_истина : действие_если_ложь;
Оператор ? иногда называют троичным оператором, так как он требует трех операндов. Рассмотрим такой оператор:
if(fvalue >= 0.0)
fvalue = fvalue;
else
fvalue = -fvalue;
Этот оператор можно записать при помощи условного оператора ?:
fvalue= (fvalue >= 0.0) ? fvalue : — fvalue;
Оба оператора определяют абсолютное значение fvalue. Приоритет условного оператора ниже любого другого, используемого в выражении; поэтому в данном примере круглые скобки не нужны. Тем не менее, скобки часто используются для лучшего восприятия программы.
Оператор switch.
Часто необходимо сравнить некоторую переменную или выражение с несколькими значениями. Для этого можно использовать либо вложенные операторы if-else-if, либо — оператор switch.
switch (общее_выражение) {
case константа1:
операторы1;
break;
case константа2:
операторы2;
break;
…
…
…
case константа N:
операторыN;
break;
default: операторы;
Простая программа на switch
int main()
{
setlocale(LC_CTYPE, "Russian");
cout << "Выберите 1 или 2" << endl;
int t;
cin >> t;
switch (t)
{
case 1: {
cout << "Привет" << endl;
break;
}
case 2: {
cout << "Helloy" << endl;
break;
}
}
}
Совместное использование операторов if-else-if и switch.
В следующем программном примере перечисляемый тип (enum) используется для выполнения необходимых преобразований единиц измерения длины:
Программа на С, иллюстрирующая использование оператора if-else-if
в сочетании с различными операторами switch
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <stdio.h>
//#include <iostream.h>
using namespace std;
typedef enum conversion_type {YARDS, INCHES, CENTIMETERS, METERS} C_TYPE;
main()
{
int iuser_response;
C_TYPE C_Tconversion;
int ilength=30;
float fmeasurement; /* Укажите единицы измерения для преобразования : */
printf("\nPlease enter the measurement to be converted : ");
scanf("%f",&fmeasurement);
/* Введите :
0— ярды
1— дюймы
2— сантиметры
3–метры*/
printf("\nPlease enter : \
\n\t\t 0 for YARDS \
\n\t\t 1 for INCHES \
\n\t\t 2 for CENTIMETERS \
\n\t\t 3 for METERS \
\n\n\t\tYour response -->> ");
/* Ваш ответ --> */
scanf("%d",&iuser_response);
switch(iuser_response) {
case 0 : C_Tconversion = YARDS;
break;
case 1 : C_Tconversion = INCHES;
break;
case 2 : C_Tconversion = CENTIMETERS;
break;
default : C_Tconversion = METERS;
}
if(C_Tconversion == YARDS)
fmeasurement = ilength / 3;
else if(C_Tconversion == INCHES)
fmeasurement = ilength * 12;
else if(C_Tconversion == CENTIMETERS)
fmeasurement = ilength * 12 * 2.54;
else if(C_Tconversion = METERS)
fmeasurement = (ilength * 12 * 2.54)/100;
else
printf("No conversion required"); /* Преобразование не требуется */
switch(C_Tconversion) {
case YARDS : printf("\n\t\t %4.2f yards", fmeasurement);
break;
case INCHES : printf("\n\t\t %4.2f inches", fmeasurement);
break;
case CENTIMETERS : printf("\n\t\t %4.2f centimeters", fmeasurement);
break;
default : printf("\n\t\t %4.2f meters", fmeasurement);
}
printf ("\n\nPress any key to finish\n");/* Конец работы */
_getch();
return(0);
}В этом примере для указанного пересчета единиц длины используется перечисляемый тип данных. В стандартном С перечисляемые типы существуют только внутри самой программы (для обеспечения читабельности программы), и значения входящих в них переменных нельзя задавать или выводить непосредственно. Первый оператор switch в программе предназначен для преобразования введенного кода в соответствующий тип C_Tconversion. Нужное преобразование выполняется при помощи вложенных операторов if-else-if. В последнем операторе switch печатается преобразованное значение и название единицы измерения. Конечно же, вложенные операторы if-else-if можно было бы записать при помощи оператора switch.
58.Оператор цикла. Цикл while. Завершение цикла while.
Оператор цикла.
В языке С имеется стандартный набор операторов цикла: for, while и do-while (называемый в некоторый других языках высокого уровня циклом repeat-until). Вас может, однако, удивить то, каким способом программа выходит из цикла. В С можно изменить порядок выполнения цикла четырьмя способами. Естественно, все циклы заканчиваются при выполнении заданного проверочного условия. Однако, в С цикл может также закончиться по некоторому заданному условию ошибки при помощи операторов break или exit. Кроме этого, в циклах может быть собственная управляющая логика, изменяемая при помощи оператора break или оператора continue.
Цикл while.
Так же как и цикл for, в С цикл while является циклом с предусловием. Это означает, что в программе проверка_условия осуществляется до выполнения оператора или операторов, входящих в тело цикла. Благодаря этому, циклы с предусловием могут либо не выполняться вообще, либо выполняться множество раз. В С синтаксис цикла while следующий:
while(проверка_условия)
оператор;
В циклах while с несколькими операторами необходимы фигурные скобки:
while(проверка_условия) {
оператор1;
оператор2;
оператор 3;
оператор n;
int main()
{
int i=0, x=1, z=1,k;
while (i < 10)
{
k = i*(x + z);
i++;
}
cout << k;
}