Условный оператор ?.

Условный оператор ? позволяет кратко записать условие проверки. Соответствующие действия выполняются в зависимости от вычисленного значения выражение_условие: истина или ложь. Этот оператор можно использовать вместо эквивалентного оператора 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;

}