Программирование на языке Си

Содержание

Слайд 2

Программирование на языке Си Тема 1. Введение © К.Ю. Поляков, 2007

Программирование на языке Си

Тема 1. Введение

© К.Ю. Поляков, 2007

Слайд 3

Алгоритм Свойства алгоритма дискретность: состоит из отдельных шагов (команд) понятность: должен

Алгоритм

Свойства алгоритма
дискретность: состоит из отдельных шагов (команд)
понятность: должен включать только команды,

известные исполнителю (входящие в СКИ)
определенность: при одинаковых исходных данных всегда выдает один и тот же результат
конечность: заканчивается за конечное число шагов
массовость: может применяться многократно при различных исходных данных
корректность: дает верное решение при любых допустимых исходных данных

Алгоритм – это четко определенный план действий для исполнителя.

Слайд 4

Программа Программа – это алгоритм, записанный на каком-либо языке программирования набор

Программа

Программа – это
алгоритм, записанный на каком-либо языке программирования
набор команд для

компьютера

Команда – это описание действий, которые должен выполнить компьютер.
откуда взять исходные данные?
что нужно с ними сделать?
куда поместить результат?

Слайд 5

Языки программирования Машинно-ориентированные (низкого уровня) - каждая команда соответствует одной команде

Языки программирования

Машинно-ориентированные (низкого уровня) - каждая команда соответствует одной команде процессора

(ассемблер)
Языки высокого уровня – приближены к естественному (английскому) языку, легче воспринимаются человеком, не зависят от конкретного компьютера
для обучения: Бейсик, ЛОГО, Паскаль
профессиональные: Си, Фортран, Паскаль
для задач искусственного интеллекта: Пролог, ЛИСП
для Интернета: JavaScript, Java, Perl, PHP, ASP
Слайд 6

Язык Си 1972-1974 – Б. Керниган, Д. Ритчи высокая скорость работы

Язык Си

1972-1974 – Б. Керниган, Д. Ритчи
высокая скорость работы программ
много возможностей
стал

