Programexempel från C-föreläsning 2, torsdag 13 november 2008 ============================================================= Kom ihåg -------- 1. Labbanmälan i Studentbasen 2. Studieteknik (Läs! Tänk!! Öva!!!) 3. Vi hinner inte gå igenom allt på föreläsningarna 4. Inget "jullov", bara "självstudier" 5. Inlämningsuppgift 1 - senast fredag! Demonstration ------------- 1. Exempelprogram i GCC: hello 2. Exempelprogram i Visual Studio: hello a) getch b) åäö-problem Forts från föreläsning 1: Kopiera ett tecken -------------------------------------------- #include #include /* Kopiera ett tecken från * standardinmatningen (stdin) * till standardutmatningen (stdout) */ int main(void) { char c; c = getchar(); putchar(c); return EXIT_SUCCESS; } /* main */ Val med hjälp av if-sats ------------------------ #include #include int main(void) { char c; c = getchar(); if (c == 'x') printf("Du skrev 'x'.\n"); else printf("Du skrev något annat.\n"); return EXIT_SUCCESS; } /* main */ Kopiera flera tecken tills det kommer ett 'x' ---------------------------------------------- #include #include /* Kopiera standardinmatningen (stdin) * till standardutmatningen (stdout) */ int main(void) { char c; c = getchar(); while (c != 'x') { putchar(c); c = getchar(); } return EXIT_SUCCESS; } /* main */ Körexempel ---------- hej alla apskaft! hej alla apskaft! tjoho! tjoho! sex laxar i en laxask! se Val med hjälp av if-sats ------------------------ #include #include int main(void) { char c; c = getchar(); if (c == 'x') printf("Du skrev 'x'.\n"); else printf("Du skrev något annat.\n"); return EXIT_SUCCESS; } /* main */ Kopiera en hel fil (dvs, tills det kommer ett EOF) -------------------------------------------------- #include #include /* Kopiera standardinmatningen (stdin) * till standardutmatningen (stdout) */ int main(void) { int c; c = getchar(); while (c != EOF) { putchar(c); c = getchar(); } return EXIT_SUCCESS; } /* main */ Kopiera en hel fil (version 2) ------------------------------ #include #include /* Kopiera standardinmatningen (stdin) * till standardutmatningen (stdout) */ int main(void) { int c; while ((c = getchar()) != EOF) putchar(c); return EXIT_SUCCESS; } /* main */ sqrt-1.c -------- #include #include int main(void) { float x; printf("Tal: "); scanf("%f", &x); printf("%f\n", sqrt(x)); return 0; } Körexempel ---------- linux> gcc -W -Wall -Werror sqrt-1.c -o sqrt-1 -lm linux> ./sqrt-1 Tal: 100 10.000000 linux> ./sqrt-1 Tal: -3.3 nan linux> sqrt-2.c -------- // Fel... #include #include int main(void) { float x; printf("Tal: "); scanf("%f", &x); if (x >= 0.0) printf("%f\n", sqrt(x)); else printf("Kan inte dra roten\n"); printf("ur ett negativt tal.\n"); return 0; } Körexempel ---------- linux> gcc -W -Wall -Werror sqrt-2.c -o sqrt-2 -lm linux> ./sqrt-2 Tal: 100 10.000000 ur ett negativt tal. linux> ./sqrt-2 Tal: -3.3 Kan inte dra roten ur ett negativt tal. linux> sqrt-3.c -------- #include #include int main(void) { float x; printf("Tal: "); scanf("%f", &x); while (x != 0.0) { if (x >= 0.0) printf("%f\n", sqrt(x)); else { printf("Kan inte dra roten\n"); printf("ur ett negativt tal.\n"); } scanf("%f", &x); } // while return 0; } // main Körexempel ---------- linux> gcc -W -Wall -Werror sqrt-3.c -o sqrt-3 -lm linux> ./sqrt-3 Tal: 100 10.000000 -3.3 Kan inte dra roten ur ett negativt tal. 14 3.741657 0 linux> ./sqrt-3 Tal: Kalle 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 ... Vad är ett program? ------------------- Program = recept (ungefär) Sekvens: satser efter varandra Val: if (samt switch) Repetition ("loop"): while (samt for och do-while) Stegvis förfining ----------------- Först en översiktlig beskrivning (på svenska), sen mindre och mindre steg (på svenska eller med pseudokod), till sist riktig programkod. for-loopar ----------