Ciklai ir kartojimas
Kompiuteriai puikiai kartoja tą patį veiksmą tūkstančius kartų be klaidų. Kartojimo (ciklo) principas yra trečias ir paskutinis struktūrinio programavimo blokas. Su trimis blokais — eilės tvarka, pasirinkimu ir kartojimu — gali sukurti bet kokią programą.
while ciklas
while kartoja bloką tol, kol sąlyga teisinga:
#include <stdio.h>
int main(void) {
int i = 1;
while (i <= 5) {
printf("%d\n", i);
i = i + 1; // svarbu! kitaip ciklas niekada nesibaigs
}
return 0;
}
Išvestis: skaičiai nuo 1 iki 5. Trys dalys:
- Pradinė reikšmė —
int i = 1; - Sąlyga —
i <= 5(tikrinama prieš kiekvieną kartojimą) - Pakeitimas —
i = i + 1;(kitaip sąlyga niekada netaps klaidinga)
Begalinis ciklas. Jei pamirši
i = i + 1, sąlyga visada liks teisinga ir programa „pakibs". Stabdyk suCtrl+C.
for ciklas
for sujungia tris dalis į vieną eilutę — patogu, kai žinai, kiek kartų kartoti:
for (int i = 1; i <= 5; i++) {
printf("%d\n", i);
}
Skliaustuose: pradinė reikšmė; sąlyga; pakeitimas. i++ yra trumpinys vietoj i = i + 1.
Šis for daro tą patį, ką ankstesnis while — tik kompaktiškiau.
Pavyzdys: suma
Suskaičiuokim skaičių nuo 1 iki 100 sumą:
int suma = 0;
for (int i = 1; i <= 100; i++) {
suma = suma + i;
}
printf("Suma: %d\n", suma); // 5050
Pastebėk, kaip ciklas ir kintamasis suma dirba kartu: kiekvienas kartojimas prideda po vieną skaičių.
break ir continue
break— nedelsiant nutraukia ciklą.continue— praleidžia likusią kartojimo dalį ir pereina prie kito.
for (int i = 1; i <= 10; i++) {
if (i == 5) break; // sustok ties 5
if (i % 2 == 0) continue; // praleisk lyginius
printf("%d\n", i); // spausdina 1, 3
}
Trikčių sprendimas
Programa pakimba — begalinis ciklas. Patikrink, ar sąlyga kada nors taps klaidinga. Stabdyk su Ctrl+C.
Ciklas kartoja vienu kartu per mažai ar daug — atidžiai patikrink sąlygą: < ar <=?
Skaitiklis nesikeičia — while cikle pamiršai i++ ar i = i + 1.
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 kartoti veiksmus su while ir for, valdyti ciklą su break ir continue. Dabar žinai visus tris struktūrinio programavimo blokus.
Kitoje pamokoje sutvarkysi kodą į funkcijas — daugkartinio naudojimo blokus.
Pakeisk main.c — skaičių suma su ciklu
#include <stdio.h>
int main(void) {
int n;
printf("Iki kurio skaiciaus sumuoti? ");
scanf("%d", &n);
int suma = 0;
for (int i = 1; i <= n; i++) {
suma = suma + i;
}
printf("Suma nuo 1 iki %d yra %d.\n", n, suma);
return 0;
}
Pakeisk visą main.c turinį šiuo kodu. Programa sudės skaičius nuo 1 iki tavo įvesto n.
Ką šis kodas daro:
for (int i = 1; i <= n; i++)— ciklas: pradinė reikšmė, sąlyga ir žingsnis vienoje eilutėje.suma = suma + i;— kiekvieną kartojimą prideda dabartinįi.- Po ciklo
sumaturi visų skaičių sumą.
Svarbu: suma turi būti 0 prieš ciklą — kitaip kauptum nuo atsitiktinės reikšmės.