Глава 2 Основные операторы языка
2.1 Элементарный ввод вывод
2.1.1 Форматный ввод /вывод
Ввод:
int scanf(,
);
// возвращает количество значений или EOF(-1)
Вывод:
int printf(, );
где < Форматная строка> - строка, которая помимо символов
содержит спецификации формата вида:
%[-] [] [.]
«-» - выравнивание по левой границе,
- ширина поля вывода;
- количество цифр дробной части числа;
- определяется специальной литерой

1

Спецификации формата
d - целое десятичное число;
u - целое десятичное число без знака;
o - целое число в восьмеричной системе счисления;
x - целое число в шестнадцатеричной системе счисления (% 4x - без
гашения незначащих нулей);
f - вещественное число;
e - вещественное число в экспоненциальной форме;
c - символ;
p - указатель (адрес);
s - символьная строка.
Кроме этого, форматная строка может содержать:
\n - переход на следующую строку;
\n hhh - вставка символа с кодом ASCII hhh (код задается в
шестнадцатеричной системе счисления);
%% - печать знака %.

2

Примеры форматного ввода/вывода
а) i=26;
printf (”%-6d???%%? %o? %x\n”, i, i, i);

26???????%?32?1A ?
б) scanf(”%d

%d”,&a,&b);

Вводимые значения:

1) 24

28

2) 24?
28

в) scanf(”%d,%d”,&a,&b);
Вводимые значения: 24,28
г) scanf(”%s”,name);
Вводимые значения: Иванов Иван
Результат ввода: name=”Иванов”

3

Ввод/вывод строк
Ввод:
char* gets();
// возвращает копию строки или NULL
Вывод:
int puts ();
Примеры:
а) puts(”Это строка”);
Результат: Это строка?
б) gets(st);
Вводимые значения:
Иванов Иван?
Результат:
st =”Иванов Иван”

4

Ввод/вывод символов
Ввод
int getchar(); // возвращает символ или EOF
Вывод
int putchar();
Примеры:
а) ch=getchar( );
б) putchar(’t’);
5

Программа определения корней кв. уравнения
// Ex2_1
#include "stdafx.h"
#include
#include
int main(int argc, char* argv[])
{ float A,B,C,E,D,X1,X2;
puts("Input A,B,C");
scanf("%f %f %f",&A,&B,&C);
printf("A=%5.2f B=%5.2f C=%5.2f \n",A,B,C);
E=2*A;
D=sqrt(B*B-4*A*C);
X1=(-B+D)/E;
X2=(-B-D)/E;
printf("X1= %7.3f X2=%7.3f \n",X1,X2);
return 0;
}

;

2.2 Блок операторов

{ ;… ;}
Пример:
{
f=a+b;
a+=10;
}
7

2.3 Управляющие конструкции
Управляющими называются операторы, способные изменять
естественный ход линейного процесса.

2.3 Оператор условной передачи управления
if () [ else
]
Оператор – любой оператор С++, в том числе другой оператор
условной передачи управления, а также блок операторов.
Выражение – любое выражение, соответствующее правилам С+
+
если значение выражения не равно нулю, то выполняется
оператор, следующий за выражением;
если значение выражения равно нулю, то либо выполняется
оператор альтернативной ветви, либо управление передается
8
следующему за IF оператору.

Оператор условной передачи управления(2)
Правило вложения
if then
if then
else
{

}

Ветвь else относится к ближайшему if.
Для реализации варианта б используют блок операторов {…}:
if
{if }
else

Оператор условной передачи управления (3)
Примеры:
а) if (!b)
puts("с - не определено"); // если b=0, то – ошибка,
else {c=a/b; printf("c=%d\n", c);} // иначе - выводится с.
б) if ((c=a+b)!=5) c+=b;
else c=a;
в) if ((ch=getchar())==?q?)
// если в ch введено q,
puts ("Программа завершена."); // то ...
else puts ("Продолжаем работу...");
// иначе ...
г) ch=?a?;
if ((oldch=ch, ch=?b?)==?a?)puts("Это символ ?a?\n");
else puts("Это символ ?b?\n");
Задача: решить систему уравнений
ax=b
10
x+cy=1

