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 |
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
celobrojni deo
razlomljeni deo
decimalna tačka
E sa eksponentom
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)
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:
broj decimala (f,e,E,g,G)
najveća dužina polja (s)
najmanji broj cifara( d,i,x,X,u,o)
h,l,L : short,long, long double redom
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);
}
Š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);
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);
Š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.
Š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