Vežbe iz Osnova programiranja

1. Napisati C program koji na standardni izlaz ispisuje poruku Zdravo, svete u jednom redu.

#include <stdio.h>
main()
{
/*iskazi f-je main su zatvoreni u zagrade */
   printf("Zdravo, svete\n"); /*poziv f-je printf da odstampa poruku*/
}
 

/*Ovo je komentar u programskom jeziku C. Koristi se da se pojasni uloga novouvedenih promenljivih u programu, da se pojasni uloga delova programskog kôda, da se objasni uloga potprograma u programu tj. ocekivani ulaz i izlaz. Ne koristi se da se objasne delovi sintakse programskog jezika C.*/

PRIMER KORISNOG KOMENTARA

int a,b,c; /* a je brojac u ciklusu, b je tekuca cifra sa ulaza, c je rezultat sabiranja cifri sa ulaza */

PRIMER NEPOTREBNOG KOMENTARA

main() /*ovo je funkcija main */

int a,b,c; /* a, b, c su tri celobrojne promenljive*/

Oznaka kraja naredbi

Mnoge linije C kôda se završavaju znakom tačka-zarez (;), ali ne i sve linije. Na primer, nije potrebno stavljati tačku-zarez (;) iza nepotpunih linija kôda.

Takve su, na primer, linije koje se završavaju vitičastim zagradama ( vitičasta zagrade = simboli za grupisanje kôda između početka i kraja)

2. Napisati C program koji na standardni izlaz ispisuje poruku Zdravo, svete u jednom redu.

#include <stdio.h>
main()
{

/*poziv funkcija printf da odstampaju poruku*/
   printf("Zdravo, sve");
   printf("te"); printf("\n");
}
 

3. Napisati C program (skraćeno NCP) koji na standardni izlaz ispisuje poruku Zdravo, svete, štampa prazan red i u narednom redu ispisuje poruku Bonjour, Monde.

#include <stdio.h>
main()
{
         printf("\nZdravo, svete"); /*poziv f-je printf da odstampa poruku na srpskom*/
         printf("\n\n"); /*prelaz u sledeci red i stampanje praznog reda*/
         printf("Bonjour, Monde\n"); /*poziv f-je printf da odstampa poruku na francuskom*/
}
 

4. Napisati C program (skraćeno NCP) koji zadaje vrednosti dve celobrojne promenljive i na standardni izlaz ispisuje njihovu razliku.

promenljiva - ime koje označava promenljivu vrednost.Vrednost promenljive se može pročitati, promeniti, izdati na izlaz. U ovom zadatku se vrednost promenljive rez izdaje na izlaz.

Imena promenljivih:

Da bi se promenljiva mogla upotrebljavati ona se mora na početku programa deklarisati. Na primer
int x; /*Deklaracija celobrojne promenjive x*/
float x; /*Deklaracija realne promenljive x*/

Prilikom deklaracije može se izvržiti i početna inicijalizacija (dodela početne vrednosti promenljivoj). Na primer
int x=5; /*Deklaracija i inicijalizacija celobrojne promenljive x*/

#include <stdio.h>
     main()
      {
             /*deklaracija vise promenljivih istog tipa (tipa int ) */
           int rez,pom1,pom2;
            /*rezultat oduzimanja pom1-pom2 -> rez*/
             pom1=20;
              pom2=15;
             rez=pom1-pom2;

            /*ispisivanje rezultata*/
             printf("Rezultat je %d-%d=%d\n",pom1,pom2,rez);
      }


Tipovi podataka


Osnovni tipovi podataka:
int ceo broj
char znak, karakter (1 B)
float realan broj
double realan broj dvostruke tacnosti

Postoje kvalifikatori koji se pridruzuju osnovnim tipovima podataka:
short int x;
ili krace
short x;

long int x
ili krace
long x;

Velicina tipova podataka

broj bajtova(short) <= broj bajtova(int) <= broj bajtova(long)
Postoje kvalifikatori signed i unsigned koji se odnose na označene i neoznačene cele brojeve.
Na primer:
signed char: -128 do 127
dok je
unsigned char: od 0 do 255.
Float, double i long double.

Aritmetički operatori (binarni)


Neki od operatora: (za detalje videti širu tabelu)
/ deljenje
* množenje
%ostatak pri deljenju
+ sabiranje
- oduzimanje

5. Napisati C program (skraćeno NCP) koji na standardni izlaz ispisuje malo slovo Z u polju širine tri, a u sledećem redu veliko slovo Z u polju širine pet.

    Tabela ASCII kôdova

 


#include <stdio.h>
main()
  {
       printf("Slova:\n%3c\n%5c\n", 'z' , 'Z');
  }

Izlaz iz programa:
Slova
     z
        Z
 

Argumenti funkcije printf - opisi formata konverzije (iza znaka %)

