Lösningsförslag till datorövning 3, Programmering C. /* uppg3a.c */ #include #include int main() { int heltal; /* läs in tal */ printf("Heltal: "); scanf("%d", &heltal); /* testa och skriv resultat */ if (heltal % 2 != 0) printf("Talet är udda!\n"); else printf("Talet är jämnt!\n"); getch(); return 0; } /* uppg3b.c */ #include #include int main() { int vinkel; /* läs in vinkel */ printf("Positiv vinkel: "); scanf("%d", &vinkel); /* testa och skriv resultat */ if (vinkel < 90) printf("Vinkeln är spetsig!\n"); else if (vinkel == 90) printf("Vinkeln är rät!\n"); else printf("Vinkeln är trubbig!\n"); getch(); return 0; } /* uppg3c.c */ #include #include #include int main() { double retal; /* läs in retal */ printf("Positivt reellt tal: "); scanf("%lf", &retal); /* testa, beräkna och skriv resultat */ if (retal >= 0.0) printf("Kvadratroten: %.3f\n", sqrt(retal)); else printf("Kvadratroten: Fel! Kan ej beräknas för negativa tal!\n"); getch(); return 0; } /* uppg3d.c */ #include #include int main() { char siffra; /* läs in siffra */ printf("Siffra mellan 0 och 5: "); scanf("%c", &siffra); /* testa och skriv morsekod */ switch (siffra) { case '0' : printf("- - - - -\n"); break; case '1' : printf(". - - - -\n"); break; case '2' : printf(". . - - -\n"); break; case '3' : printf(". . . - -\n"); break; case '4' : printf(". . . . -\n"); break; case '5' : printf(". . . . .\n"); break; default : printf("Har ännu inte lärt mig denna morsekod!\n"); } getch(); return 0; } /* uppg3e.c */ #include #include int main() { double v_km_h, s_m; /* skriv rubrik */ printf("Hastighet Bromssträcka\n"); printf("--------- ------------\n"); /* beräkna skriv ut tabellen */ for (v_km_h = 30.0; v_km_h <= 130.0; v_km_h += 10.0) { s_m = 0.015 * v_km_h * v_km_h; printf("%6.1f%16.1f\n", v_km_h, s_m); } getch(); return 0; } /* uppg3f.c */ #include #include #include int main() { int i; float floatsumman; double doublesumman; floatsumman = 0.0; doublesumman = 0.0; for (i = 0; i < 1000000000; ++i) { floatsumman += 0.001; doublesumman += 0.001; } printf("Float-summan är %f.\n", floatsumman); printf("Double-summan är %f.\n", doublesumman); getch(); return 0; } /* uppg3g.c */ #include #include int main() { double retal; /* läs in retal */ printf("Positivt reellt tal (avsluta med 0.0): "); scanf("%lf", &retal); while (retal != 0.0) { /* testa, beräkna och skriv resultat */ if (retal >= 0.0) printf("Kvadratroten: %.3f\n", sqrt(retal)); else printf("Kvadratroten: Fel! Kan ej beräknas för negativa tal!\n"); /* läs in retal */ printf("Positivt reellt tal (avsluta med 0.0): "); scanf("%lf", &retal); } return 0; } /* uppg3h.c */ #include #include int main() { int n = 0; double delsum = 0.0; while (delsum <= 10.0) { /* beräkna delsumman */ n++; delsum += 1/(double)n; } /* skriv antal termer */ printf("Antal termer: %d\n", n); getch(); return 0; } /* uppg3i.c */ #include int main() { int n, nmax, sign; double delsum; /* läs in antal termer */ printf("Antal termer (avsluta med 0): "); scanf("%d", &nmax); while (nmax != 0) { /* startvärden */ n = 0; sign = 1; delsum = 0.0; while (n < nmax) { /* beräkna delsumman */ n++; delsum += sign/(double)n; sign = -sign; } /* skriv delsumman */ printf("Delsumma: %f\n", delsum); /* läs in antal termer */ printf("Antal termer (avsluta med 0): "); scanf("%d", &nmax); } return 0; } /* uppg3j.c */ #include #include #include #include int main() { int slumptal, gissning, antal_gissningar = 0; /* slumpa tal mellan 0 och 99 */ srand((unsigned)time(NULL)); slumptal = rand() % 100; do { /* gissa ett tal */ printf("Gissa ett tal mellan 0 och 99: "); scanf("%d", &gissning); antal_gissningar++; /* kolla gissning */ if (gissning < slumptal) printf("FÖR LITET\n"); else if (gissning > slumptal) printf("FÖR STORT\n"); else printf("RÄTT\n"); } while (gissning != slumptal); /* skriv antal gissningar */ printf("Antal gissningar: %d\n", antal_gissningar); getch(); return 0; } /* uppg3k.c */ #include #include #include /* * The Zorganian Republic has some very strange customs. Couples only * wish to have female children as only females can inherit the * family's wealth, so if they have a male child they keep having more * children until they have a girl. If they have a girl, they stop * having children. What is the ratio of girls to boys in Zorgania? */ int main(void) { int totalt_antal_flickor = 0; int totalt_antal_pojkar = 0; int max_antal_barn_i_en_familj = 0; srand(time(NULL)); for (int familjer = 0; familjer < 1000000; ++familjer) { // Kräver en någorlunda modern C int antal_flickor_i_familjen = 0; int antal_pojkar_i_familjen = 0; while (antal_flickor_i_familjen < 1) { if (rand() % 2 == 0) ++antal_flickor_i_familjen; else ++antal_pojkar_i_familjen; } totalt_antal_flickor += antal_flickor_i_familjen; totalt_antal_pojkar += antal_pojkar_i_familjen; if (antal_flickor_i_familjen + antal_pojkar_i_familjen > max_antal_barn_i_en_familj) max_antal_barn_i_en_familj = antal_flickor_i_familjen + antal_pojkar_i_familjen; } printf("Flickor: %d\n", totalt_antal_flickor); printf("Pojkar: %d\n", totalt_antal_pojkar); printf("Kvot: %f\n", (double)totalt_antal_flickor / totalt_antal_pojkar); printf("Max antal barn i en och samma familj: %d\n", max_antal_barn_i_en_familj); return 0; }