Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
m_pos_5.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
352.77 Кб
Скачать

10. Данные логического типа

Тип данных bool относится к семейству целых типов. Переменные этого типа могут принимать только значения true или false.

Когда к переменной типа bool применяются операции пре­фиксного и постфиксного инкремента (++), переменная принимает значение true. Операторы префиксного и постфиксного декремента (--) не разрешены с переменными типа bool. Поскольку тип данных bool от­носится к целочисленным, переменные этого типа могут быть приведены к типу int, при этом значение true пре­образуется в 1, а значение false — в 0.

11. Программирование ветвлений. Инструкции if и if-else

Условный оператор. Формат условного оператора следующий:

if (выражение) оператор1; else оператор2;

выражение — это некоторое условие, со­держащее операции отношения и логические операции. Значение выражения приводится к целому и интерпретируется в соответ­ствии с правилом: равно нулю — ложь, не равно нулю — истина. Если выражение истинно, выполняется оператор 1, если ложно — оператор2.

if(a>b) max=a; else max=b;

Та же самая задача может быть решена с использованием не­полного ветвления следующим образом:

max=a; if(b>a) max=b;

Пример 1. Упорядочить по возрастанию значения в двух пере­менных а, b:

if(a>b)

{с=а; a=b; b=c;}

cout<<”a="<<a<<"b="<<b;

составной оператор — последо­вательность операторов, заключенная в фигурные скобки. В Си фигурные скобки выполняют роль операторных скобок по анало­гии с Begin, End в Паскале.

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

Пример2. Вычисление площади треугольника по длинам трех сторон.

// Площадь треугольника

#include <iostream.h>

#include <math.h>

void main()

{ float a,b,c,p,s;

cout<<\na="; cin>>a;

cout<<"\nb="; cin>>b;

cout<<"\nc="; cin>>c;

if(a>0 && b>0 && c>0 && a+b>c && a+c>b && b+c>a)

{ p=(a+b+c)/2;

s=sqrt(p*(p-a)*(p-b)*(p-c)) ;

соut<<"\nПлощадь треугольника="<<s;

} else cout("\n Неверные исходные данные.");}

12. Данные символьного типа

Тип данных char является подтипом типа int. Данные символьного типа имеют 2 формы представления:

Тип

Бит

диапазон

unsigned char

8

0 ... 255

signed char

8

-128... 127

По умолчанию тип char всегда имеет знак

При использовании типа char символы русского алфавита коди­руются отрицательными числами. Чтобы коды символов одно­значно соответствовали кодировке ASCII сле­дует использовать тип unsigned char.

Описание данных символьного типа

Данные символьного тапа описываются служебным словом char. Например:

char a=’A’, b, c;

Значением переменной символьного типа является код соответствующего типа.

Символьной константой называется символ, заключенный в одинарные кавычки. Например:

b=’B’;

13. Программирование циклов

В Си, как и в Паскале, существуют все три типа операторов цикла: цикл с предусловием, цикл с постусловием и цикл с па­раметром.

Цикл с предусловием. Формат оператора цикла с предусловием:

while (выражение) оператор;

Цикл повторяет свое выполнение, пока значение выражения от­лично от нуля, т. е. заключенное в нем условие цикла истинно.

Пример

Программа вычисления факториала целого положительного числа N!.

include <iostream.h>

void main()

{ long int F;

int i,N;

cout<<"N=";

cin>>N;

F=i=l;

while(i<=N) F=F*i++;

cout<<"\n"<<N<<"!="<<F;

}

Интересно свойство следующего оператора:

while(1);

Это бесконечный пустой цикл. Использование в качестве вы­ражения константы 1 приводит к тому, что условие повторения цикла все время остается истинным и работа цикла никогда не заканчивается.

Пример

Вычислить сумму гар­монического ряда: 1 +1/2+1/3+... с заданной точностью е

#include<iostream.h>

#include <limits.h>

void main()

{

int n=l;

double S=0, eps;

cout<<"Tочность: ";

cin>>eps;

while(1.0/n>eps && n<INT_MAX)

S+=l./n++; cout<<"\nCyммa="<<S;

}

Файл limits.h, подключаемый препроцессором, содержит оп­ределения предельных констант для целых типов данных. В част­ности, константа с именем int_max равна максимальному значе­нию типа int в данной реализации компилятора.

Цикл с постусловием. Формат оператора цикла с постусловием:

do оператор while (выражение);

В отли­чие от оператора repeat ...until, используемого в Паскале, где в конце пишется условие выхода из цикла, в операторе do ... while в Си в конце пишется условие повторения цикла.

При­мер

Программа вычисления факториала целого положительного числа N!

#include <iostream.h>

void main()

{ long int F;

int i,N;

cout<<"N=";

cin>>N;

F=i=l;

do F*=i++; while(i<=N);

cout<<"\n"<<N<<" ! ="<<F;

}

Цикл с параметром. Формат оператора цикла с параметром:

for (выражение_1; выражение_2; выражение_3)

оператор;

Выражение 1 выполняется только один раз в начале цикла. Обыч­но оно определяет начальное значение параметра цикла (инициа­лизирует параметр цикла). Выражение 2 — это условие выполне­ния цикла. Выражение 3 обычно определяет изменение параметра цикла, оператор — тело цикла, которое может быть простым или составным. В последнем случае используются фигурные скобки.

Алгоритм выполнения цикла for представлен на блок-схеме.

С помощью цикла for нахождение N! можно организовать следующим обра­зом:

F=l;

for(i=l;i<=N;i++) F=F*i;

Используя операцию «запятая», мож­но в выражение 1 внести инициализа­цию значений сразу нескольких пере­менных:

for(F=l,i=l;i<=N;i++) F=F*i;

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

Ниже показан еще один вариант вычисления N!. В нем на месте тела цикла находится пустой оператор, а вычислительная часть внесена в Выражение3.

for(F=l,i=l;i<=N;F=F*i,i++) ;

Этот же оператор можно записать в следующей форме:

for(F=l,i=l;i<=N;F*=i++) ;

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

for (n=l, S=0; 1.0/n>eps && n<INT_MAX; n++) S+=1.0/n;

И наконец, эта же самая задача с пустым телом цикла:

for(n=l,S=0;1.0/n>eps && n<INT_MAX; S+=l . 0/n++) ;

Оператор continue. Если выполнение очередного шага цикла требуется завершить до того, как будет достигнут конец тела цик­ла, используется оператор continue.

Оператор goto. Оператор безусловного перехода goto суще­ствует в языке Си, как и во всех других языках программирования высокого уровня. Однако с точки зрения структурного подхода к программированию его использование рекомендуется ограничить.

Формат оператора:

goto метка;

Метка представляет собой идентификатор с последующим дво­еточием, ставится перед помечаемым оператором.

При использовании оператора безусловного перехода необхо­димо учитывать следующие ограничения:

  • нельзя входить внутрь блока извне;

  • нельзя входить внутрь условного оператора (if ...else...);

  • нельзя входить внутрь переключателя;

  • нельзя входить внутрь цикла.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]