%c je za štampanje karaktera
%3c je za štampanje karaktera u polju širine tri pozicije
SLIČNO: %3d za štampanje celog broja na tri pozicije ili %6d za štampanje broja na 6 pozicija.
Pravila:
%d štampaj kao označen ceo dekadni broj
%6d stampaj kao ceo broj u polju širine 6 pozicija
%f štampaj kao realan broj
%6f štampaj kao realan broj u polju širine 6
%o štampaj kao oktalni broj
%x štampaj kao heksadekadni broj
%.2f štampaj kao realan broj sa dve decimale
%6.2f stampaj kao realan broj u polju širine 6 ynakova, a od toga 2 iza decimalne tačke
%s štampaj string
%% za štampanje procenta

6. Šta je rezultat rada sledećeg programa?

#include <stdio.h>
main()
{
   int a=21,d=5; float c=8.953, b=6.0;
   printf("d=%d c=%f\n",d,c);
   printf("a + d/c + b=%f\n",a+ d/c + b);
   printf("|%5f |%5.3f| %5.0f|%5.1f\n",c,c,c,c);
}

7. Napisati C program (skraćeno NCP) koji na standardni izlaz ispisuje malo i veliko slovo A i njihovu vrednost u standardnom setu karaktera.

    Tabela ASCII kôdova

 


#include <stdio.h>
main()
{
   int vrednost;
   vrednost='A';
    printf("%s\nkarakter=%3c\nvrednost=%3d\n","Veliko slovo",vrednost,vrednost);

   vrednost='a';
   printf("%s\nkarakter=%3c\nvrednost=%3d\n","Malo",vrednost,vrednost);
}



    

 

ZA RAZMIŠLJANJE I UVEŽBAVANJE: ASCII kôd ZADACI

8. NCP koji sa standardnog ulaza učitava ceo broj i ispisuje na standardni izlaz poslednju cifru tog broja (cifru jedinica).

#include <stdio.h>
main()
{
   int x, cifra ; /*x je broj koji se unosi sa stdin, cifra je vrednost poslednje cifre koja se ispisuje na stdout*/
   printf("Unesite ceo broj: ");
   scanf("%d",&x); /* UOCITE znak & (operator uzimanja adrese) pre imena promenljive u funkciji scanf */

   cifra=x % 10; /* poslednja cifra broja x je zapravo ostatak pri deljenju broja x sa 10*/

   printf("\nPoslednja cifra broja %d jeste %d \n",x, cifra);
}

IZRAČUNAJTE:

15 %3 =
5 + (8%3) =
5 + 8%3 =
(5 + 8)%3 =
5 + 8%8 =
5 + 8%0 =

 

9. Šta je rezultat rada sledećeg programa?

#include <stdio.h>
main()
 {
     int x=506, y=3, z=21, t=2;
     printf("x=%d y=%d\n",x,y);
     printf("Razlika z - t=%d\n", z-t);
     printf("Kolicnik z / t =%d\n",z / t);
     printf("-x=%d\n",- x);
     printf("Ostatak pri deljenju x %% y=%d\n", x%y);
}

Ako su oba operanda u operaciji deljenja celi brojevi, onda se rezultat formira odbacivanjem tacke i decimalnog dela rezultata. Ako su oba operanda u operaciji deljenja pozitivni celi brojevi, celobrojni deo se zaokruzuje na manju vrednost. Ako je jedan od operanada u celobrojnoj operaciji deljenja negativan ceo broj, negativan rezultat zavisi od implementacije.

10. Šta je rezultat rada sledećeg programa?

#include <stdio.h>
main()
 {
     int x=50, y=15, z=4, t=2;
     printf("Proizvod %d*%d =%d\n",x,z,x*z);
     printf("Kolicnik y / t =%d\n",y/ t);      printf("Pogresan realan kolicnik y / t =%f\n",y/ t);
    printf("Pravi realni kolicnik y / t =%f\n",(float)y/(float) t);

}

IZRACUNAJTE -5/2 +11%3*2

11. NCP koji sa standardnog ulaza učitava višecifren ceo broj i ispisuje na standardni izlaz pretposlednju cifru tog broja (cifru desetica).

#include <stdio.h>
main()
{
   int x, cifra ; /*x je broj koji se unosi sa stdin, cifra je vrednost pretposlednje cifre koja se ispisuje na stdout*/
   printf("Unesite ceo broj: ");
   scanf("%d",&x);

   cifra=(x /10)% 10; /* pretposlednja cifra broja x je zapravo ostatak pri deljenju broja (x/10) sa 10*/

   printf("\nPretposlednja cifra broja %d jeste %d \n",x, cifra);
}

12. NCP koji sa standardnog ulaza učitava realan broj i ispisuje na standardni izlaz prvu decimalu (prvu cifru iza decimalne tacke).

#include <stdio.h>
main()
{
  float x; /*x je broj koji se unosi sa stdin*/
  int d; /*d je prva decimala broja x*/

   printf("Unesite realan broj: ");
   scanf("%f",&x);

   d=(int)(x*10)%10;

     printf("\nPrva decimala broja %f jeste %d \n",x, d);
}

