Конструкции структурного программирования в Си

Содержание

Слайд 2

Пример … … int m = 12, n = 18; if

Пример



int m = 12, n = 18;
if

(m printf (“Сумма чисел %d”, m+n);
else printf (“Произведение чисел %d”, m*n);


Слайд 3

Пример сложного условия … int x = 5, y = 7,

Пример сложного условия


int x = 5, y = 7, z =

3;
int min;
if (x min = x;
else if (y min = y;
else min = z;

Слайд 4

Поле шахматной доски определяется парой натуральных чисел, каждое из которых не

Поле шахматной доски определяется парой натуральных чисел, каждое из которых не

превосходит 8. По введенным координатам двух полей выясните, одного ли цвета эти поля.

Черные клетки – нечетные строки и нечетные столбцы или четные строки и четные столбцы
Белые клетки – нечетные строки и четные столбцы или четные строки и нечетные столбцы
Тогда для черных клеток сумма строки и столбца всегда четная, а для белых клеток – всегда нечетная.

Слайд 5

#include #include int main(int argc, char *argv[]) { system("chcp 1251"); int

#include
#include
int main(int argc, char *argv[]) {
system("chcp 1251");
int x,y,x1,y1, a,b;
printf(“Введите

номер столбца и номер строки первой клетки: ");
scanf("%d%d",&x,&y);
printf("Введите номер столбца и номер строки второй клетки: ");
scanf("%d%d",&x1,&y1);
a = x + y;
b = x1 + y1;
a = a+b;
if (a%2==0) printf(“Клетки одного цвета\n");
else printf(“Клетки разных цветов\n");
system("pause");
return 0;
}
Слайд 6

Даны вещественные положительные числа a, b, c. Определите, существует ли треугольник

Даны вещественные положительные числа a, b, c. Определите, существует ли треугольник

со сторонами a, b, c и если да, то определите, является ли он прямоугольным.

треугольник

a, b, c

a+b>c
Не

Нет

a+с>b

Нет

Да

b+c>a

Нет

Да

1

2

Да

Слайд 7

2 a2+b2 = c2 Да b2+c2 = a2 Да Нет a2+c2

2

a2+b2 = c2

Да

b2+c2 = a2

Да

Нет

a2+c2 = b2

Да

Нет
Не

1

Нет

1

конец

Слайд 8

int main(int argc, char *argv[]) { system("chcp 1251"); float a,b,c; printf("Введите

int main(int argc, char *argv[]) {
system("chcp 1251");
float a,b,c;
printf("Введите три стороны треугольника:

");
scanf("%f%f%f",&a,&b,&c);
if (a+b>c&&a+c>b&&c+b>a)
if (a*a+b*b==c*c||a*a+c*c==b*b||c*c+b*b==a*a)
printf("Прямоугольный треугольник\n");
else printf("Не прямоугольный треугольник\n");
else
printf ("Отрезки не могут образовать
треугольник\n ");
system("pause");
return 0;
}
Слайд 9

Даны три числа x,y,z. Найдите a=max(x,y)-min2(x2,y-z)+43 формула x, y, z x

Даны три числа x,y,z. Найдите
a=max(x,y)-min2(x2,y-z)+43

формула

x, y, z

x

Нет

Да

max=x

max=y

1

x*x

Нет

Да

min=x*x

min=y-z

1

a=max-min*min + 43

Слайд 10

int main(int argc, char *argv[]) { system("chcp 1251"); float x,y,z,max,min; float

int main(int argc, char *argv[]) {
system("chcp 1251");
float x,y,z,max,min;
float a;
printf("Введите x,y,z: ");
scanf("%f%f%f",&x,&y,&z);
if

(x if (x*x<(y-z)) min = x*x; else min = y-z;
a = max - min*min +43;
printf("Значение а = %.3f\n",a);
system("pause");
return 0;
}
Слайд 11

Известны площади круга и квадрата. Определить: уместится ли круг в квадрате

Известны площади круга и квадрата. Определить:
уместится ли круг в квадрате
уместится ли

квадрат в круге

D

Sкруга=πr2 = πD2/4

a

Sквадрата=a2

D2 = 2a2

D2 = 2 Sквадрата

D2 = 4Sкруга /π

4Sкруга /π >= 2 Sквадрата

Слайд 12

D a 4Sкруга /π

D

a

4Sкруга /π <= Sквадрата

Слайд 13

int main(int argc, char *argv[]) { system("chcp 1251"); printf("Введите площадь круга

int main(int argc, char *argv[]) {
system("chcp 1251");
printf("Введите площадь круга и квадрата:

");
float circle, quadro;
scanf("%f%f",&circle,&quadro);
if(4*circle/M_PI>=2*quadro)
printf("Квадрат помещается в круге\n");
else
printf ("Квадрат не помещается в круге\n");
if (4*circle/M_PI<=quadro)
printf("Круг помещается в квадрате\n");
else
printf ("Круг не помещается в квадрате\n");
system("pause"); return 0;}
Слайд 14

#include #include /* Дано двузначное число. Определить: входит ли в него

#include
#include
/* Дано двузначное число. Определить: входит ли в него

цифра 3
*/
int main(int argc, char *argv[]) {
system("chcp 1251");
printf("Введите двузначное число: ");
int x,y,flag = 0;
scanf("%d",&x);
y = x%10;
if (y==3) flag++;
x = x-y;
if (x==30) flag++;
if (flag) printf("В числе есть цифра 3\n");
else printf("В числе нет цифры 3\n");
system("pause");
return 0;
}
Слайд 15

#include #include /* Определить количество дней в году, который вводит пользователь.

#include
#include
/* Определить количество дней в году, который вводит пользователь.

В високосном годе - 366 дней, тогда как в обычном 365. Високосными годами являются все года делящиеся нацело на 4 за исключением столетий, которые делятся нацело на 400. */
int main(int argc, char *argv[]) {
system("chcp 1251");
printf("Введите год: ");
int year;
scanf("%d",&year);
if (year%4==0&&year%100!=0)
printf("В %d году 366 дней (високосный)\n",year);
else if (year%100==0&&year%400!=0)
printf("В %d году 366 дней (високосный)\n",year);
else printf("В %d году 365 дней (не високосный)\n", year);
return 0;
}
Слайд 16

4.2. Множественный выбор Синтаксис: switch (выражение) { case значение выражения1: операторы;

4.2. Множественный выбор

Синтаксис: switch (выражение)
{
case значение выражения1: операторы;
case значение выражения2:

операторы;

[default: операторы;]
}

Выражение в switch
int, long int, char, … целочисленные типы

Слайд 17

Принцип работы switch значение выражения сравнивается со значением, указанным в первом

Принцип работы switch
значение выражения сравнивается со значением, указанным в первом

блоке case
если значения совпали, выполняются операторы из первого блока case
управление без проверки условия передается в последующие блоки case
если case заканчивается оператором break, управление передается на оператор, следующий за блоком switch
Слайд 18

Принцип работы switch если совпадения значений не произошло, последовательно проверяются все

Принцип работы switch
если совпадения значений не произошло, последовательно проверяются все

следующие case
в блок default управление передается в случае, если не произошло ни одного совпадения значений
для определения диапазонов используется перечисление case:
case a: case b: case c: …
Слайд 19

int k; printf(“Введите произвольное целое число: "); scanf("%d",&k); switch (k) {

int k;
printf(“Введите произвольное целое число: ");
scanf("%d",&k);
switch (k)

{ case 1:case 2: case 3:
printf(“Введено число 1 или 2 или 3\n");
break;
case 4:
printf(“Введено число 4\n");
case 6:
printf(“ Введено число 6\n");
break;
default:
printf(“ Управление передано в блок DEFAULT \n");
}
Слайд 20

Результаты работы

Результаты работы

Слайд 21

С клавиатуры вводятся три числа DD MM YYYY, обозначающие день, месяц

С клавиатуры вводятся три числа DD MM YYYY, обозначающие день, месяц

и год. Проверить корректность введенной даты.

int main(int argc, char *argv[]) {
system("chcp 1251");
int dd,mm, yy, f = 0;
printf("Вводите день, месяц, год: ");
scanf("%d%d%d", &dd,&mm,&yy);
if (dd>31||mm>12) f = 1;
else {
switch (mm) {
case 1: if (dd>31) f=1; break;
case 2: if (yy%4==0&&yy%100!=0||yy%100==0&&yy%400==0)
{if (dd>29) f=1; }
else if (dd>28) f=1; break;

Слайд 22

case 3: if (dd>31) f=1; break; case 4: if (dd>30) f=1;


case 3: if (dd>31) f=1; break;
case 4: if (dd>30)

f=1; break;
case 5: if (dd>31) f=1; break;
case 6: if (dd>30) f=1; break;
case 7: if (dd>31) f=1; break;
case 8: if (dd>31) f=1; break;
case 9: if (dd>30) f=1;break;
case 10: if (dd>31) f=1;break;
case 11: if (dd>30) f=1;break;
case 12: if (dd>31) f=1;break;
default: f=0;
}
}
if (f) printf("Введенная дата некорректна\n");
system("pause");
return 0;
}
Слайд 23

АЛГОРИТМ РАЗБИЕНИЯ ЧИСЛА НА ЦИФРЫ 1567 % 10 = 7 (получение

АЛГОРИТМ РАЗБИЕНИЯ ЧИСЛА НА ЦИФРЫ

1567 % 10 = 7 (получение остатка

от деления)
1567 / 10 = 156 (деление на 10 нацело)
156 % 10 = 6 (получение остатка от деления)
156 / 10 = 15 (деление на 10 нацело)
15 % 10 = 5 (получение остатка от деления)
15 / 10 = 1 (деление на 10 нацело)
1 % 10 = 1(получение остатка от деления)
1 / 10 = 0 (деление на 10 нацело)
Слайд 24

4.3. Циклы 4.3.1. Цикл с фиксированным числом операций for Цикл, это

4.3. Циклы

4.3.1. Цикл с фиксированным числом операций for

Цикл, это конструкция

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

Синтаксис:
for (секция инициализации значения; секция проверки условия; секция коррекции) {тело цикла}

Слайд 25

Алгоритмы суммы и произведения 7 0 + = 17 6 +

Алгоритмы суммы и произведения

7

0

+

=

17

6

+

+

4

S:=0
для i от 1 до n
ввод k;

S:=S+k;
кц
рез S.
Слайд 26

S:=1 для i от 1 до n ввод k; S:=S*k; кц рез S. Алгоритм произведения

S:=1
для i от 1 до n
ввод k;
S:=S*k;
кц
рез S.

Алгоритм произведения

Слайд 27

Дана последовательность из n произвольных чисел. Найти сумму нечетных элементов Сумма

Дана последовательность из n произвольных чисел. Найти сумму нечетных элементов

Сумма

нечетных

i < n

Нет

Да

i=i+1

Нет

Да

i =0, S=0

S=S+a

a

a% 2 =1

S

Конец

Слайд 28

Дана последовательность из n произвольных чисел. Найти значение самого большого элемента

Дана последовательность из n произвольных чисел. Найти значение самого большого элемента

Максимум

Да

a

a>max

L1
i

i =1

a

max=a

1

1

max=a

i =i+1

L1

S

Конец

Нет