Håkan Strömberg KTH STH 1 Fråga 1. Följande två funktioner finns deklarerade i ett större program int F1(int A,int B){ if(a>b) return 2*A; return 2*B; int F2(int A,int B){ return abs(a-b); Vad får A för värde genom följande sats? A=F1(F2(F1(6,3),F2(3,5)),F1(5,9)); Fråga 2. Vad skriver programmet ut? #include <stdio.h> void funk1(int a,int b){ a=b; b=a; printf("f1 %d %d\n",a,b); void funk2(int *a,int *b){ *a=*a+3; *b=*b+2; printf("f2 %d %d\n",*a,*b); void funk3(int *b,int a){ *b=*b+4; a=a+5; printf("f3 %d %d\n",a,*b); int a=6,b=8; funk1(a,b); funk2(&a,&b); funk3(&a,b); printf("m %d %d\n",a,b); Fråga 3. Skriv en funktion antal, som bestämmer och returnerar hur många gånger ett givet tal förekommer i en, till storleken ej bestämd, heltalsvektor. Så här kan ett anrop se ut int v[10]={1,2,2,3,1,2,3,2,1,2; printf("%d\n",antal(v,10,2)); Fråga 4. Skriv en funktion minimum som tar reda på och returnerar det minsta värdet i en heltalsvektor. Vektorns storlek är från början inte känd av funktionen. Fråga 5. Vad krävs av funktionen undersok(a) för att b ska ökas med 1 respektive minskas med 1? if(undersok(a)) b++; b--; Fråga 6. Vilket värde har a efter att följande program exekverats? int f1(int x,int y){ return x%y; int f2(int x,int y){ return x/y; int a; a=f1(f2(20,3),f1(19,5)); Fråga 7. Skriv en funktion, trapets, som med hjälp av formeln T = h(s 1 +s 2 ) 2 bestämmer arean till en parallelltrapets. Ett typiskt anrop av funktionen är a=trapets(4,6.5,5.6). Parametrarna är i tur och ordning h, s 1 och s 2. Fråga 8. Vad skriver programmet ut? void p1(int *a,int *b){ (*a)++; (*b)++; printf("p1: %d %d\n",*a,*b); void p2(int *a,int b){ (*a)++; b++; printf("p2: %d %d\n",*a,b); void p3(int a,int b){ a++; b++; printf("p3: %d %d\n",a,b); int a=1,b=1; p1(&a,&b); p2(&a,b); p3(a,b); printf("m : %d %d",a,b); int m1,m2,v[1000],w[12]; m1=minimum(v,1000); m2=minimum(w,12);
Håkan Strömberg KTH STH 2 Fråga 9. Funktionerna F1 och F2 är definierade i ett program som nedan. int F1(int a,int b){ return (a+b+abs(a-b))/2; int F2(int a,int b){ if(a==b) return 0; if(a>b) return 1; return -1; Vilket värde får då a efter satsen a=f2(f1(3,5),f1(6,4)); Fråga 10. Skriv en funktion klotvolym som tar emot uppgift om klotets radie r och som beräknar och returnerar volymen med hjälp av formeln Fråga 11. Vad skrivs ut? V = 4πr3 3 int f(int a, int *b){ (*b)--; if(a==(*b)) printf("%d ",*b); return a*(*b); int x=4,y=5; x=f(x,&y); printf("%d %d\n",x,y); getch(); Fråga 12. Vad utför den här funktionen? int funk(int a){ return a++; Fråga 13. Förklara i ord vad den här funktionen utför och när den är meningsfull att använda. void funk(char s[]){ for(i=0;s[i]!= \0 ;i++) s[i]-=32; Fråga 14. Skriv en funktion summa som summerar alla heltalen i intervallet [f t], t f. Ett typisk anrop summa(1,10,&sum) ska ge variabeln sum värdet 55. Fråga 15. I ett program finns två funktioner deklarerade int F1(int x, int y){ return x%y; int F2(int x, int y){ return x/y; Vilket värde får variabeln a efter anropet a=f1(f2(43,5),f1(24,7))? Fråga 16. I den här funktionen vill man bland annat öka funktionens parameter med 1. Skriv en sats som utför arbetet. void funk(int *a){ Fråga 17. Vilket av följande fyra anrop av funktionen i uppgift 25 är korrekt? a) b=funk(c); b) funk(&c); c) b=funk(&c); d) funk(c); Fråga 18. Vad skrivs ut då följande program exekveras? void P1(int *A,int B){ (*A)++; B++; printf("p1 %d %d\n",*a,b); void P2(int A,int B){ A++; B++; P1(&A,B); printf("p2 %d %d\n",a,b); int A=7,B=8; P2(A,B); printf("huv %d %d\n",a,b); Fråga 19. Skriv en fullständig funktion stjarnor som skriver ut lika många asterisker (*) på samma rad, som parametern anger. Typiskt anrop stjarnor(10);
Håkan Strömberg KTH STH 3 Fråga 20. Följande två funktioner finns deklarerade i ett större program int F1(int a,int b){ if(a>b) return 2*a; return 2*b; int F2(int a,int b){ return abs(a-b); Vad får A för värde genom följande sats? a=f1(f2(f1(6,3),f2(3,5)),f1(5,9)); Fråga 21. Nedan ser du ett meningslöst program. Din uppgift är nu att exemplifiera följande begrepp med exempel från programmet: (a) Global variabel, (b) Funktionsdeklaration, (c) Funktionsdefinition, (d) Lokal variabel, (e) Formell parameter, (f) Aktuell parameter, (g) Indicerad variabel, (h) Resultattyp. Du måste klara minst 7. #include <stdio.h> int a; int funk(int); int b[10],c; c=funk(b[7]); int funk(int d){ return d++; Fråga 22. Vad skriver programmet ut? int f1(int x,int y){ return x%y; int f2(int x,int y){ if(x>y) return x; return y; int x=345,y=213,m1; m1=f1(f2(y,x),f1(x,y)); printf("resultat: %d",m1); Fråga 23. Skriv en funktion dist som tar emot koordinater för två punkter, (x 1,y 1 ) och (x 2,y 2 ), i planet och returnerar avståndet mellan dem med hjälp av formeln d = (x 1 x 2 ) 2 +(y 1 y 2 ) 2 Fråga 24. Skriv en funktion summa som bestämmer summan av ett givet antal termer i serien: 1 1 + 2 3 + 3 6 + 4 10 + 5 15 + Här har vi ett program som använder funktionen och skriver ut summan av de 10 första termerna. printf("summa: %.4f",summa(10)); Fråga 25. I denna uppgift vill vi testa att du förstått skillnaden mellan referensanrop och värdeanrop. Vad skriver programmet ut? void f1(int a,int *b){ a++; (*b)++; printf("f1 %d %d\n",a,*b); void f2(int *a,int *b){ (*a)++; (*b)++; f1(*a,b); printf("f2 %d %d\n",*a,*b); int x=3,y=5; f1(x,&y); printf("m %d %d\n",x,y); f2(&x,&y); printf("m %d %d\n",x,y); Fråga 26. Skriv en funktion lika, som tar emot två heltal och returnerar True om talen är lika och False om talen är olika. Fråga 27. Skriv en funktion summa, som summerar alla heltal i intervallet [a, b]. Ett typiskt funktionsanrop är int x; x=summa(3,7); Fråga 28. Med hjälp av Herons formel kan man bestämma arean till en triangel då längden hos de tre sidorna a, b och c är givna. Först bestämmer man halva omkretsen genom och till sist arean genom p = a+b+c 2 area = p(p a)(p b)(p c) Skriv en fullständig funktion, heron, som genom till exempel anropet area=heron(7,5,8) bestämmer arean till triangeln med sidorna 7, 5 och 8.
Håkan Strömberg KTH STH 4 Fråga 29. Vad skriver programmet nedan ut? Alla utskrifter måste vara korrekta för att uppgiften ska ge poäng. void f1(int *a,int b){ *a=b+1; b++; printf("f1 %d %d\n",*a,b); void f2(int a,int *b){ *b=*b+2; f1(&a,*b); printf("f2 %d %d\n",a,*b); int x=1,y=2; f2(x,&y); printf("m %d %d\n",x,y); Fråga 30. Från koden nedan anropar man en funktion, summa, som summerar talen i arrayen a och returnerar summan. Skriv denna funktion. int a[100],s; s=summa(a,100); printf("summan är %d\n",s); Fråga 31. Vad skriver programmet ut? int f1(int a,int b){ if (a<b) return b; return a; int f2(int a,int b){ if(a%b==0) return a; return b; int s; s=f2(f1(67,80),f1(41,39)); printf("%d\n",s); Fråga 32. Vad skrivs ut? int f(int a, int *b){ (*b)--; if(a==(*b)) printf("%d ",*b); return a*(*b); int a=2,b=3; a=f(a,&b); printf("%d %d\n",a,b); Fråga 33. Översätt denna matematiska formel till en sats i C z = x 8 y 8 Fråga 34. Vilket värde får c i detta program? int f1(int a,int b){ return 2*a+3*b; int f2(int a,int b){ return 3*a-b; int c; c=f1(f2(f1(3,0),f1(3,2)),f2(1,3)); Fråga 35. Skriv en fullständig funktion, rabattpris, som tar emot uppgift om pris (i kronor och öre) och rabatt (heltal procent) och som beräknar och returnerar det rabatterade priset. Ett typiskt anrop: rp=rabattpris(235.50,12) Fråga 36. Skriv en funktion signum(x), där den aktuella parametern är deklarerad int, som returnerar: 1 om x < 0 0 om x = 0 1 om x > 0 Fråga 37. a är som vi kan se en formell parameter till funktionen funk. Här vill man nu med hjälp av funktionen scanf läsa in ett värde till *a. Skriv den satsen (anropet). void funk(int *a){
Håkan Strömberg KTH STH 5 Fråga 38. Här ser vi inledningen till ett C-program, med bland annat anrop av funktionen compute. Skriv den första raden, huvudet, i denna funktion efter vad som framgår av anropet. int a[120],b,d; char c[19]; d=compute(a,&b,c); Fråga 39. Vilket värde får n i detta program? int f1(int x,int y){ if(x>y) return x; return y; int f2(int x,int y){ return (x+y)/2; int n; n=f2(f1(f2(3,9),f1(5,8)),6); Fråga 40. Vilka värden får x och y till sist? void f1(int *a,int b){ *a=*a+2; b=b+3; void f2(int a,int *b){ a=a+2; *b=*b+3; f1(&a,*b); void f3(int *a,int *b){ *a=*a+2; *b=*b+3; f2(*a,b); int x=2,y=3; f3(&x,&y); printf("%d %d\n",x,y); Fråga 41. Den här funktionen var tänkt att använda för att byta värden på två variabler. Men den fungerade inte som det var tänkt. Utför nödvändiga justeringar. void swap(int a,int b){ int c; c=a; a=b; b=c; Fråga 42. Vad skrivs ut då detta program körs? int f(int a,int b){ return a+b; int g(int a,int b){ return f(a+3,b+3); int h(int a,int b){ return f(a+1,b+1)+g(a+2,b+2); printf("%d\n",h(2,3)); Fråga 43. Vad skriver programmet ut? int f1(int a){ return a+a; int f2(int a){ return f1(a)+a; int f3(int a){ return f2(a)+a; int n; n=f3(3)+f2(2)+f1(1); printf("%d",n); Fråga 44. Nedan ser vi deklarationen av två matriser. Dessa används sedan som parametrar vid anrop av funktionen funk. int m[8][10],n[17][10]; funk(m,8); funk(n,17); Skriv funktionshuvudet, det som inleds med void funk(
Håkan Strömberg KTH STH 6 Fråga 45. Skriv en funktion kapital, som tar emot uppgift om n (antal år), s (startkapital), och r ränta i % (alla heltal) och som med formeln ( k = s 1+ r ) n 100 bestämmer och returnerar det nya kapitalet (flyttal). Fråga 46. Vad skrivs ut? void f(int w[5]) { for (i=0;i<=4;i++){ w[i]=w[i]*2; printf("%d ",w[i]); int v[]={1,2,3,4,5; f(v); for(i=0;i<=4;i++) printf("%d ",v[i]); Fråga 47. Skriv en funktion maximum, som tar reda på och returnerar det minsta värdet i en heltalsvektor med enbart positiva tal. Vektorns storlek är från början inte känd av funktionen. int m1,m2,v[1000],w[12]; m1=maximum(v,1000); m2=maximum(w,12); Fråga 48. Skriv en funktion max, som tar emot två heltal, a och b i exemplet och som ger m värdet av det största av dessa tal. Fråga 51. Vad skriver programmet ut? void f1(int a,int *b){ a++; (*b)++; printf("f1: %d %d\n",a,*b); void f2(int *x,int *y){ f1(*x,y); (*x)++; (*y)++; printf("f2: %d %d\n",*x,*y); void f3(int *a,int b){ (*a)++; b++; printf("f3: %d %d\n",*a,b); int a=2,b=3; f2(&a,&b); f3(&a,b); printf(" M: %d %d\n",a,b); Fråga 52. Skriv funktionen sum, som summerar talen i en array och returnerar summan. int a[100],b[20],s1,s2; s1=sum(a,100); s2=sum(b,20); int a=7,b=3,m; max(&m,a,b); Fråga 49. Vad skriver programmet ut? int f1(int x){ return (x*x)%10; int f2(int x){ return (x*x)/10; printf("%d\n",f1(f2(8))); Fråga 50. Skriv funktionen minsttvalika(a,b,c), som tar emot tre heltal och returnerar 1 om minst två av parametrarna har samma värde. Annars ska 0 returneras.
Håkan Strömberg KTH STH 1 Fråga 1. 36 Fråga 2. F1 8 8 F2 9 10 F3 15 13 M 13 10 Fråga 3. int antal(int v[],int n,int t){ int i,s=0; for(i=0;i<n;i++) if(v[i]==t) s++; Fråga 4. int minimum(int v[],int n){ int i,min=v[0]; for(i=1;i<n;i++) if(v[i]<min) min=v[i]; return min; Fråga 5. Att den kan returnera talet 0 för att villkoret ska bli falskt och att den kan returnera ett tal 0 för att villkoret ska bli falskt. Fråga 6. 2 Fråga 7. float trapets(float h,float s1,float s2){ return h*(s1+s2)/2; Fråga 8. P1: 2 2 P2: 3 3 P3: 4 3 M : 3 2 Fråga 9. -1 Fråga 10. float klotvolym(float r){ return 4*M_PI*r*r*r/3; Fråga 11. 4, 16, 4 Fråga 12. Ingenting Fråga 13. Överför gemena bokstäver till versaler Fråga 14. void sum(int f,int t,int *s){ *s=0; for(i=f;i<=t;i++){ *s=*s+i; Fråga 15. 2 Fråga 16. Två förslag med samma resultat *a=*a+1; (*a)++; Fråga 17. b) eller d) Fråga 18. P1 9 10 P2 9 9 HUV 7 8 Fråga 19. void stjarnor(int a){ for(i=1;i<=a;i++) printf("*"); Fråga 20. 36 Fråga 21. Global variabel : a Funktionsdeklaration: int funk(int) Funktionsdefinition: Hela funktionen funk Lokal variabel: c Formell parameter: d Aktuell parameter: b[7] Indicerad variabel: b Resultattyp: int Fråga 22. 81 Fråga 23. float dist(int x1,int y1,int x2,int y2){ return sqrt(pow(x1-x2,2)+pow(y1-y2,2)); Fråga 24. float summa(int k){ float s=0; int t,n=1; for(t=1;t<=k;t++){ s=s+(float)t/n; n=n+t+1; Fråga 25. F1 4 6 M 3 6 F1 5 8 F2 4 8 M 4 8 Fråga 26. int lika (int a,int b){ return a==b;
Håkan Strömberg KTH STH 2 Fråga 27. int summa(int a,int b){ int s=0,i; for(i=a;i<=b;i++) s=s+i; Fråga 28. float heron(float a,float b,float c){ float p; p=(a+b+c)/2; return sqrt(p*(p-a)*(p-b)*(p-c)); Fråga 29. F1 5 5 F2 5 4 M 1 4 Fråga 30. int summa(int a[],int n){ int i,s=0; for(i=0;i<n;i++) s=s+a[i]; Fråga 31. 41 Fråga 32. 2 4 2 Fråga 33. z=sqrt(abs(pow(x,8)-pow(y,8))); Fråga 34. 12 Fråga 35. float rabattpris(float p,int r){ return p*(1-r/100.0); Fråga 36. int signum(int x){ if(x<0) return -1; if(x==0) return 0; if(x>0) return 1; Fråga 37. scanf("%d",a); scanf("%d",&*a); Fråga 38. int compute(int a[],int *b,char c[]) int compute(int *a,int *b,char *c) Fråga 39. n=7 Fråga 40. 4 9 Fråga 41. void swap(int *a,int *b){ int c; c=*a; *a=*b; *b=c; Fråga 42. 22 Fråga 43. 20 Fråga 44. void funk(int m[][10],int p) Fråga 45. float kapital(int n,int s,int r){ return s*pow((1+r/100.0),n); Att skriva 100 som en flyttalskonstant är viktigt. Fråga 46. 2 4 6 8 10 2 4 6 8 10 Fråga 47. int maximum(int v[],int n){ int max=0,i; for(i=0;i<n;i++) if(v[i]>max) max=v[i]; return max; Fråga 48. void max(int *m,int a,int b){ if(a>b) *m=a; *m=b; Fråga 49. 6 Fråga 50. int minsttvalika(int a,int b,int c){ if (a!=b && a!=c && b!=c) return 0; return 1; Fråga 51. F1: 3 4 F2: 3 5 F3: 4 6 M: 4 5 Fråga 52. int sum(int m[],int n){ int i,s=0; for(i=0;i<n;i++) s=s+m[i];