основой многих современных языков (С++, С#, Javascript, Java, ActionScript, PHP)
много шансов сделать ошибку, которая не обнаруживается автоматически
Слайд 7

Простейшая программа void main() { } главная (основная) программа всегда имеет

Простейшая программа

void main()
{
}

главная (основная) программа всегда имеет имя main

void = «пустой»
основная

программа не выдает никакого результата-числа

начало программы

«тело» программы (основная часть)

конец программы

Слайд 8

Два этапа создания программы

Два этапа создания программы

Слайд 9

Что происходит дальше? void main() { } first.cpp исходный файл first.obj

Что происходит дальше?

void main()
{
}

first.cpp

исходный файл

first.obj

транслятор

ЪБzЦ2?|ё3БКа
n/36ШпIC+И-
ЦЗ_5МyРЧб
s6bд^:/@:лЖ1_

объектный файл

стандартные функции

редактор связей
(компоновка)

MZPо:ЄPэ_еЗ"!_
`кn,ЦbЄ-Щр1 
G_БАC,
_Ощях¤9жФ

first.exe

исполняемый файл

текст программы на Си

или Си++
Слайд 10

Вывод текста на экран #include using namespace std; int main() {

Вывод текста на экран

#include
using namespace std;
int main()
{
cout<<“Privet Medved!)”;
}

include = включить

файл

iostream: описание стандартных функций потоковогог ввода и вывода

вызов стандартной функции
cout (потоковый вывод на экран)

этот текст будет на экране

Подключение стандартного пространства имен (подключается целый набор функции)

Слайд 11

IDE = Integrated Development Environment интегрированная среда разработки: текстовый редактор для

IDE = Integrated Development Environment
интегрированная среда разработки:
текстовый редактор для создания

и редактирования текстов программ
транслятор для перевода текстов программ на Си и Си++ в команды процессора
редактор связей для создания исполняемого файла (EXE-файла), подключаются стандартные функции
отладчик для поиска ошибок в программах
Слайд 12

Наиболее популярные ошибки

Наиболее популярные ошибки

Слайд 13

Задания "4": Вывести на экран текст "лесенкой" Vasya Poshel Guliat "5":

Задания

"4": Вывести на экран текст "лесенкой"
Vasya
Poshel
Guliat
"5": Вывести на

экран рисунок из букв
Z
ZZZ
ZZZZZ
ZZZZZZZ
HH HH
ZZZZZ
Слайд 14

Программирование на языке Си Тема 2. Переменные © К.Ю. Поляков, 2007

Программирование на языке Си

Тема 2. Переменные

© К.Ю. Поляков, 2007

Слайд 15

Что такое переменная? Переменная - это ячейка в памяти компьютера, которая

Что такое переменная?

Переменная - это ячейка в памяти компьютера, которая имеет

имя и хранит некоторое значение.
Значение переменной может меняться во время выполнения программы.
При записи в ячейку нового значения старое стирается.
Типы переменных
int – целое число в интервале:
[-2147483648… 2147483647] (4 байта)
float – вещественное число (числа с запятой), floating point (4 байта)
char – символ, character (1 байт)
Слайд 16

Имена переменных Могут включать латинские буквы (A-Z, a-z) знак подчеркивания _

Имена переменных

Могут включать
латинские буквы (A-Z, a-z)
знак подчеркивания _
цифры 0-9
НЕ могут включать
русские

буквы
пробелы
скобки, знаки +, =, !, ? и др.

Какие имена правильные?
AXby R&B 4Wheel Вася “PesBarbos” TU154 [QuQu] _ABBA A+B

Слайд 17

Объявление переменных Объявить переменную = определить ее имя, тип, начальное значение,

Объявление переменных

Объявить переменную = определить ее имя, тип, начальное значение, и

выделить ей место в памяти.

void main()
{
int a;
float b, c;
int Tu104, Il86=23, Yak42;
float x=4.56, y, z;
char c, c2='A', m;
}

целая переменная a

вещественные переменные b и c

целые переменные Tu104, Il86 и Yak42
Il86 = 23

вещественные переменные x, y и z
x = 4,56

·

целая и дробная части отделяются точкой

символьные переменные c, c2 и m
c2 = 'A'

Слайд 18

Оператор присваивания Оператор – это команда языка программирования высокого уровня. Оператор

Оператор присваивания

Оператор – это команда языка программирования высокого уровня.
Оператор присваивания служит

для изменения значения переменной.
Пример

a = 5;
x = a + 20;
y = (a + x) * (x – a);

5

25

600

Слайд 19

Оператор присваивания Общая структура: Арифметическое выражение может включать константы (постоянные) имена

Оператор присваивания

Общая структура:

Арифметическое выражение может включать
константы (постоянные)
имена переменных
знаки арифметических операций:
+

- * / %
вызовы функций
круглые скобки ( )

умножение

деление

остаток от деления

имя переменной = выражение;

куда

что

Слайд 20

void main() { int a, b; float x, y; a =

void main()
{
int a, b;
float x, y;
a

= 5;
10 = x;
y = 7,8;
b = 2.5;
x = 2*(a + y);
a = b + x;
}

Какие операторы неправильные?

имя переменной должно быть слева от знака =

целая и дробная часть отделяются точкой

при записи вещественного значение в целую переменную дробная часть будет отброшена

Слайд 21

Особенность деления в Си void main() { int a = 7;

Особенность деления в Си

void main()
{
int a = 7;
float x;
x = a

/ 4;
x = 4 / a;
x = float(a) / 4;
x = 1.*a / 4;
}

1

0

1.75

1.75

Слайд 22

Сокращенная запись операций в Си инкремент декремент a = a +

Сокращенная запись операций в Си

инкремент

декремент

a = a + 1;

a++;

a = a

+ b;

a += b;

a = a - 1;

a--;

a = a – b;

a -= b;

a = a * b;

a *= b;

a = a / b;

a /= b;

a = a % b;

a %= b;

Слайд 23

Ручная прокрутка программы void main() { int a, b; a =

Ручная прокрутка программы

void main()
{
int a, b;
a = 5;
b

= a + 2;
a = (a + 2)*(b + 3);
b = a / 5;
a = a % b;
a++;
b = (a + 14) % 7;
}

5

7

28

5

3

4

4

?

?

Слайд 24

Порядок выполнения операций вычисление выражений в скобках умножение, деление, % слева

Порядок выполнения операций

вычисление выражений в скобках
умножение, деление, % слева направо
сложение и

вычитание слева направо

2 3 5 4 1 7 8 6 9
z = (5*a*c+3*(c-d))/a*(b-c)/ b;

2 6 3 4 7 5 1 12 8 11 10 9
x =(a*a+5*c*c-d*(a+b))/((c+d)*(d-2*a));

Слайд 25

Блок-схема линейного алгоритма начало конец c = a + b; ввод

Блок-схема линейного алгоритма

начало

конец

c = a + b;

ввод a, b

вывод c

блок "начало"

блок

"ввод"

блок "процесс"

блок "вывод"

блок "конец"

Слайд 26

Задания "4": Ввести три числа, найти их сумму и произведение. Пример:

Задания

"4": Ввести три числа, найти их сумму и произведение.
Пример:
Введите

три числа:
4 5 7
4+5+7=16
4*5*7=140
"5": Ввести три числа, найти их сумму, произведение и среднее арифметическое.
Пример:
Введите три числа:
4 5 7
4+5+7=16
4*5*7=140
(4+5+7)/3=5.33
Слайд 27

Программирование на языке Си Тема 4. Ветвления © К.Ю. Поляков, 2007

Программирование на языке Си

Тема 4. Ветвления

© К.Ю. Поляков, 2007

Слайд 28

Разветвляющиеся алгоритмы Задача. Ввести два целых числа и вывести на экран

Разветвляющиеся алгоритмы

Задача. Ввести два целых числа и вывести на экран наибольшее

из них.
Идея решения: надо вывести на экран первое число, если оно больше второго, или второе, если оно больше первого.
Особенность: действия исполнителя зависят от некоторых условий (если … иначе …).

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

Слайд 29

Вариант 1. Блок-схема полная форма ветвления блок "решение"

Вариант 1. Блок-схема

полная форма ветвления

блок "решение"

Слайд 30

Условный оператор if ( условие ) { // что делать, если

Условный оператор

if ( условие )
{
// что делать, если

условие верно
}
else
{
// что делать, если условие неверно
}

Особенности:
вторая часть (else …) может отсутствовать (неполная форма)
если в блоке один оператор, можно убрать { }

Слайд 31

Что неправильно? if a > b { a = b; }

Что неправильно?

if a > b {
a = b;
}

else
b = a;

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

if ( a > b )
else
b = a;

if ( a > b )
a = b;
c = 2*a;
else
b = a;

}

}

{

a = b;

Слайд 32

Вариант 2. Блок-схема неполная форма ветвления

Вариант 2. Блок-схема

неполная форма ветвления

Слайд 33

Задания "4": Ввести три числа и найти наибольшее из них. Пример:

Задания

"4": Ввести три числа и найти наибольшее из них.
Пример:
Введите три

числа:
4 15 9
Наибольшее число 15
"5": Ввести пять чисел и найти наибольшее из них.
Пример:
Введите пять чисел:
4 15 9 56 4
Наибольшее число 56
Слайд 34

Программирование на языке Си Тема 5. Сложные условия © К.Ю. Поляков, 2007

Программирование на языке Си

Тема 5. Сложные условия

© К.Ю. Поляков, 2007

Слайд 35

Сложные условия Задача. Фирма набирает сотрудников от 25 до 40 лет

Сложные условия

Задача. Фирма набирает сотрудников от 25 до 40 лет включительно.

Ввести возраст человека и определить, подходит ли он фирме (вывести ответ "подходит" или "не подходит").
Особенность: надо проверить, выполняются ли два условия одновременно.
Слайд 36

Вариант 1. Алгоритм начало ввод x 'подходит' конец да нет x

Вариант 1. Алгоритм

начало

ввод x

'подходит'

конец

да

нет

x >= 25?

да

нет

x <= 40?

'не подходит'

'не подходит'

Слайд 37

Вариант 1. Программа void main() { int x; printf("Введите возраст\n"); scanf("%d",

Вариант 1. Программа

void main()
{
int x;
printf("Введите возраст\n");
scanf("%d", &x);
if (x

>= 25)
if (x <= 40)
printf("Подходит");
else printf("Не подходит");
else
printf("Не подходит");
}
Слайд 38

Вариант 2. Алгоритм начало ввод x 'подходит' да нет x >= 25 и x 'не подходит'

Вариант 2. Алгоритм

начало

ввод x

'подходит'

да

нет

x >= 25 и
x <= 40?

'не подходит'

Слайд 39

Вариант 2. Программа void main() { int x; printf("Введите возраст\n"); scanf("%d",


Вариант 2. Программа

void main()
{
int x;
printf("Введите возраст\n");
scanf("%d", &x);

if ( x >= 25 && x <= 40 )
printf("Подходит");
else printf("Не подходит");
}

сложное условие

Слайд 40

Сложные условия Сложное условие – это условие, состоящее из нескольких простых

Сложные условия

Сложное условие – это условие, состоящее из нескольких простых условий

(отношений), связанных с помощью логических операций:
! – НЕ (not, отрицание, инверсия)
&& – И (and, логическое умножение, конъюнкция, одновременное выполнение условий)
|| – ИЛИ (or, логическое сложение, дизъюнкция, выполнение хотя бы одного из условий)
Простые условия (отношения)
< <= > >= == !=

равно

не равно

Слайд 41

Сложные условия Порядок выполнения сложных условий: выражения в скобках ! (НЕ,

Сложные условия

Порядок выполнения сложных условий:
выражения в скобках
! (НЕ, отрицание)
<, <=,

>, >=
==, !=
&& (И)
|| (ИЛИ)
Пример:
2 1 6 3 5 4
if ( !(a > b) || c != d && b == a)
{
...
}
Слайд 42

Истинно или ложно при a = 2; b = 3; c

Истинно или ложно при a = 2; b = 3; c

= 4;
!(a > b)
a < b && b < c
!(a >= b) || c == d
a < c || b < c && b < a
a > b || !(b < c)
Для каких значений x истинны условия:
x < 6 && x < 10
x < 6 && x > 10
x > 6 && x < 10
x > 6 && x > 10
x < 6 || x < 10
x < 6 || x > 10
x > 6 || x < 10
x > 6 || x > 10

Сложные условия

1

1

0

(-∞, 6)


(6, 10)

(10, ∞)

(-∞, 10)

(-∞, 6) ∪ (10,∞)

(-∞, ∞)

(6, ∞)

x < 6

x > 10

x < 10

x > 6

1

1

Слайд 43

Задания "4": Ввести номер месяца и вывести название времени года. Пример:

Задания

"4": Ввести номер месяца и вывести название времени года.
Пример:
Введите номер

месяца:
4
весна
"5": Ввести возраст человека (от 1 до 150 лет) и вывести его вместе с последующим словом "год", "года" или "лет".
Пример:
Введите возраст: Введите возраст:
24 57
Вам 24 года Вам 57 лет
Слайд 44

Программирование на языке Си Тема 6. Циклы © К.Ю. Поляков, 2007

Программирование на языке Си

Тема 6. Циклы

© К.Ю. Поляков, 2007

Слайд 45

Циклы Цикл – это многократное выполнение одинаковой последовательности действий. цикл с

Циклы

Цикл – это многократное выполнение одинаковой последовательности действий.
цикл с известным числом

шагов
цикл с неизвестным числом шагов (цикл с условием)
Задача. Вывести на экран квадраты и кубы целых чисел от 1 до 8 (от a до b).
Особенность: одинаковые действия выполняются 8 раз.
Слайд 46

Алгоритм начало i, i2, i3 конец нет да i i =

Алгоритм

начало

i, i2, i3

конец

нет

да

i <= 8?

i = 1;

i = i + 1;

i2

= i * i;
i3 = i2 * i;

задать начальное значение переменной цикла

проверить, все ли сделали

вычисляем квадрат и куб

вывод результата

перейти к следующему i

Слайд 47

Алгоритм (с блоком "цикл") начало i, i2, i3 конец i2 =

Алгоритм (с блоком "цикл")

начало

i, i2, i3

конец

i2 = i * i;
i3 =

i2 * i;

i = 1,8

блок "цикл"

тело цикла

Слайд 48

Программа void main() { int i, i2, i3; for (i=1; i

Программа

void main()
{
int i, i2, i3;
for (i=1; i<=8; i++)
{
i2

= i*i;
i3 = i2*i;
printf("%4d %4d %4d\n", i, i2, i3);
}
}

for (i=1; i<=8; i++)
{
i2 = i*i;
i3 = i2*i;
printf("%4d %4d %4d\n", i, i2, i3);
}

переменная цикла

начальное значение

конечное значение

изменение на каждом шаге:
i=i+1

ровные столбики

цикл работает, пока это условие верно

цикл

начало цикла

конец цикла

заголовок цикла

for (i=1; i<=8; i++)

i2 = i*i;
i3 = i2*i;
printf("%4d %4d %4d\n", i, i2, i3);

тело цикла

Слайд 49

Цикл с уменьшением переменной Задача. Вывести на экран квадраты и кубы

Цикл с уменьшением переменной

Задача. Вывести на экран квадраты и кубы целых

чисел от 8 до 1 (в обратном порядке).
Особенность: переменная цикла должна уменьшаться.
Решение:

for ( )
{
i2 = i*i;
i3 = i2*i;
printf("%4d %4d %4d\n", i, i2, i3);
}

i = 8; i >= 1; i --

Слайд 50

Цикл с переменной for (начальные значения; условие продолжения цикла; изменение на

Цикл с переменной

for (начальные значения;
условие продолжения цикла;
изменение на каждом

шаге)
{
// тело цикла
}

Примеры:

for (a = 2; a < b; a+=2) { ... }

for (a = 2, b = 4; a < b; a+=2) { ... }

for (a = 1; c < d; x++) { ... }

for (; c < d; x++) { ... }

for (; c < d; ) { ... }

Слайд 51

Цикл с переменной Особенности: условие проверяется в начале очередного шага цикла,

Цикл с переменной

Особенности:
условие проверяется в начале очередного шага цикла, если оно

ложно цикл не выполняется;
изменения (третья часть в заголовке) выполняются в конце очередного шага цикла;
если условие никогда не станет ложным, цикл может продолжаться бесконечно (зацикливание)
если в теле цикла один оператор, скобки {} можно не ставить:

for(i=1; i<8; i++) { i--; }

for (i = 1; i < 8; i++) a += b;

Слайд 52

for (i=8; i>=1; i--) printf("Привет"); printf("i=%d", i); Цикл с переменной Особенности:

for (i=8; i>=1; i--) printf("Привет");
printf("i=%d", i);

Цикл с переменной

Особенности:
после выполнения цикла во

многих системах устанавливается первое значение переменной цикла, при котором нарушено условие:

for (i=1; i<=8; i++) printf("Привет");
printf("i=%d", i);

i=9

i=0

Слайд 53

Сколько раз выполняется цикл? a = 1; for(i=1; i a =

Сколько раз выполняется цикл?

a = 1;
for(i=1; i<4; i++) a++;

a = 4

a

= 1; b=2;
for(i=3; i >= 1; i--)a += b;

a = 7

a = 1;
for(i=1; i >= 3; i--)a = a+1;

a = 1

a = 1;
for(i=1; i<= 4; i--)a ++;

зацикливание

a = 1;
for(i=1; i<4; i++) a = a+i;

a = 7

Слайд 54

Задания "4": Ввести a и b и вывести квадраты и кубы

Задания

"4": Ввести a и b и вывести квадраты и кубы чисел

от a до b.
Пример:
Введите границы интервала:
4 6
4 16 64
5 25 125
6 36 216
"5": Вывести квадраты и кубы 10 чисел следующей последовательности: 1, 2, 4, 7, 11, 16, …
Пример:
1 1 1
2 4 8
4 16 64
...
46 2116 97336
Слайд 55

Программирование на языке Си Тема 7. Циклы с условием © К.Ю. Поляков, 2007

Программирование на языке Си

Тема 7. Циклы с условием

© К.Ю. Поляков, 2007

Слайд 56

Цикл с неизвестным числом шагов Пример: Отпилить полено от бревна. Сколько

Цикл с неизвестным числом шагов

Пример: Отпилить полено от бревна. Сколько раз

надо сделать движения пилой?
Задача: Ввести целое число (<2000000) и определить число цифр в нем.
Идея решения: Отсекаем последовательно последнюю цифру, увеличиваем счетчик.
Проблема: Неизвестно, сколько шагов надо сделать.
Решение: Надо остановиться, когда n = 0, т.е. надо делать "пока n != 0".
Слайд 57

Алгоритм начало count конец нет да n != 0? count =

Алгоритм

начало

count

конец

нет

да

n != 0?

count = 0;

count = count + 1;
n =

n / 10;

обнулить счетчик цифр

ввод n

выполнять "пока n != 0"

Слайд 58

Программа void main() { long n; int count; printf("Введите целое число\n");

Программа

void main()
{
long n;
int count;
printf("Введите целое число\n");
scanf("%ld", &n);
count = 0;
while (n !=

0)
{
count ++;
n = n / 10;
}
printf("В числе %ld нашли %d цифр", n, count);
}

n1 = n;

n1,

выполнять "пока n != 0"

long – длинное целое число (± 2147483647)
%ld – формат ввода и вывода длинных чисел

, n1;

Слайд 59

Цикл с условием while ( условие ) { // тело цикла

Цикл с условием

while ( условие )
{
// тело цикла


}

Особенности:
можно использовать сложные условия:
если в теле цикла только один оператор, скобки {} можно не писать:

while ( a < b && b < c ) { ... }

while ( a < b ) a ++;

Слайд 60

Цикл с условием Особенности: условие пересчитывается каждый раз при входе в

Цикл с условием

Особенности:
условие пересчитывается каждый раз при входе в цикл
если условие

на входе в цикл ложно, цикл не выполняется ни разу
если условие никогда не станет ложным, программа зацикливается

a = 4; b = 6;
while ( a > b ) a = a– b;

a = 4; b = 6;
while ( a < b ) d = a + b;

Слайд 61

Сколько раз выполняется цикл? a = 4; b = 6; while

Сколько раз выполняется цикл?

a = 4; b = 6;
while ( a

< b ) a ++;

2 раза
a = 6

a = 4; b = 6;
while ( a < b ) a += b;

1 раз
a = 10

a = 4; b = 6;
while ( a > b ) a ++;

0 раз
a = 4

a = 4; b = 6;
while ( a < b ) b = a - b;

1 раз
b = -2

a = 4; b = 6;
while ( a < b ) a --;

зацикливание

Слайд 62

Замена for на while и наоборот for( i=1; i { //

Замена for на while и наоборот

for( i=1; i<=10; i++)
{

// тело цикла
}

i = 1;
while ( i <= 10 ) {
// тело цикла
i ++;
}

for ( i=a; i>=b; i--)
{
// тело цикла
}

i = a;
while ( i >= b ) {
// тело цикла
i --;
}

Слайд 63

Задания "4": Ввести целое число и найти сумму его цифр. Пример:

Задания

"4": Ввести целое число и найти сумму его цифр.
Пример:
Введите целое

число:
1234
Сумма цифр числа 1234 равна 10.
"5": Ввести целое число и определить, верно ли, что в его записи есть две одинаковые цифры.
Пример:
Введите целое число: Введите целое число:
1234 1224
Нет. Да.
Слайд 64

Последовательности Примеры: 1, 2, 3, 4, 5, … 1, 2, 4,

Последовательности

Примеры:
1, 2, 3, 4, 5, …
1, 2, 4, 7, 11, 16,


1, 2, 4, 8, 16, 32, …

an = n

a1 = 1, an+1 = an+1

a1 = 1, an+1 = an + n

an = 2n-1

a1 = 1, an+1 = 2an

b1 = 1, bn+1 = bn+1

c1 = 2, cn+1 = 2cn

Слайд 65

Последовательности Задача: найти сумму всех элементов последовательности, которые по модулю больше

Последовательности

Задача: найти сумму всех элементов последовательности,
которые по модулю больше

0,001:

Элемент последовательности (начиная с №2):

b = b+1;

c = 2*c;

z = -z;

Слайд 66

Алгоритм начало S конец нет да |a| > 0.001? S =

Алгоритм

начало

S

конец

нет

да

|a| > 0.001?

S = S + a;

S = 0; b =

1; c = 2; z = -1; a = 1;

начальные значения

a = z*b/c;
b = b + 1; c = 2*c; z = -z;

первый элемент

a = 1;

S = 0;

новый элемент

изменение

Слайд 67

Программа #include void main() { int b, c, z; float S,

Программа

#include
void main()
{
int b, c, z;
float S, a;
S

= 0; z = -1;
b = 1; c = 2; a = 1;
while (fabs(a) > 0.001) {
S += a;
a = z * b / c;
z = - z;
b ++;
c *= 2;
}
printf ("S = %10.3f", S);
}

переход к следующему слагаемому

начальные значения

увеличение суммы

расчет элемента последовательности

математические функции

fabs – модуль вещественного числа

, b;

чтобы не было округления при делении

Слайд 68

Задания "4": Найти сумму элементов последовательности с точностью 0,001: Ответ: S

Задания

"4": Найти сумму элементов последовательности с точностью 0,001:
Ответ:
S = 1.157
"5": Найти

сумму элементов последовательности с точностью 0,001:
Ответ:
S = 1.220
Слайд 69

Цикл с постусловием Задача: Ввести целое положительное число ( Проблема: Как

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

Задача: Ввести целое положительное число (<2000000) и определить число

цифр в нем.
Проблема: Как не дать ввести отрицательное число или ноль?
Решение: Если вводится неверное число, вернуться назад к вводу данных (цикл!).
Особенность: Один раз тело цикла надо сделать в любом случае ⇒ проверку условия цикла надо делать в конце цикла (цикл с постусловием).

Цикл с постусловием – это цикл, в котором проверка условия выполняется в конце цикла.

Слайд 70

Цикл с постусловием: алгоритм начало конец нет да n тело цикла

Цикл с постусловием: алгоритм

начало

конец

нет

да

n <= 0?

тело цикла

условие

блок "типовой процесс"

ввод n

основной

алгоритм
Слайд 71

Программа void main() { long n; do { printf("Введите положительное число\n");

Программа

void main()
{
long n;
do {
printf("Введите положительное число\n");
scanf("%ld", &n);

}
while ( n <= 0 );
... // основной алгоритм
}

условие

Особенности:
тело цикла всегда выполняется хотя бы один раз
после слова while («пока…» ) ставится условие продолжения цикла

Слайд 72

Сколько раз выполняется цикл? a = 4; b = 6; do

Сколько раз выполняется цикл?

a = 4; b = 6;
do { a

++; } while (a <= b);

3 раза
a = 7

a = 4; b = 6;
do { a += b; } while ( a <= b );

1 раз
a = 10

a = 4; b = 6;
do { a += b; } while ( a >= b );

зацикливание

a = 4; b = 6;
do b = a - b; while ( a >= b );

2 раза
b = 6

a = 4; b = 6;
do a += 2; while ( a >= b );

зацикливание

Слайд 73

Задания (с защитой от неверного ввода) "4": Ввести натуральное число и

Задания (с защитой от неверного ввода)

"4": Ввести натуральное число и определить,

верно ли, что сумма его цифр равна 10.
Пример:
Введите число >= 0: Введите число >= 0:
-234 1233
Нужно положительное число. Нет
Введите число >= 0:
1234
Да
"5": Ввести натуральное число и определить, какие цифры встречаются несколько раз.
Пример:
Введите число >= 0: Введите число >= 0:
2323 1234
Повторяются: 2, 3 Нет повторов.
Слайд 74

Программирование на языке Си Тема 8. Оператор выбора © К.Ю. Поляков, 2007

Программирование на языке Си

Тема 8. Оператор выбора

© К.Ю. Поляков, 2007

Слайд 75

Оператор выбора Задача: Ввести номер месяца и вывести количество дней в

Оператор выбора

Задача: Ввести номер месяца и вывести количество дней в этом

месяце.
Решение: Число дней по месяцам:
28 дней – 2 (февраль)
30 дней – 4 (апрель), 6 (июнь), 9 (сентябрь), 11 (ноябрь)
31 день – 1 (январь), 3 (март), 5 (май), 7 (июль), 8 (август), 10 (октябрь), 12 (декабрь)
Особенность: Выбор не из двух, а из нескольких вариантов в зависимости от номера месяца.
Слайд 76

Алгоритм начало конец оператор выбора ни один вариант не подошел ввод

Алгоритм

начало

конец

оператор выбора

ни один вариант не подошел

ввод M

да

нет

M = 1?

D = 31;

нет

M

= 2?

D = 28;

да

нет

M = 12?

D = 31;

да

вывод D

ошибка

Слайд 77

Программа void main() { int M, D; printf("Введите номер месяца:\n"); scanf("%d",

Программа

void main()
{
int M, D;
printf("Введите номер месяца:\n");
scanf("%d", &M);
switch

( M ) {
case 2: D := 28;
case 4: case 6: case 9: case 11: D := 30;
case 1: case 3: case 5: case 7:
case 8: case 10: case 12:
D := 31;
default: D := -1;
}
if (D > 0)
printf("В этом месяце %d дней.", D);
else printf("Неверный номер месяца");
}

ни один вариант не подошел

break;

break;

break;

выйти из
switch

Слайд 78

Оператор выбора Задача: Ввести букву и вывести название животного на эту

Оператор выбора

Задача: Ввести букву и вывести название животного на эту букву.


Особенность: выбор по символьной величине.

void main()
{
char c;
printf("Введите первую букву названия животного:\n");
c = getch();
switch ( c ) {
case 'а': printf("Антилопа"); break;
case 'б': printf("Барсук"); break;
case 'в': printf("Волк"); break;
default: printf("Не знаю я таких!");
}
}

Слайд 79

Оператор выбора Особенности: после switch может быть имя переменной или арифметическое

Оператор выбора

Особенности:
после switch может быть имя переменной или арифметическое выражение целого

типа (int, long)
или символьного типа (char)
нельзя ставить два одинаковых значения:

switch ( i+3 ) {
case 1: a = b; break;
case 2: a = c;
}

switch ( x ) {
case 1: a = b; break;
case 1: a = c;
}

Слайд 80

Задания (с защитой от неверного ввода) "4": Ввести номер месяца и

Задания (с защитой от неверного ввода)

"4": Ввести номер месяца и вывести

количество дней в нем, а также число ошибок при вводе.
Пример:
Введите номер месяца: Введите номер месяца:
-2 2
Введите номер месяца: В этом месяце 28 дней.
11 Вы вводили неверно 0 раз.
В этом месяце 30 дней.
Вы вводили неверно 1 раз.
"5": Ввести номер месяца и номер дня, вывести число дней, оставшихся до Нового года.
Пример:
Введите номер месяца:
12
Введите день:
25
До Нового года осталось 6 дней.