Vežbe iz Osnova programiranja


 

18.NCP koji na standardni izlaz ispisuje broj bajtova koji zauzimaju određeni tipovi podataka.

#include <stdio.h>
main()
{  printf("char:   %d  bajt\n", sizeof(char));


    printf("short: %d bajta\n", sizeof(short));
    printf("int : %d bajta\n", sizeof(int));
    printf("long=%d bajta\n", sizeof(long));
    printf("unsigned=%d bajta\n", sizeof(unsigned));
    printf("float=%d bajta\n", sizeof(float));
    printf("double=%d bajta\n", sizeof(double));
}




 

19. NCP koji na standardni izlaz ispisuje vrednosti predefinisanih konstanti (zaglavlja: limits.h, float.h).

#include <stdio.h>
#include <limits.h>
#include <float.h>
main()
{
  printf("CHAR_BIT:\t%d\n", CHAR_BIT);
  printf("UCHAR_MAX:\t%u\n", UCHAR_MAX);


  printf("INT_MIN:\t%d\n", INT_MIN);
  printf("INT_MAX:\t%d\n", INT_MAX);
               printf("LONG_MAX:\t%ld\n", LONG_MAX);
  return 0;
}



20. Zadate su tri verzije C programa. Koja od njih nije korektna i zašto?


#include <stdio.h>
void ispisati (void) ;
main()
{ int a,b,c;
   a=b=c=2;
   ispisati (a, b, c);
   c=4;
   ispisati (a, b, c);
}

/*f-ja koja stampa na glavni izlaz*/
void ispisati(int i, int j, int k)
{

  printf("1. argument je %d\n", i);
  printf("2. argument je %d\n", j);
  printf("3. argument je %d\n", k);

}


#include <stdio.h>
void ispisati (int a, int b, int c) ;
main()
{ int a,b,c;
   a=b=c=2;
   ispisati (a, b, c);
   c=4;
   ispisati (a, b, c);
}

/*f-ja koja stampa na glavni izlaz*/
void ispisati(int i, int j, int k)
{

  printf("1. argument je %d\n", i);
  printf("2. argument je %d\n", j);
  printf("3. argument je %d\n", k);

}


#include <stdio.h>
void ispisati (int, int, int) ;
main()
{ int a,b,c;
   a=b=c=2;
   ispisati (a, b, c);
   c=4;
   ispisati (a, b, c);
}

/*f-ja koja stampa na glavni izlaz*/
void ispisati(int i, int j, int k)
{

  printf("1. argument je %d\n", i);
  printf("2. argument je %d\n", j);
  printf("3. argument je %d\n", k);

}

21. NCP koji će izračunati sume ∑ i=1..5 i2 i ∑ i=1..23 i2 i obe sume ispisati u zasebnim linijama.

#include <stdio.h>
void  Zbir_Kvad(int n);   /*f-ja koja vrsi zeljeno izracunavanje */
main()
{  Zbir_Kvad( 5);
    Zbir_Kvad( 23);
}
void  Zbir_Kvad(int n)
int br; /* lokalna promenljiva funkcije, brojac u ciklusu */
     long Zbir=0; /* lokalna promenljiva funkcije, suma kvadrata brojeva od 1..n */
    for  (br=1; br<=n;  Zbir+= (long)  br*br,  ++br)  ;
    printf(" Zbir kvadrata brojeva od 1 do %d jese %ld\n", n,Zbir);
}

Poziv funkcije: pozivajuća jedinica(main)  ->   funkcija Zbir_Kvad   ->   pozivajuća jedinica(main)

prikaz koraka prilikom poziva funkcije

 

22. Članovi niza a se formiraju po pravilu a[i]=5*(n/4-i), gde n je broj članova niza a. NCP koji će za n=12 prikazati na standardni izlaz elemente niza a i to po 10 u svakoj liniji. Zatim ispisati maksimum niza na standardni izlaz.

#include <stdio.h>
#define UKUPNO 12
int max( int prvi, int drugi );
main()
{
  int a[UKUPNO], indeks, Max;
  for(indeks=0; indeks<UKUPNO; indeks++)
                      a[indeks]=5*(UKUPNO/4-indeks);

/* prikazuje elemente niza po 10 u liniji*/
for(indeks=0; indeks<UKUPNO; indeks++)
printf("%6d%c", a[indeks],(indeks%10==9 || indeks==UKUPNO-1)? '\n':' ');
 

printf("Niz sadrzi %d elem%s \n", UKUPNO,   (UKUPNO==1)?"ent":( (UKUPNO>=2 && UKUPNO<=4)?"enta":"enata" ) );

/* trazenje max clana */
Max=a[0];
for(indeks=1; indeks<UKUPNO; indeks++)     Max=max(Max, a[indeks]);
printf("Maksimum niza je %d \n", Max);
return 0;
}

