книги / Язык Си
..pdfЗадача 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;
}