Programexempel från C-föreläsning 3, onsdag 18 november 2009 ============================================================ Inlämningsuppgift 1 (triangeltestuppgiften) ------------------------------------------- Vilka testfall? Varför? 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> Vad är ett program? ------------------- Program = recept (ungefär) Sekvens: satser efter varandra Val: if (samt switch) Repetition ("loop"): while (samt for och do-while) Programdesign: 3 sätt att rita ------------------------------ 1. Pseudokod 2. Flödesscheman: rutor, sneda rutor och pilar 3. Strukturdiagram: sekvens (rutor), val (o, o, -), repetition (*) Stegvis förfining ----------------- Först en översiktlig beskrivning (på svenska), sen mindre och mindre steg (på svenska eller med pseudokod), till sist riktig programkod. 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