Pripremni zadaci za vezbanje iz Programiranja  - I deo

 

 

Pripremni zadaci za vezbanje sa rešenjima iz prethodnih godina 

I grupa zadataka

 

  1. Šta je rezultat rada sledećeg programa:

    #include <stdio.h>

main()

{

int x, y;

int a = 0, b = 0;


printf("Na pocetku : \na = %d\nb = %d\n", a, b);

/* Ukoliko se vrednost izraza ne koristi, prefiksni i postfiksni operator se ne razlikuju */

a++;

++b;

printf("Posle : a++; ++b; \na = %d\nb = %d\n", a, b);

/* Prefiksni operator uvecava promenjivu, i rezultat je uvecana vrednost */

x = ++a;

/* Postfiksni operator uvecava promenjivu, i rezultat je stara (neuvecana) vrednost */

y = b++;

printf("Posle : x = ++a; \na = %d\nx = %d\n", a, x);

printf("Posle : y = b++; \nb = %d\ny = %d\n", b, y);

}


2. Šta je rezultat rada sledećeg programa:

 

#include <stdio.h>

main()

{

    int i=700, j=-2;

    char c='3'

 

   printf("\n%5d-%5d\n", i, j);

   printf("\n%10u%10ld\n", i, j);

   printf("\n/%c/%d/\n", c, c);

 

}

 

 

3. Šta je rezultat rada sledećeg programa:

 

#include <stdio.h>

main()

{

    float i=12.123, j=-12.3456789;

 

   printf("\n%5f-%5f\n", i, j);

   printf("\n%5.2f%-5.0f\n", i, j);

}

 

4. Navesti redosled izvrŠavanja operacija i vrednost kompletnog izraza:

 a) z=(y=10/(5*1)) + 8;

 b) z=5*(x=8) + 3*(y=4/2);

c) x=y=2; z=(x-(++y))*4;

 

5. Šta je rezultat rada sledećeg programa:

#include <stdio.h>

main()

{

int a = 3>5, /* manje */

b = 5>3, /* vece */

c = 3==5, /* jednako */

d = 3!=5; /* razlicito */

printf("3>5 - %d\n5>3 - %d\n3==5 - %d\n3!=5 - %d\n", a, b, c, d);

printf("Konjunkcija : 3>5 && 5>3 - %d\n", a && b);

printf("Disjunkcija : 3>5 || 5>3 - %d\n", a || b);

printf("Negacija : !(3>5) - %d\n", !a);

}





6. Koristeći operatore poređenja i logičke operatore, napisati izraze dodele kojima se:

 

a) promenljivoj rez  dodeljuje vrednost 1, ako se od stranica duzina a,b,c moze sačiniti trougao, a inače 0

REŠENJE:  rez= (a+b >c) && (a+c>b) && (b+c >a)

 

b) promenljivoj rez  dodeljuje vrednost 1, ako su stranice duzina a,b jednake po duzinama, a inače 0

 

c) promenljivoj rez  dodeljuje vrednost 1, ako su stranice duzina a,b takve da su duzine parni brojevi, a inače 0

 

e) promenljivoj rez  dodeljuje vrednost 1, ako su brojevi a,b istog znaka, a inače 0

 

f) promenljivoj rez  dodeljuje vrednost 1, ako su a brojevi a,b takvi da su oba pozitivni brojevi ne veći od 10, a inače 0

 

 

 

7. Koristeći operator ? : napisati izraz koji za tri različita cela broja a, b, c promenljivoj max dodeljuje najveću vrednost među njima.

 

8. Dat je fragment C programa:

i=1; j=1;

while (i+j<10)

 { ++j; i+=2;}

suma=i+j;

 

a) Koliko puta će se ponoviti while ciklus?

b) Koje su vrednosti promenljivih i, j, suma nakon izvrsenja fragmenta?

c) Napisati ekvivalentan for ciklus.

 

9. Dat je fragment C programa:

i=1; j=1;

while (i+j<10)

  ++j; i+=2;

suma=i+j;

 

