TEORETSKI DEO-NASTAVAK



NCP=Napisati C program


ZNAKOVNE KONSTANTE

char znak=

printf("%d", znak);

printf("%c", znak);

'A'

65

A

'\n'

10

štampa prelaz u novi red

'\a'

7

ispisuje zvoni

'\b'

8

pomera kursor za 1 poziciju unazad

'b'

98

b

'\t'

9

horizontalni tabulator

'\\'

92

\

'\''

39

'

'\"'

34

"

'\101'

65

A

'\x41'

65

A



  1. Da li je sledeći program korektan?

    #include <stdio.h>
    main()
    {
    printf("A\n\aabc\n\060\t\x4a\n");
    }

REALNI TIP

float a,b,c;

double x;



REALNE KONSTANTE




Mogu se izostaviti



  1. NCP koji izračunava hipotenuzu pravouglog trougla čije katete unosi korisnik programa sa tastature.

    #include <stdio.h>

    #include <math.h>

    main()

    {

    float hipotenuza, a, b;

    printf("Unesite katete trougla: "); scanf("%f%f",&a,&b);

    hipotenuza=sqrt(a*a+b*b);

    printf("\nHipotenuza je %f\n",hipotenuza);

    }

Pretprocesorska direktiva #define

#define PI 3.1459

#define EURO 77.89

#define RADIAN 0.01745329

#define NEGRADIAN -RADIAN

#define DUPLO (PI*2)



  1. NCP koji sa tastature učitava vrednost ugla u stepenima i ispisuje vrednost kosinusa i sinusa tog ugla koristeci ugrađene funkcije cos, sin iz zaglavlja <math.h>

    #include <stdio.h>

    #include <math.h>

    #define RAD 0.01745329

    main()

    {

    int x;

    printf("Unesite vrednost ugla\n");

    scanf("%d", &x);

    printf("cos(%d)=%f\n", x, cos(x*RAD));

    printf("sin(%d)=%f\n", x, sin(x*RAD));

    }

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

    #include <stdio.h>
       main()
       {
        float x;
        printf("Unesite realan broj : ");

        /* Eksperimentisati sa vrednoscu npr. 80.43 */
        scanf("%f",&x);
        printf("Uneli ste broj (%%f): %f\n", x);
        printf("U eksponencijalnoj notaciji (%%e): %e\n", x);
        printf("U naucnoj notaciji (%%g): %g\n", x);
        printf("Broj zaokruzen na nula decimala je : %.0f\n", x);    
       }

    DOMAĆI

IZLAZNA FUNKCIJA printf



%[ opcije ] [ sirina_polja ] . [tacnost] [h | l | L ] tip_konverzije



opcije:

", + - ‘ ‘(space)

+ ispred pozitivnog broja

- poravnanje na levu ivicu

o broj će imati vodeće nule

# alternativni ispis ;

za o broj će počinjati nulom ;

za x,X broj će počinjati sa 0x ili 0X;

za f, e, E uvek će imati decimalnu tačku ;

za g,G neće biti brisane nule sa desne strane



sirina_polja je najmanja širina izlaznog polja

tacnost je preciznost izlaznog polja:

najveća dužina polja (s)

najmanji broj cifara( d,i,x,X,u,o)

tip_konverzije:

d,i - decimalni(signed)

u,o - decimalni,oktalni (unsigned)

x,X - heksadecimalni (unsigned)

f - oblik: [-]mmm.ddd – bez eksponenta

e,E -oblik: [-]m.ddde[znak]xx ili E[znak]xx

g,G – f ili e (odnosno E ) – odabira se kraći ispis

c , s – jedan znak , string

p - vrednost pointera(adrese) obično se izdaje kao za x heksadekadno

n - broj znakova izdatih do ovog znaka biće upisan kao objekat čija je adresa argument



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

    #include <stdio.h>

    #define IME "VLADE DIVAC"

    main()

    {

    printf("%s\n",IME);

    printf("%5s\n",IME);

    printf("%15s\n",IME);

    printf("%-15s\n",IME);

    printf("%-15.9s\n",IME);

    printf("%15.9s\n",IME);

    printf("%.9s\n",IME);

    }






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

    #include <stdio.h>

    #define PISI printf("***********\n");

    main()

    {

    int i=15,j=-2;

    PISI

    printf("|%4d|%4d|\n",i,j);

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

    printf("|%4o|%04o|\n",i,i);

    printf("|%4x|%04X|\n",i,i);

    PISI

    }


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

    #include <stdio.h>

    main()

    {

    float x=9.789;

    printf("|%f|\n",x);

    printf("|%10.2f|\n",x);

    printf("|%-10.2f|\n",x);

    printf("|%10.0f|%-10.f|\n",x,x);

    printf("|%10e|%10f|%10g|\n",x,x,x);

    }




