Håkan Strömberg KTH STH 1 Fråga 1. Vilka värden har c, e och f efter att de tre tilldelningssatserna har exekverats? int a=3, b=10; float c,d=2.0,e,f; c=b/a; e=b/a+d; f=d*b/a; Fråga 2. Skriv ett logiskt uttryck, som är sant om heltalsvariabeln X är jämnt delbart med 7 och/eller 5. Fråga 3. Ange i en liten tabell exempel på heltalsvärden till A och B, som producerar var och en av de fyra utskrifterna i if-satsen nedan. if(a>3) if(b<4) printf("ett\n"); printf("två\n"); if(b<4) printf("tre\n"); printf("fyra\n"); Fråga 4. För vilka heltalsvärden på A är följande logiska uttryck sant? A>3 && A<10 && A%3==1 Fråga 5. Variabeln ALDER anger ålder och variabeln KOEN anger kön (1=kvinna, 2=man). Skriv ett logiskt uttryck, som är sant för kvinnor och barn. Personer under 18 år betraktas som barn. Fråga 6. Skriv en rutin som bestämmer summan av de två mittersta siffrorna i ett fyrsiffrigt tal. Exempelvis: 5391 blir 12 och 6713 blir 8. Det fyrsiffriga talet finns ursprungligen lagrat i variabeln T och resultatet ska lagras i variabeln S. Fråga 7. Vilket värde har a efter följande satser? int a=1; if (a==1) a++; if (a==2) a+=2; if (a==3) a+=3; if (a==4) a+=4; Fråga 8. I följande rutin vill man skriva ut resultatet med två decimaler, ändra därför tilldelningssatsen så att önskat resultat erhålles. Punkterna markerar endast satser där a och b tilldelas värden. int a=7,b=6; float c;... c=a/b; printf("%5.2f\n",c); Fråga 9. Skriv ett villkor som är sant om N (tvåsiffrigt heltal) har en tiotalssiffra som är större än 6 och en entalssiffra som är mindre än 3. Fråga 10. Vilken/vilka av följande namn är tillåtna som identifierare (namn på funktioner, konstanter och variabler)? antal_hus längd unsigned 91karlsson year2002 next-day Fråga 11. Vad skrivs ut? int a=0,b=1,c=2,d=3; if(a<b b>c) printf("x\n"); if(a<b&&b>c) printf("y\n"); if((a<b)&&(b>c!(c>d))) printf("z\n"); Fråga 12. Vad skrivs ut? int a=0,b=1,c=2,d=3; if(a<b) printf("a\n"); if(b<c && c<d) printf("b\n"); Fråga 13. Vad skrivs ut? int a,b=4,c=6; double d=3.0; a=c/b; printf("%d\n",a); b=c%b; printf("%d\n",b); a=d/c; printf("%d\n",a); Fråga 14. Skriv ett villkor som är sant om och endast om den första siffran i ett tvåsiffrigt heltal x är större än den andra. Fråga 15. Skriv en rutin som simulerar kast med en vanlig tärning. Träningens ögonen läggs ihop tills man slår en etta. Slutsumman, med den avslutande ettan inkluderad skrivs ut. Fråga 16. Vad sker i rutinen nedan? Variablerna x och y är av typen int och har tilldelats värden tidigare högre upp i programmet. Anm: Du skall inte kommentera varje rad för sig, utan förklara vad hela rutinen gör, på ett så enkelt sätt som möjligt. x=x+y; y=x-y; x=x-y; Fråga 17. Skriv ett logiskt uttryck, som är sant då de tre variablerna x,y och z alla har olika värden.
Håkan Strömberg KTH STH 2 Fråga 18. Längden hos triangelns tre sidor är givna och finns lagrade i variablerna a, b och c. Med hjälp av Herons formel: där T = s(s a)(s b)(s c) s = a+b+c 3 kan man bestämma triangelns area T. Översätt dessa formler till en rutin i C, som beräknar T. Fråga 19. Vilka värden får de tilldelade variablerna efter följande satser? int a,b; float c,d; a=37/10; b=37.0/10; c=37/10; d=37/10.0; Fråga 20. Vilka värden har a och b efter följande rutin? int a=5,b=4; if (a==b) a++; b++; if (a==b){ a++; b++; Fråga 21. Skriv ett logiskt uttryck som är sant då A s värde är större än dubbla B s värde, men inte större än tre gånger B s värde. A och B är deklarerade int Fråga 22. En tidpunkt lagras i två variabler, aktuell timme i tim och aktuell minut i min. Skriv ett villkor som är sant då tidpunkten är senare än kl 21 : 35. Fråga 23. Variabeln x är deklarerad float. Skriv en rutin som skriver ut den andra decimalen. Fråga 24. För vilka heltalsvärden är följande logiska uttryck sant? a>5 && a<21 && a%4==1 Fråga 25. Vilka värden har c1, c2 och c3 efter de tre tilldelningssatserna nedan? int a=5, b=12; float c1,c2,c3; c1=b/a; c2=(float)b/a; c3=b/2*a; Fråga 26. Skriv ett logiskt uttryck, som är sant då då x har ett värde som ligger mellan y och z. Fråga 27. Skriv ett villkor som är sant om det mittersta siffran i det tresiffriga positiva heltalet x är summan av de andra två siffrorna. Fråga 28. Vilket är det minsta positiva heltalsvärde variabeln A kan ha för att ge variabeln B värdet 3 efter att rutinen nedan har exekverats? B=0; if(a%2==0) B++; if(a%3==0) B++; if(a%5==0) B++; Fråga 29. Vilket värde får a, deklarerad int, genom satsen nedan. a=5+3*2+(4+5)/3*2 Fråga 30. Skriv ett logiskt uttryck som är sant då heltalsvariabeln x inte ligger i intervallet [1...1000]. Hakparenteser uttrycker att gränserna ingår i ett intervall. Fråga 31. Variabeln farg kan anta två värden 1 (gul) och 2 (blå) och variabeln modell kan likaså anta två värden, 1 (M1020) och 2 (M3030). Skriv en rutin som med hjälp av variablerna farg och modell tilldelar variabeln pris dess rätta värde, vilket Du finner i tabellen nedan. Blå Gul M1020 65.50 78.00 M3030 79.00 93.50 Fråga 32. Vilka värden får a och b efter följande satser? a=56.78976; a=(int)(a*100+0.5)/100.0; b=56.78976; b=(int)(b*10000+0.5)/10000.0; Fråga 33. Skriv en kortare variant på det logiska uttrycket: a==b b<a Fråga 34. Vilket värde har a efter följande rader int a=23; a=a/4+a%4; Fråga 35. Man vill ha reda på om heltalsvariabeln i har något av värdena [2,4,6,8...30]. Skriv det villkor som behövs. Fråga 36. Hur åstadkommer man utskriften "Hej", sa Lucia
Håkan Strömberg KTH STH 3 Fråga 37. Detta lilla program, är tänkt att inledningsvis fråga efter antal och sedan efter lika många tal som successivt summeras. Talens summa skrivs sedan ut. Men programmet innehåller fyra nybörjarfel finns minst tre av dem! void main(void){ float sum,tal; int n; printf("antal: "); scanf("%d",n); for(k=1;k<=n;k++){ printf("tal: "); scanf("%d",&tal); sum=sum+tal; printf("summan=%6.3f\n",sum); Fråga 38. Med detta program vill man bestämma sitt sparkapital efter ett år med 8% ränta. Men programmet fungerar inte som det ska varför? void main(void){ int ranta=8; float kapfore=18500,kapefter; kapefter=kapfore*(1+ranta/100); printf("kapital= %.2f",kapefter); Fråga 39. Nedan ser du två logiska uttryck där operatorn icke har används. Skriv om dem utan att använda!, men så att de får samma funktion.!(a<=b+3)!(a>2 b<5) Fråga 40. Skriv ett logiskt ut tryck som bara är sant då värdet hos heltalsvariabeln x är udda och ligger i intervallet [19... 37], inklusive gränser. Fråga 41. Vilka av följande logiska uttryck är sanna? Alla rätt krävs. int c1=1,c2=2,c3=3; a) c1==1 c2==1 && c3==1 b) c2==1 && c3==3 c1==2 && c2==2 c)!(c2==1) d)!(c1==1)!(c3==1) Fråga 42. För vilka värden hos variabeln a är detta logiska uttryck sant? a>=1 && a<=40 && a%5==1 && a%7==1 Fråga 43. Vilket värde måste a och b tilldelats tidigare om c får värdet 11 i följande rutin? c=0; if(a*b>35) c=c+1; if(a+b<13) c=c+2; if(a-b>3) c=c+4; if(a%b==0) c=c+8; Fråga 44. Inköpspriset i är givet och nu ska skatten s beräknas med hjälp av följande tabell, som antingen ges som ett konstant belopp eller som en procentsats av inköpspriset: Inköpspris Skatt < 20000 kr 15% 20000 30000 kr 3000 kr > 30000 kr 10% Skriv en rutin som tilldelar skatten s rätt värde för givet i. Fråga 45. Förklara i ord hur variabeln s värde beror av tal int tal=356,s; s=tal/100+tal%100/10+tal%10; Fråga 46. Skriv ett logiskt uttryck, som är sant då de tre heltalsvariablerna a,b och c alla har samma värde. Fråga 47. Skriv en rutin som tilldelar variabeln mitten det tal som bildas av de två mittersta siffrorna i ett fyrsiffrigt tal lagrat i heltalsvariabeln tal; Om tal=1234 så blir mitten=23 Fråga 48. Vilket värde får a nedan? int a; a=6/2*3+7/3; Fråga 49. Vad är det som gör att detta program inte kan användas för att summera två tal? int main(void){ int a,b,c; printf("a : "); scanf("%d",a); printf("b : "); scanf("%d",b); c=a+b; printf("c = %f",c); Fråga 50. Bestäm heltalsvärden på a och b, så att c och d får värdena 3 respektive 5. a=? b=? c=a/b; d=a%b;
Håkan Strömberg KTH STH 1 Fråga 1. c = 3.0,e = 5.0,f = 6.67 Fråga 2. X%7==0 X%5==0; Fråga 3. Fråga 4. 4 och 7 a b 4 3 ETT 4 5 TVÅ 2 3 TRE 2 5 FYRA Fråga 5. KOEN==1 (KOEN==2 && ALDER<18) Fråga 6. T=T%1000/10; S=T/10+T%10; Fråga 7. 8 Fråga 8. c=(float)a/b; Fråga 9. if(n/10>6 && N%10<3) Fråga 10. antal_hus Fråga 11. X Z Fråga 12. A Fråga 13. 1 2 0.5 Fråga 14. year2002 if (x/10>x%10) Fråga 15. srand(time(0)); int eyes, sum=0; do { eyes=rand()%6+1; sum=sum+eyes; while(eyes>1); Fråga 16. Variablerna x och y byter värden med varandra Fråga 17. a!=b && a!=c && b!=c Fråga 18. s=(a+b+c)/3; t=sqrt(s*(s-a)*(s-b)*(s-c)); Fråga 19. a=3, b=3, c=3.0, d=3.7 Fråga 20. a=6 och b=6 Fråga 21. (A>2*B && A<=3*B) Fråga 22. tim>21 tim==21 && min>35 Fråga 23. printf("%d",(int)(100*x)%10) Fråga 24. 3, 13 och 17 Fråga 25. c1=2, c2=2.4 och c3=30 Fråga 26. (x>y && x<z) alternativt (x>z && x<y) Fråga 27. Fråga 28. 30 Fråga 29. 17 Fråga 30. x%100/10==x%10+x/100 (x<1 x>1000) Fråga 31. if(farg==1 && modell==1) pris=78.00; if(farg==1 && modell==2) pris=93.50; if(farg==2 && modell==1) pris=65.50; if(farg==2 && modell==2) pris=79.00; Fråga 32. a=56.79 b=56.7898 Fråga 33. b<=a Fråga 34. 8 Fråga 35. if(i%2==0 && i>=2 && i<=30) Fråga 36. printf("\"hej\", sa Lucia\n") Fråga 37. sum ska nollställas k ska deklareras scanf("%d",&n) scanf("%f",&tal) Fråga 38. kapefter=kapfore*(1+ranta/100.0); alternativt kapefter=kapfore*(1+(float)ranta/100); Fråga 39. a>b+3 a<=2 && b>=5 Fråga 40. i=i/100; m=i%10; Fråga 41. a, c och d Fråga 42. 1 och 36 Fråga 43. a= 6 och b= 6 Fråga 44. int i; float s; if(i<20000) s=0.15*i; if(i<=30000) s=3000; s=0.1*i;
Håkan Strömberg KTH STH 2 Fråga 45. s innehåller summan av de siffror som ingår i det tresiffriga talet tal. Fråga 46. a==b && b==c Fråga 47. Fråga 48. 11 Fråga 49. mitten=tal/10%100; Utelämnat & i de två scanf-satserna %d i stället för %f i printf-satsen Fråga 50. Till exempel a = 32 och b = 9. Annars får man alla lösningar genom godtyckligt värde på n 0 i a = 23+3n och b = 6+n.