Схема алгоритма решения системы уравнений
Начало
a,b,c
да

нет
да

a=0

нет

нет

да
b=0

c=0
нет

x=b/a
Решений
нет

y-любое,
х=1-сy

да
a=b

Y=(a-b)/a*c
x, y

Конец

Решений
нет

x=1,
y-любое

Программа решения системы уравнений
// Ex2_2

Подключение
библиотек

#include "stdafx.h"
#include

Описание
переменных

float y,x,a,b,c;
int main(int argc, char* argv[])
{ puts("Input a,b,c");
scanf("%f %f %f",&a,&b,&c);
printf("a=%5.2f b=%5.2f c=
%5.2f\n",a,b,c);

Ввод и печать
исходных данных

Программа решения системы уравнений(2)
if (a==0)
if (b==0) puts("Solution is epsent");
else printf("y - luboe x=1-c*y");
else
if (c==0)
if (a=b) puts("Solution is epsent");
else puts("x=1, y- luboe");
else
{
x=b/a;
y=(a-b)/a/c;
printf("x= %7.3f y=%7.3f\n",x,y);
}
return 0;
}

2.2 Оператор выбора
Если
количество
альтернатив
велико,
то
можно
использовать оператор выбора.
Оператор реализует конструкцию выбора.
switch ()
{
case :
case :
...
[ default : ]
}
Где:
–переключающее выражение . Должно быть
целочисленного типа или его начение приводится к
целочисленному.
- константное выражение, приводимое к
переключающему. Любой из операторов может быть
помечен несколькими метками типа case :
Результат выражения сравнивается с заданными
значениями и, в случае равенства, выполняются
соответствующие операторы, которых может быть 0 или
более.
Затем выполняются операторы всех последующих
альтернатив, если не встретится break.

Оператор выбора (2)
Пример:
switch (n_day)
{ case 1:
case 2:
case 3:
case 4:
case 5: puts("Go work!"); break;
case 6: printf("%s","Clean the yard and");
case 7: puts("relax!");
}

Разработать программу, вычисляющую значения
нескольких функций.
Функция выбирается пользователем, который
вводит ее код. (Ex2_3).
Input cod:
1 – y=sin x
2 – y=cos x
15
3 – y=exp x

Схема алгоритма
Начало
Kod , x
key=true
Kod

1
y=sin(x)

2
y=cos(x)
нет

Key

Error

3

Иначе

y=exp(x)

key=false

да
x, y

Конец

Программа вычисления функции
// Ex2_3
#include "stdafx.h"
#include
#include
int main(int argc, char* argv[])
{ int kod,key;
float x,y;
puts("input x");
scanf("%f",&x)
printf("x=6.3f",x);
puts("input kod");
puts("1 - y=sin(x)");
puts("2 - y=cos(x)");
puts("3 - y=exp(x)");
scanf("%d",&kod);

Программа вычисления функции (2)
key=1;
switch(kod)
{
case 1: y=sin(x); break;
case 2: y=cos(x);break;
case 3: y=exp(x); break;
default: key=0;
}
if (key) printf("x= %5.2f
else puts("Error");
return 0;
}

y=%8.6f\n",x,y);

2.5 Операторы организации циклов
Циклы

Счетные

Итерационные

Цикл-для

Цикл-пока
Цикл-до

Поисковые

1. Оператор счетного цикла for
i:=1,k

?

Действие

i :=1

i?k

нет

да
Счетный цикл также можно
реализовать через «цикл-пока»

Действие
i :=i+1

for (;;);
Эквивалентно:

while ()
{;
;
}

Оператор счетного цикла for (2)
Выражение1 – инициализирующее выражение; представляет собой
последовательность описаний, определений и выражений,
разделенных запятыми. Выполняется только один раз в начале
цикла и задает начальные значения переменным цикла. Может
отсутствовать, при этом точка с запятой остается.
Выражение2 –выражение условия; определяет предельное значение
параметра цикла. Может отсутствовать, при этом точка с запятой
остается.
Выражение3 – список выражений, которые выполняются на каждой
итерации цикла после тела цикла, но до следующей проверки
условия. Обычно определяют изменение параметра цикла. Может
отсутствовать
Оператор – тело цикла. Может быть любым оператором С++, блоком
операторов (тело цикла содержит более одного простого
оператора) или может отсутствовать.
1. for(int i=0,float s=0;i
Суммирование натуральных чисел
Найти сумму N натуральных чисел.(Ex2_for)

«Накопление»
суммы

#include "stdafx.h"
#include
int main(int argc, char* argv[])
{ int i,n,s;
puts(“Input n”);
scanf(“%d”,&n);
for (i=1,s=0;i
Цикл-пока
Условие

нет

да
Действие

while () ;
Где:
Выражение - совокупность выражений, разделенных
запятой, определяющая условия выполнения цикла.
Результат такого составного выражения – значение
последнего выражения. Цикл выполняется до тех пор,
пока результат выражения отличен от нуля.
Оператор – любой оператор С++, в том числе блок
операторов.

Цикл-до
Действие

?

Действие
нет

да
Условие

Условие

нет

«Цикл-до» можно реализовать
через «цикл-пока»

да
Действие

do while () ;
Цикл выполняется до тех пор, пока результат выражения отличен от
нуля.
Пример. Игнорировать ввод значения, выходящего за пределы
заданного интервала.
do {
printf("Введите значение от %d до % d : ",low, high);
scanf(" %d ", &a);
} while (ahigh);

Вложенные циклы
Вложенными циклическими процессами называются такие
процессы, при которых внутри одного циклического процесса,
происходит другой.
Каждый из процессов
операторами цикла.

может

реализоваться

различными

Внешний цикл может быть счетным, а внутренний – итерационным и
наоборот.
На количество вложенных циклов компилятор С++ не накладывает
никаких ограничений. Оно определяется логикой программы и
желанием программиста.
При программировании циклов необходимо соблюдать правило
строгой вложенности – начала и концы циклов не должны
перекрещиваться, а каждый вложенный цикл иметь начало и
конец внутри внешнего цикла.
Вход внутрь цикла по goto возможен только через его начало.

Суммирование ряда
Определить сумму ряда

S = 1 - 1/x + 1/x 2- 1/x3 + … с заданной точностью ?.
x>1

x
Приведение алгоритма к структурному
Начало

Начало

Начало

x, Eps

x, Eps

x, Eps

?

S=0

S=0

S=0
R=1

R=1

R=1

S=S+R
S=S+R
|R|Eps

да

да
R=-R/x

S=S+R
нет
R=-R/x
нет

|R|
Вариант а (Ex2_4)
Начало
x, Eps
S=0
R=1
S=S+R
|R|>Eps

да
R=-R/x
S=S+R
r, S
Конец

#include "stdafx.h"
#include
#include
void main(int argc, char* argv[])
{
float s, r,x,eps;
puts("Input x, eps:");
scanf("%f %f", &x, &eps);
s=0;
r=1; s+=r;
while (fabs(r)>eps)
{r=-r/x;
s+=r;
}
printf(“ Result= %10.7f r=%10.8\n",
s,r);
}

Вариант б (Ex2_5)
Начало
x, Eps
S=0
R=1
S=S+R
R=-R/x
нет

#include "stdafx.h"
#include
#include
void main(int argc, char* argv[])
{ float s, r,x,eps;
puts("Input x, eps:");
scanf("%f %f", &x, &eps);
s=0; r=1;
do

|R|eps);
printf("Result= %10.7f r=%10.8f.\n", s,r);
}

Решение задач вычислительной математики
Задача. Вычислить определенный интеграл функции f(x) на
интервале [a,b] методом прямоугольников с точностью ?.
y

О

a

b

x

Итак
n
n=6
S = f(x1)?d + f(x2)?d + f(x3)?d+ …+ f(xn)?d = d??f(xi), где
d=(b-a)/n.
i=1
Увеличивая n, получаем приближения площади: S1, S2, S3 ...
Останавливаемся, когда |Sk-Sk+1| < ?

Неформальное описание алгоритма
Алгоритм:
Шаг 1. Ввести a, b, ?.
Шаг 2. Задать число прямоугольников n:=10.
Шаг 3. Определить шаг d:=(b-a)/n.
Шаг 4. Определить площадь фигуры S1.
Шаг 5. Увеличить число прямоугольников вдвое n:=n*2.
Шаг 6. Уменьшить шаг вдвое d:=d/2.
Шаг 7. Определить площадь фигуры S2.
Шаг 8. Если Разность площадей меньше ?, то перейти к шагу 11
Шаг 9. Запомнить новое значение площади S1:=S2.
Шаг 10. Перейти к шагу 5.
Шаг 11. Вывести S1.
Конец.

Схема алгоритма (неструктурная и неэффективная)
Начало

A

Ввод a, b

n=2*n, d=d/2

n=10

S2=0

d=(b-a)/n

x=a

S1=0
i=1,n

x=a

S2=S2+f(x)

i=1,n

x=x+d

S1=S1+f(x)
x=x+d

S2:=S2*d

S1=S1*d

нет

A

S1=S2

|S1-S2|
Схема структурированная и сокращенная
A
S1=S2

Начало

n=2*n

Ввод a, b

d=d/2

n=5

S2=0

d=(b-a)/n

x=a

B

S2=1010

i=1,n

Вывод S2

A

S2=S2+f(x)

Конец

x=x+d
S2=S2*d
нет

|S1-S2|
Программа
// Ex2_6.cpp
#include "stdafx.h"
#include
#include
int main(int argc, char* argv[])
{int i,n;
float s1,s2,x,a,b,eps,d;
puts("input a,b,eps");
scanf("%f %f %f",&a,&b,&eps);
n=5;
d=(b-a)/n;
s2=1.0e+10;

Начало
Ввод a, b
n=5
d=(b-a)/n
S2=1010
A

Программа (2)

A

do
{ s1=s2;
s2=0;n=n*2;
d=d/2;
x=a;
for(i=1;ieps);

S1=S2
n=2*n
d=d/2
S2=0
x=a
i=1,n
S2=S2+f(x)
x=x+d
S2=S2*d
нет

|S1-S2|
Программа(3)
printf("I= %10.7f n= %6d\n",s2,n);
return 0;
}

B
Вывод S2
Конец

2.6 Неструктурные операторы передачи
управления
1. Оператор безусловного перехода goto
goto ;

Пример:
again: x=y+a;
...
goto again;
37

2. Оператор досрочного завершения break
break;
Пример. Суммирование до 10 чисел вводимой
последовательности. При вводе отрицательного
числа работа программы завершается (Ex2_7).
#include "stdafx.h"
#include
void main()
{ int s=0, i, k;
puts("Input up to 10 numbers.");
for (i=1; i
3. Оператор продолжения continue
continue;
Пример 5. Программа суммирует 10
целых положительных чисел (Ex2_8).
#include "stdafx.h"
#include
void main()
{ int s=0,i=1,k;
puts("Input 10 numbers.");
while(i
Пример 6. Вывод таблицы кодов (Ex2_9)
#include "stdafx.h"
#include
int main(int argc, char* argv[ ])
{
int i,i1,in,col;
puts("Input first and last values");
scanf("%d %d",&i1,&in);
puts("Input colon number");
scanf("%d",&col);
for(i=i1;i





Чтобы не видеть здесь видео-рекламу достаточно стать зарегистрированным пользователем.
Чтобы не видеть никакую рекламу на сайте, нужно стать VIP-пользователем.
Это можно сделать совершенно бесплатно. Читайте подробности тут.