a) Koliko puta će se ponoviti while ciklus?

b) Koje su vrednosti promenljivih i, j, suma nakon izvrsenja fragmenta?

c) Napisati ekvivalentan for ciklus.

 

10. Dat je fragment C programa:

i=107; j=0;

while (i>0)

  { j+=i%10; i/=10;}

suma=i+j;

 

a) Koliko puta će se ponoviti while ciklus?

b) Koje su vrednosti promenljivih i, j, suma nakon izvrsenja fragmenta?

c) Napisati ekvivalentan for ciklus.

 

11. Koliko puta će se ponoviti while ciklus:

                    while (i<j) suma=i+j;

 Diskusiju izvrŠiti analizirajući moguće vrednosti za celobrojne promenljive i,j.

 

12Koliko puta će se ponoviti while ciklus:

                     while (i) i-=3;

Diskusiju izvrŠiti analizirajući moguće vrednosti za celobrojnu promenljivu i.

 

 

13.  Šta je rezultat rada sledećeg programa

       int i;

      for (i=1; i<10; i++) ;

      printf ("%d  ",  i);

 

14.  Šta je rezultat rada sledećeg programa

       int i;

      for (i=1; i<10; i++)

      printf ("%d  ",  i);

 

15.  Šta je rezultat rada sledećeg programa

 

#include <stdio.h>

#define  KUB(a)      ( a * a * a)

main()

{

int b=1;

printf("KUB(%d) = %d\n", 2*b+4, KUB(2*b+4) );

}

16. Sta je rezultat rada sledeceg programa

#define zbir(x,y)  x+y
main()
{
    int a=0, b=1, c=1;
    printf("%d\n", zbir(3,5)*2);
    printf( (a=b)==(c++>b)? "\\\\\n" : "\"ta\tta\"");
    printf("a=%d\tb=%d\tc=%d\n",a,b,c);
}

 17. Diskutovati u zavisnosti od tipa promenljive c vrednost aritmetickog izraza:

int a = 7;

float b = 3.0;

c = (float) a / b;



18. Sta je rezultat rada sledeceg programa

#include <stdio.h>

main()

{

putchar('\\');

putchar('t');

putchar('\t');

printf("Za %d ispisujem %c", '\\', '\\');

printf("\n\n\\n\\\n\\\\n\n");

}



II grupa zadataka

 

1. Napisati C program koji ispisuje na standardni izlaz zbir prvih n Fibonačijevih brojeva, gde broj n se zadaje sa standardnog ulaza.

2. Napisati C program koji tekst sa standardnog ulaza kopira na standardni izlaz tako da se uzastopne pojave znaka + zamene jednim +, a svaka pojava znaka - udvoji.

3. Napisati program koji ispisuje kvadrate svih brojeva od 5 do 35. Nakon svakog petog kvadrata odstampati znak za novi red.



4. a) Napisati C program koji kreira tabelu sa tri kolone. Zaglavlja kolona su redom niske: Redni broj, Prost broj. U prvoj koloni se nalaze vrednosti od 1..15, u 2. koloni prvih 15 prostih brojeva.

  b) Pod pretpostavkom da datoteka tabela.c sadrzi rešenje Vašeg zadatka, napisati šta je potrebno otkucati u komandnoj liniji Linux operativnog sistema da biste kreirali datoteku prosti.html koja sadrzi tabele opisane u delu a).

4. Napisati C program koji će sa standardnog ulaza učitati niz različitih celih brojeva do broja 0 i ispisati redni broj elementa koji je najveći među njima.

5. Napisati C program koji ispisuje ASCII tabelu.

6.Naredba if. Operatori konjunkcije, disjunkcije i negacije

Učitati sa tastature trocifren broj b. Ispitati da li njegove cifre čine rastući, opadajući, nerastući, neopadajući ili niz koji nije monoton. Odgovor prikazati na ekranu.

Primeri: 134 - rastući, 155 - neopadajući, 531 - opadajući, 776 - nerastući, 132 - nije monoton, 312 - nije monoton.

 

7. Naredba if. Operator ? :

