Programmeerimiskeel C/Harjutused
Allikas: Wikibooks
Programmeerimist ei õpita raamatust, vaid õpitakse proovides ja lahendades reaalseid ülessandeid. Vahest ehk kõige paremini õpetavabki oma loodud vigane kood, mis saab pärast mõttetööd iseseisvalt lahendatud.
Sisukord |
[redigeeri] Sissejuhatus
See osa veel ei eelda otsest koodikirjutamise oskust, kuid tegemist on protseduuride/teadmistega mida peab valdama iga C programmeerija.
[redigeeri] Harjutus 1
- Loo kaust kuhu salvestada fail
- Lisa sinna kausta fail tere.c, mille sisu on
#include <stdio.h> int main(void) { printf("Tere maailm!"); return 0; }
- Kompilleeri & käivita see fail
[redigeeri] Harjutus 2
- Küljenda antud koodilõik vastavalt C stiilile (selle hulgas kirjuta kommentaarid)
#include <stdlib.h> #define XXX printf("\n");getchar();getchar();return 0 int main(void){int ex=3,nr=0,i=0,t=0,p=0;printf("Sisesta palju täisarve soovid sisestada: ");scanf("%d", &nr); while(ex!=0 && ex!=1 && i!=nr){i++;printf("Sisesta täisarv: ");scanf("%d", &ex);switch(ex % 2){case 0: t++; break; case 1: p++; break;default: ex=1; break;}} printf("Sisestasi %d paaris ja %d paaritut arvu.",t,p); XXX;}
[redigeeri] Harjutus 3
- Küljenda antud koodilõik vastavalt C stiilile (selle hulgas kirjuta kommentaarid ja prototüübid)
#include <stdio.h> #include <stdlib.h> #include <string.h> #define XXX printf("\n");getchar();getchar();return 0 #define VIGA printf("- Programmi töös ilmnes viga! -"); #define maxkirjed 20 typedef struct kaup{char nimetus[25];double hind;} KAUP; int main(void){KAUP kirje[maxkirjed];int pole=0,i=0;if(taida_massiiv(kirje,&i)!=pole){if(i!=pole){kuva(kirje,i); sordi(kirje,i);kuva2(kirje,i);}else{VIGA}}else{VIGA}XXX;} int taida_massiiv(KAUP *kirje, int *j){FILE *andmed, *fopen();char andmefail[]="andmed.txt";int kkk;int i=0; if ((andmed = fopen(andmefail, "r")) == NULL){printf("Andmefaili andmete laadimisel ilmes viga!\n");kkk=0; }else{while(!feof(andmed) || i==maxkirjed){fscanf(andmed,"%s", kirje[i].nimetus);fscanf(andmed,"%lf", &kirje[i].hind);i+=1;}kkk=1;}*j=i-1;int fclose(FILE *andmed);return kkk;} int kuva(KAUP *arvuti, int i){int j;double x;for(j=1;j<i;j++){printf("\nSee pakkumine on eelmisest "); x=arvuti[j-1].hind-arvuti[j].hind;if(x>0){printf("soodsam %6.2lf EEKi",x);}else{printf(" kallim %6.2lf EEKi",-x);}}} int sordi(KAUP *kirje, int i){int pass, counter,k=i;while(k--){for (pass = 0; pass < i-1;pass++){ if(kirje[pass].hind>kirje[pass+1].hind){vaheta(&kirje[pass],&kirje[pass+1]);}else{}}}} int kuva2(KAUP *arvuti, int i){printf("\n\nParim pakkumine tehti ");printf("arvutiga %s hinnaga %6.2lf EEK.", arvuti[0].nimetus, arvuti[0].hind);printf("\nParimuselt 2 pakkumine tehti "); printf("arvutiga %s hinnaga %6.2lf EEK.", arvuti[1].nimetus, arvuti[1].hind);} void vaheta (KAUP *v1, KAUP *v2){KAUP temp;temp= *v1;*v1 = *v2;*v2 = temp;}
[redigeeri] Muutujad
[redigeeri] Nimetamine
- Kas muutuja nimi võib alata numbriga?
- Kas muutuja nimi võib alata tüpograafilise sümboliga (nagu #, *, _)?
- Too mõni näide C muutja nimest mis ei oleks sobilik. Miks see ei ole sobilik?
[redigeeri] Andmetüübid
- Nimeta vähemalt 3 andmetüüpi C's
- Kui palju sinu arvutil, igaüks neist mälu nõuab?
- Kas võime kasutada andmetüüpide nimetusi (nagu 'int', 'float') muutjate nimedena?
[redigeeri] Väärtustamine
- Kuidas sa deklareeriksid ja väärtustaksid muutujale 3.14, kui muutuja nimi on pii?
- Too näide, kas on võimalik väärtustada int tüüpi väärtus otse tüübile double?
- Kas vastupidine on võimalik?
[redigeeri] Refereerimine
- Sul on vaja muutuja "pi1" väärtusega väärtustada muutuja "pi2"?
- Milline oleks sellele korrektne koodisegment?
- Mida see tähendaks tagurpidi? Kas tegemist on lubatud/korrektse C koodisegmendiga? (isegi, kui see annab õige vastuse)?
- Mis oleks, kui sooviksid väärtustada muutuja "pi2" konstantse väärtusega (nagu 3.1415)
- a. Milline näeks korrektne koodisegment välja?
- b. Kas tagurpidi oleks tegemist lubatud või mitte lubatud C koodisegmendiga?