Лекция 3
Примеры решения задач
2. Составные операторы
3. Операторы выбора
3.2. Переключатель
4.1. Цикл с параметром
4.3. Цикл с постусловием
788.00K
Категория: ПрограммированиеПрограммирование

Операторы. Лекция 3 по алгоритмизации и программированию

1. Лекция 3

2.

1. Оператор «выражение»
i++;
a+=2;
x=a+b;
;
Основное назначение выражения:
1) определить порядок вычисления некоторого
выражения;
2) найти значение выражения.
Если результатом вычисления выражения
является число, то данное выражение –
арифметическое. Если результатом будет
значение «истина» или «ложь», то это
логическое выражение.

3. Примеры решения задач

• Задача №1.
Определить,
попадет ли точка с
координатами (х, у )
в заштрихованную
область.

4.

#include <iostream>
#include <cmath>
using namespace std;
void main()
{
float x,y;
cout<<"\nEnter x,y";
cin>>x>>y;
bool Ok=(y>=-x+1&& y<=2/3*x+2 && x>=0 &&
y>=0) ||
(x*x+y*y>=1 && x*x+y*y<=9 && x<=0) ||
(x>=0 && x<=1 && y<=-1 && y>=-3) ||
(x>=1 && x<=2 && y<=0 && y>=-3);
cout<<"\n"<<Ok;
}

5.

Если в выражениях встречаются переменные и константы разных типов,
то производится автоматическое преобразование типов.
Правила преобразования типов
1) Преобразование типов не происходит, если оба операнда имеют
одинаковый тип.
2) При наличии разных типов величина с младшим типом приводится к
величине старшего типа, исключение составляют операция
присваивания и оператор присваивания.
3) При выполнении операций присваивания величина, полученная в
правой части, преобразуется к типу переменной, стоящей в левой части.
Пример:
int x;
float a=2.55, c=1.75; //double преобразуется в float
x=a+b;
Преобразование целого типа (от младшего к старшему)
char short int long int
Преобразование вещественного типа (от младшего к старшему)
float double long double

6. 2. Составные операторы

2.1. Составные операторы
{
n++;
составной оператор
summa+=n;
}
//это
2.2. Блоки
{
int n=0;
n++;
summa+=n;
}
//это блок

7.

ПРОГРАММИРОВАНИЕ ВЕТВЛЕНИЙ
В языке С для программирования ветвлений
существуют:
1) условная операция;
2) условный оператор
3) оператор-переключатель.
Условная операция
<выражение> ?
<выражение_1>:<выражение_2>
(левоассоциативная операция)
Вычисляется значение выражения.
Если значение отлично от 0, то
вычисляется «выражение_1».
Если выражение будет равно 0, то
вычисляется «выражение_2» и
результатом будет значение выражения
2.
max=(a>b)?a:b;

8.

• Выражение-условие :
• арифметическое выражение,
• отношение,
• логическое выражение.

9. 3. Операторы выбора

3.1. Условный оператор
if (выражение-условие) оператор; //сокращенная форма
if (выражение-условие) оператор;
else оператор;
//полная форма

10.

11.

Найти решение квадратного уравнения ax2+bx+c=0.
#include “stdio.h”
#include “math.h”
void main ()
{
float a,b,c;
float d,x1,x2;
printf(“\nВведите a, b, c”);
scanf(“%f%f%f”,&a,&b,&c);
d=b*b-4*a*c;
if (d>0) { printf(“\nДва корня”);
x1=(–b+sqrt(d))/(2*a);
x2=(–b–sqrt(d))/(2*a);
printf(“: x1=%8.3f x2=%8.3f”,x1,x2);
}
else {
x1=–b/(2*a);
x2=sqrt(fabs(d))/(2*a);
if (d<0) { printf (“\n Комплексные корни”);
printf(“\nx1=%8.3f+%8.3f*I”,x1,x2);
printf(“\nx2=%8.3f-%8.3f*I”,x1,x2);
}
else printf (“\nКратный корень: %8.3f”,x1);
}
}

12. 3.2. Переключатель

switch (выражение)
{
case константа1 : оператор1 ;
case константа2 : оператор2 ;
...........
[default: операторы;]
}

13.

14.

Результаты работы программы:
1.
При вводе 1 будет
выведено:
The number is one
2*2=1
#include <iostream>
3*3=1
using namespace std;
1 is very beautiful!
void main()
The end of work
{
2.
При вводе 2 будет
int i;
выведено:
2*2=4
cout<<"\nEnter the number";
3*3=4
cin>>i;
2 is very beautiful!
switch(i)
The end of work
{
3.
При вводе 3 будет
case 1:cout<<"\nThe number is выведено:
one";
3*3=9
3 is very beautiful!
case 2:cout<<"\n2*2="<<i*i;
The end of work
case 3: cout<<"\n3*3="<<i*i;
4.
При вводе 4 будет
case 4: cout<<"\n"<<i<<" is
выведено:
very beautiful!";
4 is very beautiful!
default:cout<<"\nThe end of
The end of work
work";
5.
При вводе всех остальных
чисел будет выведено:
}
The end of work
}
Пример

15.