Učitati sa tastature tri cela broja (pozitivni su, međusobno različiti i manji od 30000). Koristeći operator ? : ispisati na ekranu da li je srednji po veličini među njima prvi ili drugi ili treći po redu.

Primeri: 1 3 4 - drugi, 1 3 2 - treći, 2 1 3 - prvi.

 

8. Naredba ciklusa. Operator %. Deljenje nulom.

Napisati C program koji na standardni izlaz ispisuje odgovor da li je uneti prirodan broj x deljiv svim svojim ciframa.  (102 nije, 132 jeste)

 

9. Naredba for. Operatori ++, +=

Učitati sa standardnog ulaza broj n, a zatim n celih brojeva. Ispisati na standardni izlaz aritmetičku sredinu pozitivnih među tim brojevima, ako ima pozitivnih. Koristiti operatore ++ i +=. Program mora da radi sa preusmeravanjem standardnog izlaza.

 

10. Naredba for.  Operatori ++, --

Učitati iz fajla broj n, a zatim n celih brojeva. Odredi najveći od unetih brojeva i koliko se puta pojavljuje.

 

11. Naredba ciklusa.

Učitati sa tastature dva prirodna broja a i b.  Napisati program kojim se proverava da li su to  uzastopni  članovi Fibonačijevog niza. (f[1]=1, f[2]=1, f[n]=f[n-1]+f[n-2] za n>2)

  1. Napisati C program koji prebrojava koliko puta su se pojavile cifre oktalnog sistema u tekstu koji se ucitava sa standardnog ulaza.

  2. Napisati C program koji tekst koji se ucitava sa standardnog ulaza prepisuje na standardni izlaz tako da sva mala slova budu konvertovana u velika slova.

  3. Napisati C program koji na standardni izlaz ispisuje odgovor da li je dati prirodan broj x deljiv sumom svojh ciframa.  (122 nije, 132 jeste)

15. Učitati sa tastature broj x (unsigned int) i brojeve k, p1 i p2 (int), pri čemu je
0£p1£p2<sizeof(unsigned)*8   1£k£sizeof(unsigned)*8.

-   formirati vrednost m (unsigned int) u kojoj je bit na poziciji p jednak 1 akko je p1 £ p £ p2

(pozicije se broje od nule sdesna na levo, počev od 0 do sizeof(unsigned )*8-1).

-   formirati x0, koji se dobija od x postavljanjem na 0 svih bitova koji su u m jednaki 1.

-   formirati x1, koji se dobija od x postavljanjem na 1 svih bitova koji su u m jednaki 1.

-   formirati xi, koji se dobija od x promenom (komplementiranjem) svih bitova koji su u m jednaki 1.

-   ciklično pomeriti sadrzaj promenljive x za k bitova ulevo.

-   prikazati na ekranu (uz komentar) sve četiri izračunate vrednosti u dekadnom i heksadekadnom obliku.

#include <stdio.h>
void main() 
{
  unsigned int x, m, k, p1, p2, x0, x1, xi;
   /*x, k, p1, p2 su brojevi uneti sa tastature tako da  0<=p1<=p2<sizeof(unsigned)*8 i da  1<=k<=sizeof(unsigned)*8 */
   /* m, x0, x1, xi su resenja odgovarajucih podzadataka */ 


  printf("\nUnesite brojeve x, k, p1 i p2\n ");

  scanf("%u%u%u%u", &x, &k,  &p1, &p2);


  /* m je unsigned int takav da bit na poziciji p je jednak 1 akko je p1 <=p <= p2*/
  m=(1 << (p2-p1+1)) - 1; 
  m<<=p1;
  printf("m= %d = %x\n", m, m);


/* x0   se dobija od x postavljanjem na 0 svih bitova koji su u m jednaki 1 */
  x0 = x & (~m);

/*  x1  se dobija od x postavljanjem na 1 svih bitova koji su u m jednaki 1 */
  x1 = x | m;

/* xi   se dobija od x promenom svih bitova koji su u m jednaki 1*/
  xi = x ^ m;

/* ciklicno pomeren sadrzaj promenljive x za k bitova ulevo */
  x = (x << k)| (x  >> (sizeof(unsigned )*8-k));

    printf("x0= %d = %x\n", x0, x0); 
    printf("x1= %d = %x\n", x1, x1); 
    printf("xi= %d = %x\n", xi, xi); 
    printf("x= %d = %x\n", x, x); 
}

 III grupa zadataka

 

