Администратор
Уровень 999
Сообщений: 2104
Дата: Понедельник, 04.06.2012, 09:42:50 | Сообщение # 1 |
Offline
|
До этого наши программы имели линейную структуру, т.е. всегда выполнялось каждое действие, независимо ни от чего. Сегодня мы рассмотрим возможности ветвления хода программы. Разберём такой пример - нам нужно найти действительные корни квадратного трёхчлена. Случаи, когда D > 0 и D = 0 мы ещё можем объединить в один, так как, по сути, корня два, но вот для D < 0 действительных корней нет и нам нужно отработать ситуацию отдельно. Сделаем так:
Code #include <math.h> // В этом файле определены различные // математические функции, мы рассмотрим их поздней // пока же мы используем только функцию для // вычисления квадратного корня - sqrt #include <stdio.h> #include <conio.h> void main() {float a, b, c, D; // Объявим и введём переменные puts("Enter a:"); scanf("%e", &a); puts("Enter b:"); scanf("%e", &b); puts("Enter c:"); scanf("%e", &c); D = b*b - 4*a*c; if(D >= 0) // Внутри конструкции if помещаем условие и если оно **// верно, то выполняется кусок кода заключённый в фигурные //скобки printf("D = %f\nx1 = %f\nx2 = %f\n", D, (-b+sqrt(D))/(2*a), (-b-sqrt(D))/(2*a)); } else // Это необязательный блок, который будет выполнен, если // условие не соблюдено puts("D < 0"); // Как видим, если необходимо выполнить лишь // одну операцию, скобки можно опустить getch(); } В конструкции if мы использовали условие - ">=", существует ещё - "<=", а также знаки строгого неравенства ">" и "<". Если необходимо проверить равенство двух чисел можно использовать "==", а знак "!=" даст положительный результат, если числа не равны. Задание 1 - модифицировать программу так, чтобы она отдельно рассматривала случай, когда D = 0. По сути операции условия возвращают логическое значение (true/false) и его можно сохранить в переменной типа bool, и использовать в дальнейшем например так
Code #include <stdio.h> #include <conio.h> void main() {int a; scanf("%d", &a); bool b = (a == 0); if(b) puts("Zero!"); else puts("Something new..."); getch(); } Также существует несколько булевых операций, помогающих расширить возможности if. 1) (bool&&bool) - возвращает true если оба значения true, иначе false 2) (bool||bool) - возвращает true если хотя бы одно значение true, иначе false 3)(!bool) - меняет значение на противоположное, true->false, а false->true
if может принимать и значения других переменных. 0 будет считаться false, а всё остальное true
Code (true&&true) = true (true&&false) = false (false&&false) = false (true||true) = true (true||false) = true (false||false) = true !true = false !false = true
if((1==2)||(5!=6)) ** ... // Этот код будет выполняться ... } if(!(1==1)) **... // А этот нет ... } Задание 2 - напишите тест с подсчетом балов
Подпись пользователя
|
![Ранг 10](/.s/rnk/3/rank10.gif) |
| |