b) 2
c) 1
#include <stdio.h> int main(void) { double tum; printf("Ange längden i tum: "); scanf("%lf", &tum); printf("Det är %f cm.\n", tum * 2.54); return 0; }
#include <stdlib.h> #include <stdio.h> int main(void) { double kroppsvikt; printf("Ange patientens kroppsvikt: "); scanf("%lf", &kroppsvikt); int tabletter = kroppsvikt * 60 / 500; printf("Ta inte mer än %d tabletter!\n", tabletter); return 0; }
#define MAX_NUMBERS 1000 int main(void) { int a[MAX_NUMBERS]; int nr_numbers; int i; int nr_in_result; printf("Antal heltal? "); scanf("%d", &nr_numbers); while (nr_numbers < 0 || nr_numbers >= MAX_NUMBERS) { printf("Nej! Gör om!\n"); printf("Antal heltal? "); scanf("%d", &nr_numbers); } for (i = 0; i < nr_numbers; ++i) { printf("Ange tal %d: ", i + 1); scanf("%d", &a[i]); } sort_array(a, nr_numbers); if (nr_numbers < 7) nr_in_result = nr_numbers; else nr_in_result = 7; printf("De minsta talen:\n"); for (i = 0; i < nr_in_result; ++i) { printf("%d\n", a[i]); } return 0; }
Kommentarer: Den här implementationen gör mer felkontroller än vad som krävs i uppgiften. I modernare C kan man använda en array med variabel storlek: int a[nr_numbers];
#define MAX_NAMNLANGD 35 struct Tatort { int kod; char namn[MAX_NAMNLANGD + 1]; char kommun[MAX_NAMNLANGD + 1]; int folkmangd; };
b) (1p)
struct Tatort tatorten = { 6076, "Odensbacken", "Örebro kommun", 1374 };
c) (2p)
void visa_tatort(struct Tatort t) { printf("Kod: %d\n", t.kod); printf("Namn: %s\n", t.namn); printf("Kommun: %s\n", t.kommun); printf("Folkmängd: %d\n", t.folkmangd); }
d) (3p)
void las_tatort(struct Tatort *tp) { printf("Ange tätortens kod: "); scanf("%d", &tp->kod); while (getchar() != '\n') ; printf("Ange tätortens namn: "); gets(tp->namn); // Använd inte gets på riktigt! printf("Ange kommunens namn: "); gets(tp->kommun); // Använd inte gets på riktigt! printf("Ange tätortens folkmängd: "); scanf("%d", &tp->folkmangd); while (getchar() != '\n') ; }
e) (2p)
int main(void) { struct Tatort t1, t2; las_tatort(&t1); las_tatort(&t2); if (strlen(t1.namn) > strlen(t2.namn)) visa_tatort(t1); else visa_tatort(t2); return 0; }
b) Sex rader med elva stjärnor på varje
c) Rätt: Fem rader med tio stjärnor på varje
#include <stdlib.h> #include <stdio.h> int main(void) { FILE *udda, *jamna; int tal; udda = fopen("udda.txt", "w"); if (udda == NULL) { fprintf(stderr, "Kunde inte skriva filen 'udda.txt'.\n"); exit(EXIT_FAILURE); } jamna= fopen("jamna.txt", "w"); if (jamna == NULL) { fprintf(stderr, "Kunde inte skriva filen 'jamna.txt'.\n"); exit(EXIT_FAILURE); } printf("Skriv heltal. Avsluta med talet noll.\n"); scanf("%d", &tal); while (tal != 0) { if (tal % 2 == 0) fprintf(jamna, "%d\n", tal); else fprintf(udda, "%d\n", tal); scanf("%d", &tal); } fclose(jamna); fclose(udda); return EXIT_SUCCESS; }
#include <stdlib.h> #include <stdio.h> int main(void) { int antal_jamna = 0; int antal_udda = 0; int tal; FILE *jamna = fopen("jamna.txt", "r"); if (jamna == NULL) { fprintf(stderr, "Kunde inte läsa filen 'jamna.txt'.\n"); exit(EXIT_FAILURE); } while (fscanf(jamna, "%d", &tal) == 1) ++antal_jamna; fclose(jamna); FILE *udda = fopen("udda.txt", "r"); if (udda == NULL) { fprintf(stderr, "Kunde inte läsa filen 'udda.txt'.\n"); exit(EXIT_FAILURE); } while (fscanf(udda, "%d", &tal) == 1) ++antal_udda; fclose(udda); if (antal_jamna > antal_udda) printf("Flest jämna tal.\n"); else if (antal_jamna < antal_udda) printf("Flest udda tal.\n"); else printf("Lika många udda och jämna tal.\n"); return EXIT_SUCCESS; }
Kommentar: Den här implementationen gör mer felkontroller än vad som krävs i uppgiften.