1. Napisati C program koji ucitava sa standardnog ulaza linije limitirane duzine. Ispisati na standardni izlaz liniju cija duzina je maksimalna. Broj linija nije unapred poznat. Ako postoji vise linija cija duzina je maksimalna ispisati ma koju od njih.

  1. Napisati funkciju (sa prototipom int palindrom(char s[])) koja proverava da li je dati string s palindrom, tj. da se isto cita u oba smera. Npr. niska “neven”

    
    
int palindrom(char s[])
{int levo,desno;
for(levo=0,desno=strlen(s)-1;levo<desno && s[levo]==s[desno];levo++,desno--) ;
return (levo >= desno);
}

  1. Napisati C program koji ucitava sa standardnog ulaza linije limitirane duzine, pronalazi liniju cija duzina je maksimalna i ispisuje je obrnutu. Broj linija nije unapred poznat. Ako postoji vise linija cija duzina je maksimalna ispisati ma koju od njih obrnuto.

POMOC:
void reverse(char s[]){
int pom,levo,desno;
     for(levo=0,desno=strlen(s)-1;levo<desno;levo++,desno--) pom=s[levo],s[levo]=s[desno],s[desno]=pom;
}

4. Napisati C program koji ucitava sa standardnog ulaza u svakoj liniji po jedan heksadekadni triplet kojim je predstavljena neka od boja RGB modela. Ispisati na standardni izlaz redni broj linija koji sadrze opis bele boje (#FFFFFF).

Na primer   ULAZ
                  #FFFFF
                  #FF0033
                  #AA00EE
                  #FFFFF
                  #8000FF
IZLAZ: 1, 4

5. Napisati C program koji ucitava sa standardnog ulaza u svakoj liniji po jedan heksadekadni triplet kojim je predstavljena neka od boja RGB modela. Ispisati na standardni izlaz heksadekadni triplet ciji dekadni zapis koda je najmanji .

Na primer   ULAZ
                  #FFFFF
                  #10004a
                  #aa00ee
                  #FFFFF
                  #8000FF
IZLAZ: #10004a, jer dekadna vrednost heksadekadnog broja 10004a je 1*165 +  4*16 + a= 1048650


6. Napisati C program koji ucitava sa standardnog ulaza linije limitirane duzine, pronalazi liniju cija duzina je maksimalna i ispisuje broj pojava dekadnih cifri u toj liniji. Broj linija nije unapred poznat. Ako postoji vise linija cija duzina je maksimalna ispis pojava cifara izvrsiti za ma koju od njih. Izvestaj treba da je u obliku:
  Broj pojave cifre 0 je ...  Broj pojave cifre 1 je...     Broj pojave cifre 9 je...


              

IV grupa zadataka

1. Napisati C program koji ucitava sa standardnog ulaza u svakoj liniji po jedan nenegativan dekadni broj sa ne vise od 80 cifara. Ispisati na standardni izlaz najmanji broj . Ako ima vise takvih ispisati ma koji.

Na primer   ULAZ
                  111111111111111111111111111111
                  99999234
                  000000000000000000000000004
                  09
                  223400000000000000000000
IZLAZ: 4

 

2. Napisati C program koji ucitava sa standardnog ulaza u svakoj liniji po jedan nenegativan dekadni broj sa ne vise od 5 cifara. Ispisati na standardni izlaz broj cija suma kubova cifara je najmanja. Ako ima vise takvih ispisati ma koji.

Na primer   ULAZ
                  9
                  111 
                  04
                  22
                  1101
IZLAZ: 111 ili 1101, jer je najmanja suma 13+ 13+ 13= 3, te se ispisuje 111 ili 1101

3. Napisati C program koji ucitava sa standardnog ulaza u svakoj liniji po jedan nenegativan dekadni broj sa ne vise od 5 cifara i ispisuje neparne brojeve u obrnutom poretku cifara .

Na primer   ULAZ
                  9
                  127 
                  04
                  22
                  1105  

IZLAZ:     9
             721
            5011

4. Napisati C program koji ucitava sa standardnog ulaza u svakoj liniji po jedan pozitivan dekadni broj sa ne vise od 5 cifara. Ispisati na standardni izlaz najmanji prost broj.

5. Napisati C program koji ucitava sa standardnog ulaza pozitivan ceo broj n i ispisuje na standardni izlaz u zasebnim redovima vrednosti suma:
  a) 1!+ 2! + 3! +...+ n!        b) n! - (n-1)! + (n-2)! - (n-3)! +... 1!