13. Korišćenjem makrozamene za protivrednost jednog evra u dinarima, NCP koji ispisuje na standardni izlaz dinarsku vrednost za četiri evra. Kako bi ispisali dinarsku protivvrednost jednog evra sa 0 decimala?

#include <stdio.h>
#define EURO 60.0477
main()
{
   printf("4 eura ima vrednost %f dinara\n", 4*EURO);
   /*printf("1 euro ima vrednost %.0f dinara\n",EURO);*/
}
 

Relacioni i logički operatori


Relacioni operatori:
> >= < <= isti prioritet
== != nizi prioritet

(2003<2006)
(9<=10)
a < 5 != 1 <=> (a < 5)!=1

Logicki operatori:
! unarna negacija (najvisi prioritet)
&& logicko i (visi prioritet od ili)
|| logicko ili izracunavaju se sleva na desno!

5 && 4 vrednost je tacno
10 || 0 vrednost je tacno
0 && 5 vrednost je 0
!1 vrednost je 0
!9 vrednost je 0
!0 vrednost je 1
!(2>3) je 1

a>b && b>c || b>d je isto sto i ((a>b) && (b>c)) || (b>d)
koja je vrednost ako je a=10, b=5, c=1, d=15?

14.

a) NCP koji unosi ceo broj sa standardnog ulaza i ispisuje da li uneti broj je negativan.

b)NCP koji unosi ceo broj sa standardnog ulaza i ispisuje da li je uneti broj negativan ili pozitivan ili jednak nuli.

Deo a)

#include <stdio.h>
main()
{
  int x; /*x je broj koji se unosi sa stdin*/

   printf("Unesite ceo broj: ");
   scanf("%d",&x);

  if (x < 0) printf("\nBroj %d jeste negativan\n",x);

    
}

KONTROLA TOKA - if selekcija

if (izraz) blok_naredbi_1
else blok_naredbi_2

Deo b)

#include <stdio.h>
main()
{
  int x; /*x je broj koji se unosi sa stdin*/

   printf("Unesite ceo broj: ");
   scanf("%d",&x);

  if (x < 0) printf("\nBroj %d jeste negativan\n",x);
else if (x == 0) printf("\nBroj %d je nula\n",x);
  else printf("\nBroj %d jeste pozitivan\n",x);

    
}

VISESTRUKI if-else

if-else-else-else-...

if (izraz1) iskaz1
else if (izraz2) iskaz2
else if (izraz3) iskaz3
else iskaz4 /*ovaj if -else-else-else je jedna naredba !!!*/

if-if-...-else

VAZNA NAPOMENA: else se odnosi na prvi neuparen if. Ako se zeli drugacije moraju se navesti viticaste zagrade.


if (izraz)
  if (izraz1) iskaz 1
else iskaz

ovo else se odnosi na drugo if a ne na prvo if!!!

if-if-...-else


if (izraz)
{
  if (izraz1) iskaz 1
}
else iskaz

tek sada se else odnosi na prvo if!!!

15. NCP koji unosi ceo broj sa standardnog ulaza i ispisuje da li uneti broj je paran.

#include <stdio.h>
main()
{
  int x; /*x je broj koji se unosi sa stdin*/

   printf("Unesite ceo broj: ");
   scanf("%d",&x);

  if (x %2 == 0) printf("\nBroj %d jeste paran\n",x);

    
}

ZA VEZBU: NCP koji unosi ceo broj sa standardnog ulaza i ispisuje da li uneti broj je trocifren.

 

16. NCP koji unosi ceo broj sa standardnog ulaza i ispisuje logičku vrednost unetog broja (tačno ili netačno).

#include <stdio.h>
main()
{
  int x; /*x je broj koji se unosi sa stdin*/

   printf("Unesite ceo broj: ");
   scanf("%d",&x);

  if (x) printf("\nLogicki gledano %d jeste tacno\n",x); else printf("\n%d je netacno\n",x);
}

Uslovni izraz ? :


Slicno kao if.
izraz1 ? izraz2 : izraz3

z = (a<b)? a : b; /*z=min(a,b); */
/*MOGLI SMO PISATI if (a<b) z=a; else z=b; */

17. NCP koji zadaje vrednosti dve realne promenljive i korišćenjem makrozamene naći kvadrat prve i maksimum njihovih vrednosti. Rezultat ispisati na standardni izlaz.

#include <stdio.h>
#define KVADRAT(x) ( (x)*(x) )
#define MAX(x,y) ( ( (x)>(y)) ? (x) : (y) )
main()
{
     float w=3.2,y=8.8 ;
     printf("KVADRAT(%.2f)=%.2f\n",w,KVADRAT( w));
    printf("MAX(%.2f , %.2f)=%.2f\n",w,y,MAX(w,y));
}




e-mail: Jelena Hadži-Purić