/*  max: vraca maksimum dva argumenta */
int max( int prvi, int drugi )
{
 return ( (prvi>=drugi)?prvi:drugi );
}

23. NCP koji će izračunati i ispisati na standardni izlaz sume: ∑ i=1..5 i2, ∑ i=1..5 i3, ∑ i=1..10 i4.

#include <stdio.h>
void Zbir_stepena (int n, int granica);    /*izracunava za brojeve od 1 do n zbir po granica. stepenu */
main()
{ Zbir_stepena(5,2);
    Zbir_stepena(5,3);
    Zbir_stepena(10,4);
return 0;
}

void Zbir_stepena (int n, int granica)
{

    int i,j;   /*brojaci u for petljama */
    long Zbir=0  ,  stepenovan ;

    for (i=1; i<=n; Zbir +=stepenovan, ++i) /*spoljasnji for ciklus obavlja sumiranja*/
         for( stepenovan=1,j=1;  j<=granica;  stepenovan*= (long) i, ++j) ; /*unutrasnji for ciklus obavlja stepenovanje */
     printf(" Zbir %d. stepena od 1 do %d jeste %ld\n", granica,n,Zbir);
}

24. Šta je rezultat rada sledećeg programa koji je blokovski orjentisan?

#include <stdio.h>
main()
{
  int pom=1;
  printf("Pre ulaska u unutrasnji blok pom=%d\n",pom);
     {  int pom=50;
         printf("Pre izlaska iz unutrasnjeg bloka  pom=%d\n",pom);
      }
   printf("Nakon izlaska iz  unutrasnjeg bloka  pom=%d\n",pom);
}

25. Šta je rezultat rada sledećeg programa s obzirom na svojstva automatskih i statičkih promenljivih?

#include<stdio.h>
void funkcija(void);
main()
{ int br;
    for(br=1;br<=5;++br) funkcija();
}

void funkcija(void)
{ static int a=0;
  int b=0;
  printf("static =%d auto=%d\n",a,b);
    ++a;
    ++b;
}

26. NCP koji će ispisati rezultat skalarnog množenja uređene šestorke a i uređene šestorke b. Uređenu šestorku a čini prvih šest prirodnih brojeva, a uređenu šestorku b čine brojevi 8,7,6,5,4,3.

#include <stdio.h>
long mnozi(int x[],int y[],int n);
main()
{int a[ ]={1,2,3,4,5,6}, b[  ]={8,7,6,5,4,3};

  printf("Skalarno a*b= %ld\n",mnozi(a,b,6));
}
long mnozi(int x[ ],int y[ ],int n)
{ int br;
   long suma=0;
   for(br=0;br<n;br++) suma=suma+x[br]*y[br];
   return suma;
}

27. Šta je rezultat rada sledećeg programa?
  /* bitske operacije. */

#include <stdio.h>
main()
{
   printf( "255 & 15 = %d\n", 255 & 15 );
   printf( "255 | 15 = %d\n", 255 | 15 );
   printf( "255 & 15 = %o\n", 255 & 15 );
   printf( "255 | 15 = %x\n", 255 | 15 );
   printf( "255 ^ 15 = %d\n", 255 ^ 15 );
   printf( "4 << 2   = %d\n", 4 << 2 );
   printf( "16 >> 2  = %d\n", 16 >> 2 );
   printf( "~(-3)      = %d\n", ~(-3) );
}

255 & 15 = 15                                                  255 ^ 15 = 240
255 | 15 = 255                                                   4 << 2   = 16
255 & 15 = 17                                                  16 >> 2  = 4
255 | 15 = ff                                                      ~(-3)      = 2

 

Protumačiti uz pomoć K&R  izraze:
 

unsigned x, n;
 

x=x & 0177;
x=x&01;
x=x|n;
x=x|01;
x=x & ~0177;
~0;
~0<<n;
~(~0<<n);
 

 


Jelena Grmuša Osnovi programiranja

e-mail: Jelena Grmuša


Copyright © 2002, Jelena Grmusa
Poslednja izmena: decembar 2005.
URL: http://www.matf.bg.ac.yu/~jelenagr/op/