Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

книги / Язык Си

..pdf
Скачиваний:
6
Добавлен:
20.11.2023
Размер:
7.64 Mб
Скачать

Задача 1. Два конверта прямоугольной формы заданы сторо­ нам Ы , Н1 и L2, Н2. Выяснить, можно ли вложить один конверт в другой.

Всего возможно четыре варианта вложения конвертов:

Н2

Н2

HI

Н1

#include<conio.h>

 

 

 

 

 

 

 

#include<stdio.h>

 

 

 

 

 

 

 

main()

 

 

 

 

 

 

 

 

{int L1,H1,L2,H2;

 

 

 

 

1:");

 

puts("Задайте

стороны конверта

 

scant("%d%d",&L1,&H1);

 

2:");

 

puts("Задайте

стороны конверта

 

scant("%d%d",&L2,&H2);

 

 

 

 

if(Ll<L2 && H1<H2)

//первый конверт во втором

puts("YES");

&&

H1<L2)

//первый

конверт

во

else if(L1<H2

puts("YES");

 

 

 

 

//втором

 

 

 

H2<H1)

//второй

конверт

в

else if(L2<L1

SC SL

puts("YES");

 

 

 

 

//первом

 

 

 

ttCM

V

1—t

 

 

 

 

else if(L2<H1

&&

//второй

конверт

в

 

//первом

puts("YES");

else //остальные варианты невозможны puts("NO");

getch(); return 0;

}

Задача 2. Напечатать максимальное число из трех заданных.

Здесь просто нужно последовательно перебрать все варианты.

#include<stdio.h>

#include<conio.h>

main()

{int a,b,c; puts("Vvedite a,b,c:");

scant(M%d%d%d",&a, &b,&c);

if(a>b && a>c)

printf ("MAXIMUM: %d",a) ; else

if(b>c)

printf("MAXIMUM:%d",b); else printf("MAXIMUM:%d",c) ;

getch(); return 0;

}

Задача 3. Определить, является ли заданное число четным или нечетным.

Если число делится на два без остатка, то это четное число. Таким образом, надо применить к числу операцию вычисления остатка от деления целых чисел % и через условие if проанализи­ ровать, равен ли остаток нулю: если да, то число четное; если нет, то нечетное.

#include<stdio.h>

#include<conio.h>

//введите цифру //считываем цифру

main() {int a;

puts("Введите целое число:"); scant("%d",&a);

if(a==0)

puts("Вы ввели О"); else

if(a%2 == 0)

printf("%d четное число",a); else

printf("%d нечетное число",a); getch();

return 0;

}

Задача 4. Определить, какую цифру ввел пользователь.

#include<stdio.h>

#include<conio.h>

main() {int a;

puts("Input digit"); scanf("%d",&a); switch(a)

{case 0: puts("Zero"); break; case 1: puts("One"); break; case 2 : puts("Two"); break; case 3: puts("Three"); break; case 4: puts("Four"); break; case 5: puts("Five"); break; case 6: puts("Six"); break; case 7: puts("Seven"); break; case 8: puts("Eight"); break; case 9: puts("Nine"); break; default: puts("Unknown digit"!

}

getch(); return 0;

1.Выучить работу условного оператора if-else.

2.Выучить все операции отношения и логические операции.

3.Набрать все рассмотренные программы и проверить их на разные значения переменных.

4.Проверить, как будут работать программы с оператором выбора switch, если из его конструкции убрать оператор break.

5.Написать эти программы, заменив использование оператора switch оператором if-else.

6.Написать программу для вычисления наименьшего и наи­ большего углов треугольника. Треугольник задан через координа­ ты вершин, которые пользователь вводит с консоли.

ЛЕКЦИЯ 5. ЦИКЛЫ

5.1. Оператор цикла w h ile (цикл с предусловием)

Общий вид оператора while следующий:

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

Блок-схема цикла while имеет вид

Условие проверяется в начале работы цикла. Цикл выполняет­ ся, пока условие принимает значение «истина». Когда же условие примет значение «ложь», программа передаст управление сле­ дующей за телом цикла строке кода. Условие, как и в операторе ifelse, имеет тот же смысл и выполняется по тем же правилам.

Тело цикла - это одно или несколько действий (далее опера­ торы), которые нужно выполнять, пока условие истинно. Таким образом, телом цикла может быть один оператор или блок опера­ торов (заключается в фигурные скобки {}).

Пример. Тело цикла - один оператор.

int i=0;

while(i<5)

i++;

printf ("%d\n", i) ;

Результат на экране:

5

Здесь строка printf("% d\ni); не относится к циклу и будет выполнена только тогда, когда цикл while отработает до конца, т.е. условие i < 5 станет ложным. Если мы хотим, чтобы к телу цикла относилось более одного оператора, то эти операторы необходимо заключить в фигурные скобки {}.

Пример. Тело цикла - блок операторов.

int i=0; while(i<5)

{i++;

printf ("%d\n",i) ;

}

Результат на экране: 1

2

3

4

5

При использовании цикла while часто сразу после круглых скобок, в которых записывается условие окончания цикла, ставят точку с запятой, что приводит к зависанию цикла. Рассмотрим этот случай.

int i=0;

while(i<5); //ОШИБКА!

{i++; printf("%d\n" ,i);

}

В данном случае работает правило: выражения, входящие в тело цикла, ВСЕГДА должны заканчиваться точкой с запятой (ес­ ли это не новое условие или новый цикл). Поскольку сразу после условия стоит точка с запятой, компилятор считает, что это и есть оператор тела цикла, а операторы в фигурных скобках уже к телу цикла не относятся. Однако между условием и точкой с запятой нет никакого выражения (пустой прямоугольник на блок-схеме). Таким образом, в теле цикла нет изменения параметра цикла /, т.е. / всегда будет оставаться равным 0 и условие i < 5 всегда будет истинным, следовательно, цикл будет выполняться до бесконечно­ сти (программа зависнет).

Рассмотрим несколько примеров использования цикла while.

Пример. Найти сумму всех положительных двузначных чи­

сел.

#include<stdio.h>

#include<conio.h>

main()

{int i=10,s;

s=0;

while(i<100)

{s+=i;

//прибавляем к накопленной сумме

 

//текущее число

i++; //переходим к следующему числу

}

printf("%d",s);

getch();

return 0;

}

Обратим внимание на важный момент при решении задач на накопление суммы или произведения. Часто забывают задать на­ чальное значение переменной, в которую будет накапливаться сумма или произведение. Вспомним, что в неинициализированной переменной обычно хранится какое-то случайное большое число, поэтому для накопления суммы начальное значение переменной нужно задать самим. Обычно для накопления суммы это 0 (или задать другое значение, к которому будут плюсоваться все осталь­ ные числа), для накопления произведения это 1. Закомментируйте строку s = 0; и увидите, что ответ сразу стал неправильным.

Пример. Найти произведение всех чисел от 5 до 17 включи­ тельно.

#include<stdio.h>

#include<conio.h>

main()

{int i=5 ,p;

P=l;

while(i<18)

{p*=i; //умножаем накопленное произведение //на текущее число

i++; //переходим к следующему числу

}

printf(n%dM,р);

getch();

return 0;

}

Пример. Найти все числа, кратные 3, в диапазоне от 10 до 100 включительно.

#include<conio.h>

#include<stdio.h>

main()

{int i=10;

while(i<=100)

{if(i%3==0)

printf("%d\nn,i); i++;

}

getch();

return 0;

}

//если число кратно 3

//печатаем его

//переходим на

//следующее число

Отметим, что /++ не принадлежит условию if и вьшолняется в любом случае, тогда как printf вьшолняется, только если условие истинно.

Пример. Вычислить сумму ряда 1+ — + — +

.

2

3

п

#include<conio.h>

 

 

#include<stdio.h>

 

 

main()

 

 

{int n,i;

 

 

float S;

 

 

puts("Введите целое число");

с консоли число

scanf("%d",&n); //считываем

//членов ряда

 

S=l; //помещаем первый член ряда в накопленную //сумму

i=2; //начинаем суммирование со второго члена while(i<=n)

{S+=l. / i ; i++;

}

printf("S=%f",S) ; getch() ;

return 0;

}