6. Napisati C program koji ucitava sa standardnog ulaza pozitivan ceo broj n i ispisuje na standardni izlaz n-ti po velicini prost broj.

 

V grupa zadataka

1. Napisati C program koji ucitava sa standardnog ulaza dva datuma u formatu dd.mm.gggg i ispisuje stariji datum.

Na primer. ULAZ  22.11.2005.  1.1.2006.     IZLAZ 22.11.2005.
                 ULAZ  22.11.2005.  22.11.2005.     IZLAZ nema starijeg


 

2. Napisati C program koji ucitava sa standardnog ulaza datum u formatu dd.mm.gggg i ispisuje na standardni izlaz datum prethodnog dana i datum narednog dana. Pretpostaviti da uneti datumi su nakon datum 15.10.1573.

Na primer  ULAZ  01.11.2005.  IZLAZ  31.10.2005.  2.11.2005.
                 ULAZ  31.12.2005.  IZLAZ  30.12.2005.  1.01.2006.

3. Napisati C program koji ucitava sa standardnog ulaza dva datuma u formatu dd.mm.gggg i ispisuje ceo broj dana izmedju ta dva datuma.

Na primer  ULAZ  22.11.2005.  23.11.2005.     IZLAZ  0
                 ULAZ  23.11.2005.  12.11.2005.     IZLAZ  10

4. Napisati C program koji ucitava sa standardnog ulaza vremenske oznake unutar filmskog titla u obliku hh:mm:ss tj cas:minut:sekund. Vremenske oznake nisu dobro sinhronizovane sa titlom i treba ih pomeriti za -00:00:11. Ispisati na standardni izlaz korigovane vremenske oznake za titl s obzirom na zadati pomeraj.

Na primer  ULAZ                           IZLAZ 
                01:00:00                          00:59:89
                03:58:10                          03:57:99

VI grupa zadataka

1. Napisati C program koji sa standardnog ulaza unosi pozitivne cele brojeve i,j,n i ispisuje na standardni izlaz broj n kome su razmenjeni i-ti i j-ti bit. Pozicija najnizeg bita je 0.

Na primer ULAZ 0,3,8    IZLAZ 1  jer  0-ti bit u 8ci je 0, 3-ci bit u 8ci je 1.

2. Napisati C program koji sa standardnog ulaza unosi pozitivan ceo broj n<=31, proverava korektnost unetog broja i ispisuje broj bitova koji su jednaki 1 u binarnoj reprezentaciji za n.

3. Napisati C program koji sa standardnog ulaza unosi pozitivan ceo broj n<=8, proverava korektnost unetog broja i ispisuje na standardni izlaz trocifrene brojeve cija suma bitova je jednaka n. Ispis brojeva urediti u opadajucem poretku.

4. Napisati C program koji sa standardnog ulaza unosi pozitivan ceo broj n<=31 i ispisuje na standardni izlaz sumu bitova na parnim pozicijama i sumu bitova na neparnim pozicijama.

  



Naslovna

Primene računara


e-mail: Jelena Grmuša





URL: http://www.matf.bg.ac.yu/~jelenagr/op/