770 likes | 964 Views
Увод у програмÑки језик C Предавање 2. Електротехнички факултет у ИÑточном Сарајеву. Садржај. Ðаредбе O Ñновна програмÑка наредба Секвенца или блок наредби ДоÑег или облаÑÑ‚ важења идентификатора Ðаредбе гранања (Ñелекције) Ðаредбе понављања (петље или циклуÑи) УÑловни Ñкокови. Ðаредбе.
E N D
Увод у програмски језик C Предавање 2 Електротехнички факултет у Источном Сарајеву
Садржај Наредбе • Oсновна програмска наредба • Секвенца или блок наредби • Досег или област важења идентификатора • Наредбе гранања (селекције) • Наредбе понављања (петље или циклуси) • Условни скокови
Наредбе • Сваки програм написан на неком програмском језику је састављен од низа појединачних наредби. • Редослед извршавања наредби je секвенцијалан • Измена редоследа може постићи помоћу управљачких наредби.
Наредбе • У управљачке наредбе спадају: • наредбе гранања if-elseи switchнаредбе. • Наредбе за насилну промену тока:break, continue, goto, return • наредбе понављања (петље, циклуси или итерације) у које спадају for, while и dо-while наредбе.
Секвенца или блок наредби • Блок наредби: скуп програмских наредби које чине једну целину и које се извршавају једна за другом. • Блок наредби се пише унутар витичастих заграда { }и има општи облик: { izraz1; izraz2; ... izrazN;} или { izraz1; izraz2; ... izrazN; }
Наредбе -рекапитулација Сложена наредба-блок извршава се тако што се извршавају једна по једна наредба (искази) од којих је она састављена Еквивалентна је БЛОКУ наредби у PASCALU BEGIN ... END - Свака наредба (исказ) завршава са ; (терминатор исказа) - Основне наредбе: Наредбе гранања и избора (селекција):if, switch Наредбе за понављање (петље):while, do while, for Наредбе за насилну промену тока:break, continue, goto, return - Сложена (компонована) наредба Настаје када једну или више наредби групишемо коришћењем великихзаграда{} Општи облик сложене наредбе је: { iskaz1; … ; iskazN ; } { iskaz1; iskaz2; … iskazN; }
Област важења идентификатора • Досег или област важења идентификатора(scope) • означава део програма у ком идентификатор може да се користи, тј. део програма у ком је идентификатор „видљив”. • област важења идентификатора је од места где је дефинисандо краја блока! • Оваква област важења се назива блоковска област важења.
Досег main() { int prom1=1; double prom3= prom2 + 5.92;/*GRESKA */ /*error C2065: 'prom2': undeclared identifier*/ double prom2=3.22; ... } C језик је строго типски и свака променљива пре употребе мора бити декларисана и дефинисана
Досег main() { int prom1=1; double prom2=3.22; double prom3= prom2 + 5.92; prom3= (double)prom1*54.76; ... { /* pocetak unutrasnjeg bloka*/ intprom1 =4; /* lokalna promenljiva prom1*/ prom2= prom2*prom2; ... printf("%d %f\n", prom1, prom3); } /* kraj unutrasnjeg bloka*/ prom1+=32; printf("%d %f\n", prom1, prom3); } 4 54.76 33 54.76
Наредбе гранања и избора - селекција • Наредбе условног гранања-скока: if , if else, if elseif ...еlse • Наредба селективног гранања: switch • Наредбе контролисаног скока:break, continue • Наредба безусловног скока:goto,
Наредба if else- општи облик if(izraz1) { naredbe } else if(izraz2) { naredbe } ... else { naredbe }
Наредба гранања и избора - селекција • Омогућава гранање програма: • Једноблоковско: if, • двоблоковско: if - else, • Вишеблоковско: if - else if - ... - else
Наредба:if услов услов ИСТИНА ИСТИНА ЛАЖ ЛАЖ исказ Сложени исказ Једноблоковско гранање if (uslov) { iskaz1; ... iskazN; } if (uslov) iskaz;
Наредба: if if(а>5)b=3; if(b>=3)/* НЕМА ; иза услова*/ { b=1;count = 45.32;slovo = 'A'; }
Пример наредбe: if Програм који проверава да ли је учитани број позитиван #include <stdio.h> main() { float broj; printf(”Unesite broj: ”); scanf( ”%f”,&broj); if ( broj>0 ) printf( ”Broj je pozitivan\n”, ); }
Двоблоковско гранање:ifelse ISTINA ISTINA LAŽ LAŽ iskaz1 složeni iskaz1 iskaz2 složeni iskaz2 uslov uslov if (uslov) { iskaz1; ... iskazN; } else { iskaz1; ... iskazN; } if (uslov) iskaz1; else iskaz2;
if (x < 0) if (y < 0) broj_a=5; else broj_a=8; if (x < 0) if (y < 0) broj_a=5; else broj_a=8; Наредба двоблоковског гранања: if else
if (x < 0) if (y < 0) broj_a=5; else ; else Broj_a=8; if (x < 0) { if (y < 0) broj_a=5; } else Broj_a=8; Наредба if else
Наредба if else • if(brој != 0)је истo што и if(brој) • if(brој == 0)је истo што иif(!brој) if(brој_а == 0) printf("broj a je jednak nuli\n"); else printf("broj a je razlicit od nule\n");
Пример: if else Учитати природни број проверити да ли је паран или непаран. #include <stdio.h> main() { int broj, ost; printf( ”Unesite broj: ” ); scanf( ”%d”,&broj); if ( broj<=0 ) printf(”Nije prirodan\n”); else { ost = broj % 2; if (ost==0) printf(”Paran\n”); else printf(”Neparan\n”); } } if (broj % 2 == 0)
Вишеблоковско гранање:if-elseif-else ISTINA Uslov 1 Blok 1 LAŽ ISTINA Blok 2 Uslov 2 LAŽ ISTINA Blok N Uslov N LAŽ Blok 0 if (uslov1) iskaz1; else if (uslov2) iskaz2; else if (uslov3) iskaz3; ... else if (uslovN) iskazN; [else iskaz0;]
Наредба: if-elseif-else ISTINA Израз 1 Блок 1 LAŽ ISTINA Блок 2 Израз 2 LAŽ ISTINA Блок N Израз N LAŽ Блок 0 if(izraz1) { naredbe } else if(izraz2) { naredbe } ... else { naredbe }
if(а>90) ocena = 10; else if(a>80) ocena = 9; else if(a>70) ocena =8; else if(a>60) ocena =7; else if(a>50) ocena =6; else ocena = 5; ocena=5; if(а>90) ocena = 10; else if(a>80) ocena = 9; else if(a>70) ocena =8; else if(a>60) ocena =7; else if(a>50) ocena =6; Наредба if-elseif-else
Пример наредбе if-elseif-else POČETAK ocena ISTINA LAŽ ocena=5 "Odlican" ISTINA LAŽ ocena=4 "Vrlo dobar" ISTINA LAŽ ocena=3 "Dobar" ISTINA LAŽ ocena=2 "Dovoljan" ISTINA LAŽ ocena=1 "Nedovoljan" "GRESKA" KRAJ Учитати бројчану оцену исписати описну оцену #include <stdio.h> main() { int ocena; printf( ”Ocena? ” ); scanf( ”%d”,&ocena); if (ocena==5) printf(”Odlican\n”); else if (ocena==4) printf(”Vrlo dobar\n”); else if (ocena==3) printf(”Dobar\n”); else if (ocena==2) printf(”Dovoljan\n”); else if (ocena==1) printf(”Nedovoljan\n”); else printf(”GRESKA\n”); }
Наредба селективног гранањаswitch • Наредба switch представља уопштење наредбе ifОпшти облик наредбе је дат са: switch(izraz) { case vrednost_1: niz_naredbi_1 case vrednost_2: niz_naredbi_2 ... case vrednost_N: niz_naredbi_N [default: niz_naredbi] }
Наредба селективног вишеблоковског гранања: switch блок 1 блок 2 блок n блок 0 израз . . . v1 v2 vn иначе switch (izraz) { case v1: iskaz1; ... iskazN; case v2: iskaz1; ... iskazN; . . . case vN: iskaz1; ... iskazN; [default: iskaz0;] }
Наредба switch • Прво се израчуна вредност izraz. • Израчуната вредност се пореди са vrednost_1, vrednost_2,... vrednost_N. • Уколико је иста вредност пронађенабиће извршене СВЕ наредбе које се налазе између тог case дела и краја switch нардбе. • Преостали case делови се неће поредити, али ће њихове припадајуће наредбе бити извршене.
Наредба switch - неисправна Zbir je 3 Zbir je 41 Zbir je nepoznat main() { int a = 1,b = 2; switch(a+b) { case 12: printf("Zbir je 12\n"); case 3: printf("Zbir je 3\n"); case 41: printf("Zbir je 41\n"); default: printf("Zbir je nepoznat\n"); } }
Наредба: switch - неисправна main() { int a = 4;b=2; switch(a+b) { case 12: printf("Zbir je 12\n"); case 3: printf("Zbir je 3\n"); default: printf("Zbir je nepoznat\n"); case 41: printf("Zbir je 41\n"); } } Zbir je nepoznat Zbir je 41
Наредба switch - исправна main() { int a = 1; int b=2; switch(a+b) { case 12: printf("Zbir je 12\n"); break; case 3: printf("Zbir je 3\n"); break; case 41: printf("Zbir je 41\n"); break; default: printf("Zbir je nepoznat\n");break; } } Zbir je 3
Наредба: switch - рекапитулација break; break; break; switch (izraz) { case v1: iskaz1; ... iskazN; case v2: iskaz1; ... iskazN; . . . case vN: iskaz1; ... iskazN; [default: iskaz0;] } Селекторски израз мора бити цео број Не може битиfloatилиdouble Најпре се израчунава вредност овог израза Израчуната вредност се проналази међуконстантама: v1 .. vN Ако се пронађе вредност израчунавају сесви искази од пронађеногcaseдо крајаswitch Ако се вредност не пронађе, извршавају се искази изаdefault: Ако се жели излаз из наредбе switch када се изврши одговарајући case, треба користити наредбуbreak
Пример наредбе switch Учитати бројчану оцену и исписати одговарајућу описну оцену. #include <stdio.h> main() { int ocena; printf(”Ocena? ”); scanf(”%d”,&ocena); switch (ocena) { case 5: printf(”Odlican\n”); break; case 4: printf(”Vrlo dobar\n”); break; case 3: printf(”Dobar\n”); break; case 2: printf(”Dovoljan\n”); break; case 1: printf(”Nedovoljan\n”); break; default: printf(”GRESKA\n”); } }
Пример наредбе switch Насилни излаз из програма Програм за симулацију калкулатора за целобројне операције: Учитати два цела броја и знак за аритметичку операцију и извршити је. #include <stdio.h> main() { int x,y,rez; char op; printf(”Unesite izraz u obliku op1 operator op2: \n”); scanf(”%d %c %d”,&x,&op,&y); switch (op) { case ’+’: rez=x+y; break; case ’-’: rez=x-y; break; case ’*’: rez=x*y; break; case ’/’: rez=x/y; break; default: printf(”Ne poznajem tu operaciju!\n”); return (0); } printf (”%d %c %d = %d”, x,op,y,rez); }
Спречавање дељења са нулом #include <stdio.h> main() { int x,y,rez; char op; printf(”Unesite izraz u obliku br1 operacijabr2: \n”); scanf(”%d %c %d”,&x,&op,&y); switch (op) { case ’+’: rez=x+y; break; case ’-’: rez=x-y; break; case ’*’: rez=x*y; break; case ’/’: if (y!=0) rez=x/y; else { printf(”deljenje sa 0 nije dozvoljeno!\n”);} break; default: printf(”Nepoznata operacija!\n”); return (0); } printf (”%d %c %d = %d”, x,op,y,rez); }
Наредбе понављања Петље или цикличне алгоритамске структуре: • while - петља • For-петља • do while- петља
whileпетља • Општи облик ове наредбе је: while(izraz) naredba; или while(izraz){naredba_1; ...; naredba_N;} или while(izraz) { naredba_1; naredba_2; ... naredba_N; }
whileпетља • Прво се израчунава вредност izraz у загради. • Уколико је izraz логички тачан, (вредност различита од нуле) извршиће се наведене наредбе. • Поступак се понавља све док је izraz≠ 0. • Bредност izrazу while петљи мора да промени своју логичку вредност да би ce напуcтила петља.
while - петља са излазом на врху ЛАЖ услов ИСТИНА Тело петље Омогућава реализацију петље са излазом на врху! Општиоблик while (izraz)iskaz; или while (izraz) { iskaz1; ... iskazN; } Петља ће се понављати све док је услов испуњен (тачан) (не мора се извршити ни једанпут) Све док је izrazИСТИНИТ(!=0)извршава се (сложена) наредба КадizrazпостанеЛАЖ(==0) прекида се извршавање петље
whileпетља Претварање Фаренхајтових степена (од 0 до 120) у Целзијусове. float faren, celz; int maks, korak; maks = 120; korak = 20; faren = 0; while (faren <= maks) { celz= (5.0/9.0) * (faren-32.0); printf("%3.0f,%6.1f\n",faren, celz); faren += korak; } 0, -17.8 20, -6.7 40, 4.4 60, 15.6 80, 26.7 100, 37.8 120, 48.9
Примерwhile петље b = 1 n b <=n ISTINA b = b + 1 POČETAK LAŽ "ALGORITAM" KRAJ Петља која N пута исписује реч "ALGORITAM“. #include <stdio.h> main() { int n, b=1; printf(”Unesite N: ”); scanf(”%d”,&n); while ( b<=n ) { printf(”Algoritam\n”); b++; } }
Примерwhile петље n n ISTINA POČETAK LAŽ n-- "ALGORITAM" KRAJ Петља која N пута исписује реч "ALGORITAM“.Без коришћења помоћног броја #include <stdio.h> main() { int n; printf(”Unesite N:”);scanf(”%d”,&n); while (n) { printf(”ALGORITAM\n”); n--; } printf(”Poruka ispisana %d puta”, n); } #include <stdio.h> main() { int n; printf(”Unesite N: ”); scanf(”%d”,&n); while (n--) printf(”ALGORITAM\n”); }
Примерwhile петље-излаз на врху f = 1 n n ISTINA POČETAK f = f * n LAŽ n = n -1 f KRAJ Учитати природан бројn, а затим израчунати и исписатиn! #include <stdio.h> main() { int n, f=1; printf(”Unesite N: ”); scanf(”%d”,&n); printf(”%d!=”,n); while (n) f *= n--; printf(”%d”,f); }
Примерwhile петље-излаз на врху f = 1 n n ISTINA POČETAK f = f * n LAŽ n = n -1 n, f KRAJ Учитати природан бројn, а затим израчунати и исписатиn! #include <stdio.h> main() { int n, f=1; printf(”Unesite N: ”); scanf(”%d”,&n); while (n) f *= n--; printf(”Faktorijel broja %d je%d”,n, f); } Напомена: Уништен је почетни податакn. ???!!!
Примерwhile петље-излаз на врху ISTINA LAŽ b < 1 s = 0 POČETAK LAŽ ISTINA b > 0 c = b MOD 10 b s = s + c b = b DIV 10 "Nije prirodan" s KRAJ KRAJ Учитати природан број и одредити и исписати збир његових цифара. #include <stdio.h> main() { int b, s=0; printf(”Unesite broj: ”); scanf(”%d”,&b); if (b<1) printf(”Nije prirodan!”); else { while (b) { s += b % 10; b /= 10; } printf(”Zbir cifara je:%d”,s); } }
Примерwhile петље-излаз на врху ISTINA LAŽ b < 1 p = (b==2) (b%2) POČETAK LAŽ p && d < ISTINA p = b%d != 0 b d = 3 ISTINA LAŽ p d = d + 2 “JESTE" “NIJE" "Nije prirodan" KRAJ KRAJ Учитати природан број, а затим испитати и исписати да ли је прост или не. #include <stdio.h> #include <math.h> main() { int b, p, d=1; printf(”Unesite broj: ”); scanf(”%d”,&b); if (b<1) printf(”Nije prirodan!”); else { p = (b==2)| (b % 2); while (p && (d+=2)<=sqrt(b)) p = b % d; printf(”%d %s prost”, b, p ? ”je”:”nije”); } }
Петља do while - излаз на дну • Код dowhile петље се задовољење услова испитује тек на њеном крају (разлика у односу на for и while). • То значи да ће се свака do whileпетља извршити бар једанпут, што није случај за претходне две петље.
Петље са излазом на дну:do...while • Општи облик је следећи: do { naredbe } while( izraz ); • do whileпетља се извршава све док је израз у загради тачан (izraz≠ 0)
Петље са излазом на днуdo...while #include <stdio.h> main(){ float num, suma=0; do { printf(“Unesite broj"); scanf ("%f",&num); suma += num; /* suma =suma + num; */ printf (“Zbir je %f\n\n", suma); } while (num!=0); }
Петље са излазом на днуdo...while тело петље ISTINA услов LAŽ Омогућава реализацију петљи са излазом на дну Општи облик: do iskaz; while (izraz); или do { iskaz1; ... iskazN; } while (izraz); 1. Извршавају се искази изаdo (тело петље) 2. Израчунава се вредност услова 3. Ако је израз ISTINIT (!=0) иди на корак 1 4. Ако је израз LAŽ (==0) прекида се извршавање петљеи прелази се на следећи исказ изаwhile
Примерdo...whileпетље LAŽ N b = 1 ISTINA ISTINA N < 1 b<=N POČETAK "ALGORITAM" b = b + 1 LAŽ KRAJ Учитати природан број N и толико пута исписати реч "ALGORITAM“. #include <stdio.h> main() { int n, b=1; do { printf(”Unesite N: ”); scanf(”%d”,&n); } while (n<1); do printf(”Algoritam\n”); while ( ++b <= n ); } #include <stdio.h> main() { int n, b=1; do { printf(”Unesite N: ”); scanf(”%d”,&n); } while (n<1); do { printf(”Algoritam\n”); b++; } while (b<=n); }