Pripremni zadaci za vezbanje sa rešenjima iz prethodnih godina
I grupa zadataka
Š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);
}
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.
12. Koliko 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)
Napisati C program koji prebrojava koliko puta su se pojavile cifre oktalnog sistema u tekstu koji se ucitava sa standardnog ulaza.
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.
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.
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); }
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.