DOMAĆI

    3. NCP koji ispisuje najveće i najmanje vrednosti za tipove int, long, ako su vrednosti imenovanih konstanti INT_MIN, INT_MAX, LONG_MIN, LONG_MAX definisane u zaglavlju limits.h

    4. NCP koji učitava sa standardnog ulaza prirodan broj veći od 1000 i ispisuje vrednost tog broja sa razmenjenim ciframa desetica i hiljada.

ULAZ

IZLAZ

12345

14325

2147315

2141375

1007

0017

22. NCP koji sa standardnog ulaza unosi vremenske oznake unutar filmskog titla u formatu hh:mm:ss. Ispisati na standardni izlaz vremensku oznaku u sekundama.

ULAZ

IZLAZ

01:00:00

3600

00:02:05

125

03:01:07

10867


#include <stdio.h>

main()

{

int cas, min,sec; /*ulazne vremenske oznake*/

long rez; /* izlazna vremenska oznaka u sekundama */

printf("Unesite vremensku oznaku\n");

scanf("%d:%d:%d", &cas, &min, &sec);

rez=3600*cas+60*min+sec;

printf("\n%ld\n",rez);

}


  1. Šta je rezultat sledećeg programa ako se unesu vrednosti

    123 456 789

    12 34 56

#include <stdio.h>

main()

{

int i,j,k;

scanf("%2d%3d%2d",&i,&j,&k);

printf("|%d|%d|%d|\n",i,j,k);

scanf("%d%d%d",&i,&j,&k);

printf("|%d|%d|%d|\n",i,j,k);

}


IZLAZ

|12|3|45|

|6|789|12|

Operacije, izrazi, operatori

Aritmetički operatori

Binarni * / % + -

Unarni + -



printf("%d\n", 15/2);

printf("%d\n", 2/4);

printf("%d\n", -7/2);

printf("%f\n", 7./.4);

  1. Sledeći program učitava sa standardnog ulaza broj opravdanih i neopravdanih izostanaka učenika i treba da ispisuje procenat neopravdanih u odnosu na ukupan broj izostanaka. Pretpostaviti da opravdani + neopravdani >0.

    Da li je program sintaksno korektan? Da li je semantički korektan?

#include <stdio.h>

main()

{

int opravdani, neopravdani;

float procenat;

scanf("%d%d", &opravdani, &neopravdani);

procenat= neopravdani/(opravdani+neopravdani)*100;

printf("\n%f\n", procenat);

}

ULAZ

OČEKIVANI IZLAZ

IZLAZ IZ PROGRAMA

8 2

20

0.000000

0 2

0

Navedite sami







UPOZORENJE: neopravdani <=(opravdani+neopravdani) => celobrojno deljenje daje kolicnik jednak nuli.

Da li smo to zeleli?



POPRAVLJENO REŠENJE

procenat= (neopravdani+0.0) /(opravdani+neopravdani)*100;

procenat= (neopravdani*1.0)/(opravdani+neopravdani)*100;

procenat= (float)neopravdani/(opravdani+neopravdani)*100;

Operacije poređenja

Rezultat poređenja je 1, ako je logička vrednost tačna. Ako je netačno, onda je rezultat 0.

== jednakost

!= različitost

> strogo veće

>= veće ili jednako

< manje

<= manje ili jednako

Operacije poređenja su nižeg prioriteta od aritmetičkih operacija. Među operacijama poređenja najnižeg prioriteta su == i !=.

Izrazi koji imaju vrednost 1

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

Probajte

printf(“%d”, 9==7);

printf(“%d”, 9==9);



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

    #include <stdio.h>

    main()

    {

    int x=1,y=3;

    printf("%d\n", y>x+3);

    printf("%d\n", 0<x<3);

    printf("%d\n", (x/y)*y==x);

    }

IZLAZ

0 jer y>(x+3)

1 jer 0<x ima vrednost 0 ili 1 što je manje od 3

0 jer 1/3=0, 1.0/3=0.33333 => 1/3*3 nije jednako 1

Logički operatori


Formiraju izraze čija vrednost je 0 ili 1.

! unarna negacija (najviši prioritet)
&& logičko i (visi prioritet od ili)
|| logičko ili

Izračunavaju se sleva na desno!

Prioritet logičkih operatora je niži od operatora poređenja

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 što i ((a>b) && (b>c)) || (b>d)
x && y+3 je isto sto x && (y+3)

LENJO IZRAČUNAVANJE

Prilikom izracunavanja izraza A && B, ukoliko je A netacno, izraz B se ne izracunava.

Prilikom izracunavanja izraza A || B , ukoliko je A tacno, izraz B se ne izracunava.





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

    #include <stdio.h>

    main()

    {

    int a=2,b=3;

    printf("%d %d\n", !a, !!b);

    printf("%d\n", !a||b);

    printf("%d\n", (1&&2) || (b+1&&a-2));

    printf("%d\n", 2/5 && 3);

    }



IZLAZ
0 1

1

1

0