Sunteți pe pagina 1din 4

Seminar 3. Instruciuni folosite n limbajul C.

Funcii
I.

Instruciuni primitive. Instruciuni compuse


1. Sunt corecte urmtoarele instruciuni? Dac da, care este efectul acestora?
Dac nu, corectai-le.
;
1;
test = a>b && b>c;
a = b = c = 1;
scanf("%d", &a);
nr = scanf("%d", &a);
{int a=1, b=2;}int c = a+b;

II.

Instruciuni decizionale
2. Sunt corecte urmtoarele secvene de instruciuni? Dac da, care este efectul
acestora?
int a=1,b=5;
int max = b;
if (a > b) max = a;
int a = 1,b = 5,max;
if (a > b) max = a;
else max = b;
int a = 1, b = 5, max;
(a > b) ? max = a : max = b;
3. Ce se va afia n urma execuiei secvenei urmtoare pentru c=1? Dar pentru
c=d?
if (('a'<=c) && ('z'>=c ))
printf("%c",c-'a'+'A');
4. Care sunt valorile lui a i b n urma execuiei secvenei urmtoare pentru i = 12?
int i = 12, a,b;
if (1 < i < 10)
{
a = !i & 0xA + 'x';
b = i >> 3 * 4 || a;
}
else
{
a = i++;
b = ~ a & 0x20;
}
5. Este corect urmtoarea secven de instruciuni? Dac da, care este efectul
acesteia? Ce se afieaz pentru b = 10, a = 17? Dar pentru b = 7, a = 3?
int a,b;
printf("b = ");
scanf("%d",&b);
printf("a = ");
fflush(stdout);
switch(b)
{
case 16: {scanf("%x",&a); printf("a = %o \t %d", a, a); break;}
case 10: {scanf("%d",&a); printf("a = %o \t %x", a, a); break;}
case 8: {scanf("%o",&a); printf("a = %d \t %x", a, a); break;}}

III.

Instruciuni repetitive
6. Care este semnificaia variabilei nr_biti din secvena urmtoare? Care este
valoarea sa dup execuie dac x = 11?
int nr_biti,x;
for (nr_biti=0;x;x&=(x-1))
nr_biti++;
7. Se dau urmtoarele secvene pentru calculul factorialului unui numr n. Care
sunt corecte?
for (f=i=1; i<=n; i++) f*=i;
for (f=1, i=2; i<=n; f*=i++);
for (f=1, i=n; i; i--) f*=i;
for (f=1, i=n; i; ){f*=i; i--;}
f=i=1; for (;i<=n;)f*=i++;
f=i=1;
do
f*=i++;
while (i<n);
f=i=1;
while(i<=n)
f*=i++;

IV.

Instructiuni de salt
8. Se d urmtoarea secven. Este corect? Dac da, ce valoare va conine
variabila f la finalul execuiei?
int i=1,f=1,n=10;
for(;;)
{
f*=i++;
if (i>n) break;
}
9. Care este valoarea lui p4 dup execuia secvenei urmtoare?
int n = 20, p4 = 1,i;
for (i=1; i<=n; i+=1)
{
if ((i%5) != 0) continue;
p4*=i;
}
10. Ce se afieaz n urma execuiei secvenei urmtoare pentru val = 10? Dar
pentru val = 11? Corectai secvena folosind o instruciune goto.
switch(val%4)
{
case 0: goto nr_par;
case 1: goto nr_impar;
case 2: goto nr_par;

case 3: goto nr_impar;


default: printf("Imposibil");
}
nr_par:
printf("Nr este par \n");
nr_impar:
printf("Nr este impar \n");

V.

Funcii
11. Ce reprezint funcia main? Pot exista mai multe funcii main n cadrul aceluiai
program? Dar dac programul este organizat n mai multe fiiere surs?
12. Ce reprezint parametrii formali? Ce reprezint parametrii actuali (efectivi)?
13. Care dintre urmtoarele definiii de funcii sunt corecte?
void func1(void){}
double func2(int i, double x){}
double func3(int i, double x)
{double s=1;
return s;}
double func4(i,x)
int i; double x;
{double s=1;
return s;}
14. Ce reprezint prototipul unei funcii? Care dintre urmtoarele prototipuri sunt
corecte pentru funcia dat?
double suma(int n,double x[100]);
double suma(int n);
double suma(int,double[100]);
double suma(int nr, double);
double suma(int nr, double[100]);
double suma(int nr, double[70]);
suma(int n,double x[100]);
double suma(n,x);
double suma(int n, double x[100])
{
double s=0;
int i;
for(i=1;i<=n;i++)
s+=x[i];
return s;
}
15. Care dintre urmtoarele apeluri ale funciei v este corect?
v(int i){printf("%d\n",i);};
int n=5; float b=10.2; char c='A';
v(n);
v(b);
v(c);

16. Ce reprezint variabilele locale? Ce reprezint variabilele globale?


17. Identificai, n programul urmtor, variabilele globale i variabilele locale.
Variabilele n i b sunt valabile i n exteriorul funciei main? Ce se va afia la
execuie?
#include <stdio.h>
long f(int i, int baza);
int j=0;
void main()
{
int n=3,b=2;
printf("Inainte de apel:%d \n",j);
f(b,n);
printf("Dupa apel:%d \n",j);
}
long f(int baza, int exp)
{
j=1;
while (exp--) j*=baza;
return j;
}
18. Ce se afieaz n urma execuiei urmtorului program? Considerai cele 2 cazuri
pozibile, fr i cu comentarea liniei indicate.
#include <stdio.h>
int a = 10;
void sub1(int a)
{
a=20;
printf("%d \n",a);
}
void sub2(int a)
{
a=30;
printf("%d \n",a);
}
void sub3()
{
a=40;
printf("%d \n",a);
}
void main()
{
//int a = 10;
sub1(a); printf("%d \n",a);
sub2(a); printf("%d \n",a);
sub3(); printf("%d \n",a);
}

S-ar putea să vă placă și