Informatika2-2013/Gyakorlat02

A MathWikiből
A lap korábbi változatát látod, amilyen Kkovacs (vitalap | szerkesztései) 2013. február 19., 03:06-kor történt szerkesztése után volt.

Tartalomjegyzék

2. gyakorlat

Ismétlés

  • Fordítás gcc-vel:

gcc -W -Wall -o hello hello.c 

  • A program futása a main függvénnyel kezdõdik, ezáltal mindig kell, hogy létezzen.
  • Pontosvesszõk a sor végén.
  • Blokkok kapcsoszárójelekkel.
  • A változókat deklarálni kell (meg kell adni a típusukat).
  • stdio.h-ban hasznos függvények, pl: printf
  • Egy példa printf-re:
printf("A %d nagyobb mint a %d\n.", 3, 2);
  • A 3 és a 2 sorban be lesz helyettesítve a string-be, a \n a sorvége karakter.


  • Az if a szokásos módon mûködik, a szintaxis:
if(feltetel){
  utasítások
} else if(feltetel){
  utasítások
}
...
} else{
  utasítások
}


1. For ciklus

Segítségnek itt egy for ciklus példa: 0-tól 9-ig kiírjuk a számokat, vagyis a ciklusváltozó értékét (általában i-nek vagy j-nek nevezzük a ciklusváltozót, ami tipikusan minden körben növekszik eggyel, de persze máshogy is lehetne):

int i;
for (i=0; i<10; i++) {
    printf("A ciklusváltozo erteke: %d\n", i);
}

Egészítsd ki a következő kódot a megjegyzések helyén! Adjuk össze a számokat 1-tõl kezdve, egyesével, pl: 1 + 2 + 3 = 6. A programunk azt a számot adja ki, hogy az elsõ hány darab számot kell összeadni, hogy legalább 4212-t kapjunk.

#include<stdio.h>
 
int main(void) {
    /* változók deklarálása, értékadás */
    /* i-t is deklarálni kell ! */
 
    for (/* inicializálás */ ; /* feltétel */; /* minden ciklusmag végén */) {
        /* számolás */
    }
    /* kiírás */
    return 0;
}

2. Do / while ciklusok

Szintaktika:

do {
    /* utasítások amik minden körben lefutnak */
} while (/* feltétel */);
while ( /* feltétel */ ) {
    /* utasítások amik minden körben lefutnak */
}


A következõ kód a felhasználótól egy ciklusban egész számokat kér be addig, amíg 0 értéket nem kap. Ekkor pedig kiírja a képernyőre a kapott nemnulla számok átlagát!

#include<stdio.h>
 
int main(void) {
    int i = 0;
    float sum = 0;
    int szam = 0;
 
    do{
        scanf("%d", &szam);
        sum += szam;
        i++;
    } while(szam != 0);
 
    i--;
    printf("%f", sum / i);
 
    return 0;
}

Feladat

Írjunk az elõzõ példa mintájára egy programot, ami a felhasználótól egész számokat kér be, amíg egymás után két azonos számot nem kap. Ha ez megtörtént, akkor írja ki, hogy hány számot adtunk be.

Most talán segít, ha már a cikluson kívül is kérünk be elõre számokat, és nem hátultesztelõs ciklust használunk, de azzal is kényelmesen meg lehet oldani, sõt for ciklussal is.

3. Sakktábla

Rajzolj ki egy NxN-es sakktábla mintát, ahol X-szel jelöljük a fekete mezőket, és üresen hagyjuk (egy szóköz) a fehéreket. Nem kell keretet adni a táblának. A sakktábla méretét (N) a felhasználótól kérd be!

Tipp: a ciklusokat egymásba is ágyazhatjuk, de ilyenkor nagyon kell figyelni a ciklusváltozókra!

Egymásba ágyazott ciklus példa:

#include<stdio.h>
 
int main(void) {
    int i;
    int j;
 
    for(i = 0; i < 10; i++) {
        printf("i: %d \n", i);
        for(j = 0; j < i; j++) {
            printf(" (%d, %d) ", i, j);
        }
        printf("\n");
    }
    printf("\n");
}


Személyes eszközök