- •Часть 1
- •«Языки программирования»
- •2. Объектно-ориентированное программирование
- •3. Лексические элементы языка
- •4. Типы данных
- •5. Область видимости
- •Операции и выражения
- •Структура программы
- •7. Директивы препроцессора
- •8. Данные вещественного типа (см. Типы данных)
- •10. Данные логического типа
- •11. Программирование ветвлений. Инструкции if и if-else
- •12. Данные символьного типа
- •Описание данных символьного типа
- •13. Программирование циклов
- •14. Оператор выбора (переключатель)
- •15. Указатели
- •16. Массивы
- •17. Практические задания
- •Практическая работа №2 (программирование ветвлений)
- •Практическая работа №3 (программирование циклов)
- •Практическая работа №4(массивы)
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...);
нельзя входить внутрь переключателя;
нельзя входить внутрь цикла.
