Programexempel från C-föreläsning 5, måndag 18 december 2006 ============================================================ Föreläsningsplanering --------------------- Fö 5 (idag, måndag): loopar, switch-satsen Fö 6 (tisdag): sammansatta datatyper: arrayer och strängar Fö 7 (onsdag): strängar, poster Fö 8 (fredag): mer om poster, pekare Några korrekta loopar som skriver 10 asterisker: ok-loopar.c ------------------------------------------------------------ #include #include int main(void) { int i; i = 0; while (i < 10) { printf("*"); ++i; } printf("\n"); i = 0; while (i < 10) { putchar('*'); ++i; } putchar('\n'); int r = 0; while (r < 10) { printf("*"); ++r; } printf("\n"); i = 0; while (i < 10) { putchar('*'); i = i + 1; } putchar('\n'); i = 0; while (i++ < 10) putchar('*'); putchar('\n'); i = 0; do putchar('*'); while (++i < 10); putchar('\n'); for (i = 0; i < 10; ++i) putchar('*'); putchar('\n'); // Idiomatiskt rätt sätt for (int i = 0; i < 10; ++i) putchar('*'); putchar('\n'); return EXIT_SUCCESS; } /* main */ Loopar som skriver 10 asterisker - men vilka är rätt? loopar.c -------------------------------------------------------------- #include #include int main(void) { int i; i = 0; while (i < 10) { putchar('*'); i++; } putchar('\n'); int antal_asterisker_som_vi_skrivit_hittills = 0; while (antal_asterisker_som_vi_skrivit_hittills < 10) { putchar('*'); antal_asterisker_som_vi_skrivit_hittills++; } putchar('\n'); i = 1; while (i <= 10) { putchar('*'); i++; } putchar('\n'); i = 10; while (i >= 0) { putchar('*'); i--; } putchar('\n'); i = 100; while (i >= 91) { putchar('\n'); i--; } putchar('*'); i = 0; while (++i <= 10) putchar('*'); putchar('\n'); i = 0; do putchar('*'); while (i++ < 10); putchar('\n'); for (i = 1; i < 11; ++i) putchar('*'); putchar('\n'); return EXIT_SUCCESS; } /* main */ En loop med extra tilldelningar av loop-variabeln ------------------------------------------------- int i; for (i = 0; i < 10; ++i) { printf("i = %d\n", i); if (i % 3 == 0) i++; } En loop med mer än en styrvariabel ---------------------------------- int min, max; double mitten; min = 0; max = 10; while (min <= max) { mitten = (min + max) / 2.0; printf("min = %d, max = %d, mitten = %.2f\n", min, max, mitten); if (min % 2 == 0) max -= 2; min++; } Bygg ett heltal av siffror (Gunnars kap 3 sid 2): Körexempel ------------------------------------------------------------ Ge en rad med tecken: 12kh7jsdhsdh8ekjfkjeflkj------77 Siffrorna bildar talet 127877. Bygg ett heltal av siffror (Gunnars kap 3 sid 2): tecken-1.c ------------------------------------------------------------ #include #include int main(void) { int tal = 0; int tecken; printf("Ge en rad med tecken: "); tecken = getchar(); while (tecken != '\n') { if (tecken >= '0' && tecken <= '9') { tal = tal * 10 + tecken - '0'; } tecken = getchar(); } printf("Siffrorna bildar talet %d.\n", tal); return EXIT_SUCCESS; } /* main */ tecken-2.c ---------- #include #include #include int main(void) { int tal = 0; int tecken; printf("Ge en rad med tecken: "); while ((tecken = getchar()) != '\n') { if (isdigit(tecken)) { tal = tal * 10 + tecken - '0'; } } printf("Siffrorna bildar talet %d.\n", tal); return EXIT_SUCCESS; } /* main */ if och switch ------------- (Gunnars kap 3 s 8-9)