Sąlygos ir pasirinkimas
Iki šiol programa vykdė visas eilutes paeiliui. Bet tikros programos turi pasirinkti: jei naudotojas pilnametis — leisk įeiti, kitaip — ne. Tai pasirinkimo principas, antras struktūrinio programavimo blokas.
Palyginimo operatoriai
Sąlyga yra teiginys, kuris būna teisingas arba klaidingas:
==lygu (atkreipk dėmesį — du lygybės ženklai!)!=nelygu<mažiau,>daugiau<=mažiau arba lygu,>=daugiau arba lygu
Dažna klaida.
=priskiria reikšmę, o==lygina.if (x = 5)yra klaida; reikiaif (x == 5).
if ir else
#include <stdio.h>
int main(void) {
int amzius;
printf("Kiek tau metu? ");
scanf("%d", &amzius);
if (amzius >= 18) {
printf("Esi pilnametis.\n");
} else {
printf("Dar nepilnametis.\n");
}
return 0;
}
Jei sąlyga skliaustuose teisinga — vykdomas pirmas { } blokas; kitaip — else blokas.
Kelios šakos su else if
if (pazymys >= 9) {
printf("Puiku!\n");
} else if (pazymys >= 7) {
printf("Gerai.\n");
} else if (pazymys >= 5) {
printf("Patenkinamai.\n");
} else {
printf("Reikia pasitempti.\n");
}
Programa tikrina sąlygas iš viršaus į apačią ir įvykdo pirmą tinkamą šaką.
Jungtinės sąlygos
&&— ir (abi sąlygos turi būti teisingos)||— arba (bent viena teisinga)!— ne (apverčia reikšmę)
if (amzius >= 18 && turiBilieta) {
printf("Praeik.\n");
}
switch — daug variantų
Kai lygini vieną kintamąjį su daug konkrečių reikšmių, switch aiškesnis už ilgą else if grandinę:
int diena = 3;
switch (diena) {
case 1: printf("Pirmadienis\n"); break;
case 2: printf("Antradienis\n"); break;
case 3: printf("Treciadienis\n"); break;
default: printf("Kita diena\n");
}
Nepamiršk
break. Be jo vykdymas „nukrenta" į kitącaseir vykdo jį taip pat. Tai dažna klaida pradedantiesiems.
Trikčių sprendimas
Sąlyga visada teisinga — galbūt parašei = vietoj ==.
switch vykdo kelis case — pamiršai break.
Else nesusieja su tuo if, kuriuo tikiesi — naudok { } skliaustus aplink šakas, kad būtų aišku.
Projektas CLion
Šios pamokos kodą įdėk į savo CLion projektą StructuredC. Žingsnis žemiau rodo pilną main.c turinį po pakeitimo — gali kopijuoti tiesiogiai į CLion ir paspausti žalią ▶ mygtuką.
Apibendrinimas
Išmokai priimti sprendimus su if, else if, else ir switch, jungti sąlygas su && ir ||. Tai pasirinkimo blokas.
Kitoje pamokoje — trečias ir paskutinis blokas: kartojimas su ciklais.
Pakeisk main.c — pažymio vertinimas
#include <stdio.h>
int main(void) {
int pazymys;
printf("Ivesk pazymi (1-10): ");
scanf("%d", &pazymys);
if (pazymys >= 9) {
printf("Puiku!\n");
} else if (pazymys >= 5) {
printf("Islaikyta.\n");
} else {
printf("Reikia pasitempti.\n");
}
return 0;
}
Pakeisk visą main.c turinį šiuo kodu. Programa įvertins įvestą pažymį.
Ką šis kodas daro:
scanfperskaito pažymį įpazymys.if (pazymys >= 9)— tikrina pirmą sąlygą; jei teisinga, vykdo jos bloką.else if (pazymys >= 5)— tikrinama tik tada, kai pirmoji buvo klaidinga.else— vykdoma, kai nė viena sąlyga netiko.
Svarbu: programa pasirenka pirmą tinkamą šaką ir likusias praleidžia. Naudok >=, ne =.