100. ----- Forsta...andra...tredje... ----- 101. Det saknas ett semikolon efter return-instruktionen! 102. Det finns många sätt att lösa denna uppgift på. Det snyggaste, enligt oss, är följande. ----- #include int main() { printf("Jag ar ett C-program.\n"); printf("Jag ar skriven av kqr.\n"); printf("Vad fa ovningar det blev till detta kapitel! :o\n"); return 0; } ----- 200. Varibeln "tidningar" initieras aldrig och får en typ, därför går den inte heller att använda. 201. I strängen som skickas till printf() finns det två %i, men bara en variabel efter! 202. ----- #include int main() { int kmh, tid, stracka; //kmh är hastigheten mätt i kilometer i timmen. tid är tiden i timmar. stracka är sträckan i kilometer. tid = 4; //det tar fyra timmar att åka kmh = 110; //vi åker på motorled hela resan, i 110 km/h stracka = kmh * tid; //vi gör en multiplikation för att få fram sträckan i km/h printf("En resa som tar %i timmar med en hastighet av %i km/h, är %i km lang.\n", tid, kmh, stracka); return 0; } ----- 203. ----- #include int main() { int kmh, tid, stracka; //kmh är hastigheten mätt i kilometer i timmen. tid är tiden i timmar. stracka är sträckan i kilometer. stracka = 440; //här ställer vi in hur många kilometer som färdats (440 kmh = 44 mil, ungefär från stockholm till nedre småland) tid = 4; //det tar fyra timmar att åka kmh = stracka / tid; //vi gör en division för att få fram hastigheten i km/h printf("En resa på %i kilometer som tar %i timmar, färdas med en genomsnittshastighet på %i km/h.\n", stracka, tid, kmh); return 0; } ----- 204. Formeln för hur mycket han tjänar en dag ser ut som följer: grundlön + sålda_böcker * provision För matematikerna: ja, detta är en linjär funktion, den kan också uttryckas på kx+m-form: kx + m där m är grundlönen, k är provisionen och x är antalet sålda böcker. ----- #include int main() { int grundlon, provision, bocker, totallon; grundlon = 480; provision = 20; bocker = 7; //jag tycker att han ska ha sålt 7 böcker :) totallon = grundlon + bocker * provision; printf("Bokförsäljaren tjänade %i kronor denna dag!\n", totallon); return 0; } ----- Notera att när vi räknar ut dagslönen drar vi nytta av prioriteringsreglerna i matematiken och C. bocker * provision räknas ut _först_, sen läggs grundlönen till. 205. ----- #include int main() { int grundlon, provision, bocker, dagar, totallon; //lade till en variabel för antal arbetade dagar grundlon = 480; provision = 20; bocker = 7; //jag tycker att han ska ha sålt 7 böcker :) dagar = 22; //han jobbade 22 dagar den här månaden totallon = grundlon * dagar + bocker * provision; printf("Bokförsäljaren tjänade %i kronor denna manad!\n", totallon); return 0; } ----- 206. ----- #include int main() { int grundlon, provision, bocker, totallon; grundlon = 480; provision = 20; bocker = 7; //jag tycker att han ska ha sålt 7 böcker :) totallon = grundlon + bocker * provision; totallon -= 320; printf("Bokförsäljaren tjänade %i kronor denna dag!\n", totallon); return 0; } ----- Här valde jag att lösa det genom att först räkna ut totallönen, och sen dra 320 från totallönen. För att demonstrera hur detta görs. 207. I int lagrar man heltal. I double lagrar man decimaltal. I char lagrar man tecken. 300. Saknas ampersand innan variabelnamnet i anropet till scanf()! 301. ----- #include int main() { int kmh, tid, stracka; printf("Valkommen till hastighetsutraknaren!\n"); printf("Hur manga timmar har du rest? "); scanf("%i", &tid); printf("Och hur många kilometer fardades du under dessa %i timmar? ", tid); //notera användningen av tid-variabeln scanf("%i", &stracka); kmh = stracka / tid; //vi gör en division för att få fram hastigheten i km/h printf("Okej, du rorde dig med en genomsnittshastighet pa %i km/h!\n", kmh); return 0; } ----- 302. ----- #include int main() { int grundlon, provision, objekt, totallon; printf("Lonutrakningsprogrammet for saljare\n\n"); printf("Vad ar din grundlon per dag i kronor? "); scanf("%i", &grundlon); printf("Hur manga kronor far du i provision per salt objekt? "); scanf("%i", &provision); printf("Hur manga objekt salde du idag? "); scanf("%i", &objekt); totallon = grundlon + objekt * provision; printf("\nIdag har du tjanat %i kronor!\n", totallon); return 0; } ----- 303. Eftersom int-typen inte kan lagra hur stora tal som helst kommer den inte reageara som den ska efter 2 147 483 647. För den intresserade, denna gräns bestäms av formeln 2^32/2-1, eftersom: Tal lagras binärt, och en int är 4 bytes (som du kan utläsa i tabellen i del 2). Det går 8 bitar på en byte. En int lagras alltså i 32 bitar. (8 * 4 = 32) Antalet kombinationer som går att uppnå med 32 bitar är 2^32. Eftersom hälften av talen i en vanlig int är negativa, är det 2^32/2 som _inte_ är negativa. Ett av dessa icke-negativa tal är 0, därför har vi 2^32/2-1 positiva tal kvar. Detta behöver du inte förstå, så länge du känner till att det finns en övre gräns. :) (Och en undre, för den delen.) 304. ----- #include int main() { int antal; printf("Hur manga gram vager pappersbunten (endast A4-papper!)? "); scanf("%i", &antal); printf("Den bestar troligtvis av %i papper.\n", antal/5); return 0; } ----- 305. ----- #include int main() { int hojd, bredd, djup, volym, vikt; printf("Obs! Alla matt ar i millimeter, kubikcentimeter och gram om inget annat anges.\n"); printf("Mata endast in heltal!\n\n"); printf("Buntens hojd (A4 ar 297 mm): "); scanf("%i", &hojd); printf("Buntens bredd (A4 ar 210 mm): "); scanf("%i", &bredd); printf("Buntens djup (10 st. A4 ar 1 mm): "); scanf("%i", &djup); volym = hojd * bredd * djup; // nu är volymen i kubikmillimeter volym /= 1000; // nu är volymen i kubikcentimeter vikt = volym * 0.8; // papper väger 0.8 gram per kubikcentimeter printf("\nDin pappersbunt ar %i kubik stor och vager %i gram.\n", volym, vikt); return 0; } ----- 400. Detta är ett typisk exempel på så kallat "logikfel". För kompilatorn ser programmet rätt ut, och för datorn ser programmet rätt ut. Däremot har programmeraren tänkt fel och det gör att programmet beter sig långt ifrån som det borde. Detta program kommer alltid bara skriva ut "Hej!" och sedan avslutas. Om a är lika med 24 gör den nästa grej. Eftersom vi inte har några måsvingar är nästa grej bara en instruktion, nämligen printf(). Alltså kommer return-instruktionen köras oavsett vad a har för värde. Så här borde den kodbiten se ut för att vara tydlig: ----- printf("Hej!\n"); if (a == 24) printf("Hejda! :D\n"); return 0; printf("Farval!\n"); //kommer aldrig köras, eftersom return är innan ----- Vill man att return-instruktionen ska vara en del i if-satsen måste man använda måsvingar! 401. ----- #include int main() { int a, b, c; printf("Mata in langden pa sida 1: "); scanf("%i", &a); printf("Mata in langden pa sida 2: "); scanf("%i", &b); printf("Mata in langden pa sida 3: "); scanf("%i", &c); if (a + b > c) { //om summan av vilka två sidor som helst är större än tredje sidan är det en triangel printf("Din form ar en triangel.\n"); } else { printf("Din form ar inte en triangel.\n"); } return 0; } ----- 402. ----- #include int main() { int diameter, omkrets, staket; printf("Helikopterplattans diameter (m): "); scanf("%i", diameter); omkrets = diameter * 314 / 100; //inte så snyggt sätt att göra på, men vi kan inte decimaltal än :) printf("Staketlangden (m): "); scanf("%i", staket); if (staket >= omkrets) { //om staketet är längre än eller lika långt som omkretsen räcker det printf("Staketet racker!\n"); } else { printf("Staketet racker tyvarr inte.\n"); } return 0; } ----- 403. ----- #include int main() { int sida, area, pasinnehall, pasar, rackertill, saknas; //sidan på marken, arean på den samma, hur mkt mark en påse räcker för, //hur många köpta påsar, hur mkt nuvarande gräs räcker till, hur mkt som saknas printf("Ange markens sida (m): "); scanf("%i", sida); area = sida * sida; //en kvadrats area är sidan i kvadrat printf("Ange hur manga m^2 en pase racker for: "); scanf("%i", pasinnehall); printf("Ange hur manga pasar du kopt: "); scanf("%i", pasar); rackertill = pasar * pasinnehall; saknas = area - rackertill; //om saknas är positiv saknas det så många m^2, om den är negativ har man så många m^2 över if (saknas > 0) { printf("Det racker inte, du behover kopa %i m^2 gras till.\n", saknas); } else { printf("Det racker!\n"); } return 0; } ----- 404. ----- #include int main() { int inkomster, utgifter, medelvarde, fortjanst, stabilgrans; printf("Inkomster: "); scanf("%i", &inkomster); printf("Utgifter: "); scanf("%i", &utgifter); fortjanst = inkomster - utgifter; medelvarde = (inkomster + utgifter) / 2; stabilgrans = medelvarde / 10; if (fortjanst <= stabilgrans * -1) { //gånger -1 för att göra den negativ printf("Fara (under %i fortjanst)\n", stabilgrans * -1); } else if (fortjanst > stabilgrans * -1 && fortjanst < stabilgrans) { printf("Stabilt (mellan %i och %i fortjanst)\n", stabilgrans * -1, stabilgrans); } else if (fortjanst >= stabilgrans) { printf("Plus (over %i fortjanst)\n", stabilgrans); } return 0; } -----