y=1.0;
n=4;
switch (n)
{
case 5: y=y*x;
case 4: y*=x;
case 3: y*=x;
case 2: y*=x;
case 1: y*=x; printf(“\ny=%e”,y);
default: printf(“\nСтепень больше 5”);
}
При х=2 фрагмент программы вычисляет
значение 2^4.

16.

Оператор break – оператор завершения
какого-либо действия.
Моделирование
оператора
выбора
аналогичного оператору выбора на языке Паскаль
с
помощью
оператора-переключателя
производится следующим образом:
switch (<целочисленное выражение>)
{
case
<константа
1>:
<список
операторов>; break;
case
<константа
2>:
<список
операторов>; break;
...
case
<константа
N>:
<список
операторов>; break;
[default: < список операторов >;]
}

17.

ПРОГРАММИРОВАНИЕ ЦИКЛОВ
Если для решения задачи необходимо
несколько раз подряд выполнить действие или
группу действий, то для этого организуются
циклы.
Все циклические алгоритмы делятся на две
группы:
1) количество повторений заранее известно
(используются циклы с параметром);
2) количество повторений заранее неизвестно
(используются циклы с предусловием и с
постусловием).

18. 4.1. Цикл с параметром

for (выражение_1;выражениеусловие;выражение_3)
оператор;
•Выражение_1 – задает начальные значения для
цикла (инициализация) могут присутствовать
другие операторы присваивания.
• Выражение-условие определяет условие
выполнения
цикла, если оно не равно 0, цикл выполняется,
а затем вычисляется значение выражения_3.
•Выражение_3 – задает изменение параметра цикла
или
других переменных (коррекция).

19.

Вычислить F=n!=1 2 3 4… n.
1)F=1;
for (i=1; i<=n; i+=1) F=F*i;
2)for(F=1,i=1; i<=n; i++) F=F*i;
3) for(i=1,F=1; i<=n; i++) F=F*i;
4)F=1;
for (i=1; i<=n; F*=i,i++);
/* Сначала идет вычисление факториала,
а затем изменение шага. Тело цикла
является пустым.*/
5)for (F=1,i=1; i<=n; F*=i,i++);
6)for(F=1,i=1;i<=n; i++, F*=i);
вычисляет значение (n+1)!.

20.

• Задача №2. Дана
последовательность целых
чисел из n элементов. Найти
среднее арифметическое
этой последовательности.

21.

#include <iostream>
using namespace std;
void main()
{
int a,n,i;
double s=0;
cout<<"\nEnter n";
cin>>n;
for(i=1;i<=n;i++)
{
cout<<"\nEnter a";
cin>>a;
s+=a;
}
s=s/n;
cout<<"\nсреднее арифметическое
равно="<<s<<"\n";
}

22.

В качестве параметра цикла может выступать
переменная любого типа.
Пример
Получить на отрезке от a до b значения функции
y=sin x с шагом h. Данные задачи: x [a;b], h, y=sin x,
x=x+h.
...
float a,b,h,x,y;
for (x=a;x<=b;x+=h)
{ y=sin(x);
printf(“\nx=%5.3f y=%5.3f”,x,y);
}
...

23.

4.2. Цикл с предусловием
while (выражениеусловие)
оператор;
Пример
a=1;s=0;
while (a!=0)
{
cin>>a;
s+=a;
}

24.

Пример
Найти сумму цифр произвольного целого числа.
...
S=0;
n=abs(n);
while (n)
{S+=n%10; // n%10 – выделяет последнюю
цифру числа
n/=10; ; // n/10 – «зачеркивает»
последнюю цифру
}
...
Оператор цикла или один из операторов,
составляющих тело цикла, обязательно должен
изменить условие продолжения цикла. Особенность
цикла с предусловием – тело цикла может не
выполниться ни разу в случае, когда n=0.

25. 4.3. Цикл с постусловием

do
Оператор;
while (выражениеусловие);
Пример
s=0;
do
{
cin>>a;
s+=a;
}
while(a!=0);

26.

• Задача №3. Дана последовательность
целых чисел, за которой следует 0.
Найти минимальный элемент этой
последовательности.

27.

//вариант программы №1
#include <iostream>
using namespace std;
void main()
{
int a,min;
cout<<"\nEnter a";
cin>>a;
min=a;
while(a!=0)
{
cout<<"\nEnter a";
cin>>a;
if (a!=0&&a<min) min=a;
}
cout<<"\nmin="<<min<<"\n";
}

28.

//вариант программы №2
#include <iostream>
using namespace std;
void main()
{
int a,min;
cout<<"\nEnter a";
cin>>a;
If (a!=0)
{
min=a;
do
{
cout<<"\nEnter a";
cin>>a;
if (a!=0 && a<min) min=a;
}
while(a!=0);
cout<<"\nmin="<<min<<"\n";
}
else cout<<"\nPYSTO\n";
}

29.

//вариант программы №3
#include <iostream>
using namespace std;
void main()
{
int a,min;
cout<<"\nEnter a";
cin>>a;
min=a;
for(;a!=0;)
{
cout<<"\nEnter a";
cin>>a;
if (a!=0&&a<min) min=a;
}
cout<<"\nmin="<<min<<"\n";
}

30.

Учебник стр.1 - 49
English     Русский Правила