** Оператор if (условен оператор)
Операторът if се състои от 2 части - условие и тяло. if
е съставен оператор.
Пример:
if (area < 0)
cout << "Error: Negative area.\n";
[блок-схема]
Когато условието е вярно, се изпълнява тялото на оператора.
Ако условието е нарушено (не е вярно), се изпълнява следващия
оператор (след оператора if).
Тялото на if може да бъде друг оператор или блок.
Блок е група от оператори, оградени с къдрави (големи) скоби {}.
Пример:
if (area < 0)
{ cout << "Error: Negative area.\n";
return 1;
}
Блокът замества (се разглежда като) един оператор.
// area1.cpp
#include <iostream>
#include <cmath>
using namespace std;
int main()
{ double area;
cout << "Please enter the area of a square: ";
cin >> area;
if (area < 0)
{ cout << "Error: Negative area.\n";
return 1;
}
/* now we know that area is >= 0 */
double length = sqrt(area);
cout << "The side length of the square is "
<< length << "\n";
return 0;
}
** Оператор if/else (условен оператор)
Операторът if/else се състои от условие и две
алтернативи. if/else е съставен оператор.
Ако условието е вярно (true) се изпълнява първата
алтернатива.
Ако условието не е вярно (false), се изпълнява втората
алтернатива.
Пример:
if (area >= 0)
cout << "The side length is " << sqrt(area) << "\n";
else
cout << "Error: Negative area.\n";
Всяка алтернатива е оператор или блок.
[блок-схема]
Операторът if/else е по-добър избор в сравнение с две допълващи се условия:
if (area >= 0) /* complementary conditions */
cout << "The side length is " << sqrt(area) << "\n";
if (area < 0) /* complementary conditions */
cout << "Error: Negative area.\n";
// area2.cpp
#include <iostream>
#include <cmath>
using namespace std;
int main()
{ double area;
cout << "Please enter the area of a square: ";
cin >> area;
if (area >= 0)
cout << "The side length is " << sqrt(area) << "\n";
else
cout <<"Error: Negative area.\n";
return 0;
}
** Условна операция (операция за избор, selection operator)
Триаргументна операция, състояща се от условие и два израза.
Пример:
x >= 0 ? x : -x
Ако условието е вярно, се изпълнява втория аргумент, ако не е
вярно се изпълнява третия аргумент.
Операторът
y = x >= 0 ? x : -x;
е еквивалентен на
if (x >= 0) y = x;
else y = -x;
и присвоява на променливата y абсолютната
стойност на променливата x.
Израз (expression), операция (operator) |
Оператор
(statement) |
x >= 0 ? x : -x |
if (x >= 0) y = x; |
y = x |
y = x; |
-b + sqrt(d) |
-b + sqrt(d); |
** Операции за сравнения (relational operators)
C има 6 операции за сравнения:
|
|
|
|
|
|
|
|
|
равно на |
|
Внимавайте да не напишете => Двата знака са в реда на произнасяне. |
|
|
|
|
|
равно на |
|
Внимавайте да не
напишете =< Двата знака са в реда на произнасяне. |
|
|
|
Не бъркайте с = , което е операция присвояване! |
|
(различно от) |
|
Все едно ! минава през (задрасква) знака
за равенство. |
Сравняване на числа в С++ е по правилата в математиката.
c | a | r |
t | r |
u | c | k |
c | a | r |
c | a | r | g | o |
c | a | r | g | o |
c | a | t | h | o | d | e |
"car" < "truck", "car" < "cargo",
"cargo" < "cathode"
0-31 are control codes, for example "/n" (newline) has ASCII code 10.
32: 33:!
34:" 35:# 36:$ 37:% 38:&
39:' 40:( 41:)
42:* 43:+ 44:, 45:- 46:.
47:/ 48:0 49:1 50:2 51:3
52:4 53:5 54:6 55:7 56:8
57:9 58:: 59:; 60:< 61:=
62:> 63:? 64:@ 65:A
66:B 67:C 68:D 69:E 70:F 71:G
72:H 73:I 74:J 75:K 76:L
77:M 78:N 79:O 80:P 81:Q
82:R 83:S 84:T 85:U 86:V
87:W 88:X 89:Y 90:Z 91:[
92:\ 93:] 94:^ 95:_ 96:`
97:a 98:b 99:c 100:d 101:e
102:f 103:g 104:h 105:i 106:j 107:k 108:l 109:m 110:n
111:o
112:p 113:q 114:r 115:s 116:t 117:u 118:v 119:w 120:x
121:y
122:z 123:{ 124:| 125:} 126:~ 127: 128:Ђ 129:Ѓ
130:‚ 131:ѓ
132:„ 133:… 134:† 135:‡ 136:€ 137:‰ 138:Љ 139:‹ 140:Њ
141:Ќ
142:Ћ 143:Џ 144:ђ 145:‘ 146:’ 147:“ 148:” 149:• 150:–
151:—
152:� 153:™ 154:љ 155:› 156:њ 157:ќ 158:ћ 159:џ
160: 161:Ў
162:ў 163:Ј 164:¤ 165:Ґ 166:¦ 167:§ 168:Ё 169:© 170:Є
171:«
172:¬ 173: 174:® 175:Ї 176:° 177:± 178:І 179:і
180:ґ 181:µ
182:¶ 183:· 184:ё 185:№ 186:є 187:» 188:ј 189:Ѕ 190:ѕ
191:ї
192:А 193:Б 194:В 195:Г 196:Д 197:Е 198:Ж 199:З 200:И
201:Й
202:К 203:Л 204:М 205:Н 206:О 207:П 208:Р 209:С 210:Т
211:У
212:Ф 213:Х 214:Ц 215:Ч 216:Ш 217:Щ 218:Ъ 219:Ы 220:Ь
221:Э
222:Ю 223:Я 224:а 225:б 226:в 227:г 228:д 229:е 230:ж
231:з
232:и 233:й 234:к 235:л 236:м 237:н 238:о 239:п 240:р
241:с
242:т 243:у 244:ф 245:х 246:ц 247:ч 248:ш 249:щ 250:ъ
251:ы
252:ь 253:э 254:ю 255:
Първите 32 символа (от 0 до 31) са управляващи символи и нямат
стандартен графичен образ.
Символите от 127 до 255 са различни в различните езици.
Мястото на българската азбука е различно в зависимост от типа на
кодирането - в таблицата е даден стандарта Windows-1251.
** Проверка за валидност на входните данни
Проверка на входа е приложение на оператора if, което
проверява дали потребителят е дал разумен вход.
Пример:
double area;
cin >> area;
Ако потребителят напише "five" и натисне return, то cin
ще се окаже в състояние грешка (fail) и променливата area
ще остане с непроменена (вероятно неопределена) стойност.
Пример:
// area3.cpp
#include <iostream>
#include <cmath>
using namespace std;
int main()
{ double area;
cout << "Please enter the area of a square: ";
cin >> area;
if (cin.fail())
{ cout << "Error: Bad input\n";
return 1;
}
if (area < 0)
{ cout << "Error: Negative area.\n";
return 1;
}
cout << "The side length is " << sqrt(area) << "\n";
return 0;
}
Други стратегии за проверка на състоянието на cin.
Пример:
if (cin)
/* the stream did not fail */
else
/* the stream failed */
Операцията входен поток cin >> x има стойност cin.
Това позволява да се навържат операциите >>.
Пример:
cin >> x >> y /* което означава (cin >> x) >> y */
Може да се използва израза cin >> x като условие
в оператора if.
Пример:
if (cin >> x) ...
** Оператор while (оператор за цикъл)
Пример:
Внасяме 10000 лв. в банкова сметка с 5% год. лихва при месечно
олихвяване. След колко години сумата в сметката ще се удвои?
Месец | Сума | Пресмятане |
0 | 10000.00 | |
1 | 10050.00 | =10000.00*1.005 |
2 | 10100.25 | =10050.00*1.005 |
3 | 10150.75 | =10100.25*1.005 |
4 | 10201.51 | =10150.75*1.005 |
.. | ... | ... |
1. Започваме с таблицата:
(int
month = 0; double balance = 10000;)
Месец | Сума |
0 | 10000 |
Цикълът е блок от код, който може да се изпълнява многократно.
Цикълът се контролира от условие, което се проверява всеки път
през цикъла.
Блокът от код се изпълнява докато условието остава вярно.
Условието на цикъл while се проверява преди всяко
изпълнение на кода.
Пример:
while (balance < 2 * initial_balance)
{ balance = balance * ( 1 + rate / 100);
month++;
}
[блок-схема]
Пример:
// doublinv.cpp
#include <iostream>
using namespace std;
int main()
{ double rate = 5;
double initial_balance = 10000;
double balance = initial_balance;
int month = 0;
while (balance < 2 * initial_balance)
{ balance = balance * (1 + rate / 100);
month++;
}
int years = month/12;
cout << "The investment doubled after "
<< years << " years.\n";
return 0;
}
Когато четем входа от конзолата, можем да затворим входния поток
ръчно - Ctrl + Z (Windows), CTRL + D (Unix).
Опит за четене от затворен входен поток предизвиква грешка и
променя състоянието на cin в "грешка" (fail).
Пример:
// maxtemp.cpp
#include <iostream>
using namespace std;
int main()
{ double next;
double highest;
cout << "Please enter the temperature values:\n";
if (cin >> next) highest = next;
else
{ cout << "No data!\n";
return 1;
}
while (cin >> next)
if (next > highest) highest = next;
cout << "The highest temperature is " << highest << "\n";
return 0;
}
** Булев тип данни
Тип данни bool - булев или логически тип, съдържа
две константи - true и false.
Стойност на булева променлива е едната от тези две стойности.
Пример:
bool more = true;
while (more)
{ cin >> next;
if (cin.fail()) more = false;
else
{ // process next
}
}
Стойността на всяка операция от тип сравнение е от булев тип.
Пример:
int k = 5;
bool positive = (k > 0);
Не пишете (лош стил на програмиране):
вместо (добър стил на програмиране):while(more == false) /* don't */
while(more != true) /* don't */
while(more)