1 / 77

Увод у програмски језик C Предавање 2

Увод у програмски језик C Предавање 2. Електротехнички факултет у Источном Сарајеву. Садржај. Наредбе O сновна програмска наредба Секвенца или блок наредби Досег или област важења идентификатора Наредбе гранања (селекције) Наредбе понављања (петље или циклуси) Условни скокови. Наредбе.

howie
Download Presentation

Увод у програмски језик C Предавање 2

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Увод у програмски језик C Предавање 2 Електротехнички факултет у Источном Сарајеву

  2. Садржај Наредбе • Oсновна програмска наредба • Секвенца или блок наредби • Досег или област важења идентификатора • Наредбе гранања (селекције) • Наредбе понављања (петље или циклуси) • Условни скокови

  3. Наредбе • Сваки програм написан на неком програмском језику је састављен од низа појединачних наредби. • Редослед извршавања наредби je секвенцијалан • Измена редоследа може постићи помоћу управљачких наредби.

  4. Наредбе • У управљачке наредбе спадају: • наредбе гранања if-elseи switchнаредбе. • Наредбе за насилну промену тока:break, continue, goto, return • наредбе понављања (петље, циклуси или итерације) у које спадају for, while и dо-while наредбе.

  5. Секвенца или блок наредби • Блок наредби: скуп програмских наредби које чине једну целину и које се извршавају једна за другом. • Блок наредби се пише унутар витичастих заграда { }и има општи облик: { izraz1; izraz2; ... izrazN;} или { izraz1; izraz2; ... izrazN; }

  6. Наредбе -рекапитулација Сложена наредба-блок извршава се тако што се извршавају једна по једна наредба (искази) од којих је она састављена Еквивалентна је БЛОКУ наредби у PASCALU BEGIN ... END - Свака наредба (исказ) завршава са ; (терминатор исказа) - Основне наредбе: Наредбе гранања и избора (селекција):if, switch Наредбе за понављање (петље):while, do while, for Наредбе за насилну промену тока:break, continue, goto, return - Сложена (компонована) наредба Настаје када једну или више наредби групишемо коришћењем великихзаграда{} Општи облик сложене наредбе је: { iskaz1; … ; iskazN ; } { iskaz1; iskaz2; … iskazN; }

  7. Област важења идентификатора • Досег или област важења идентификатора(scope) • означава део програма у ком идентификатор може да се користи, тј. део програма у ком је идентификатор „видљив”. • област важења идентификатора је од места где је дефинисандо краја блока! • Оваква област важења се назива блоковска област важења.

  8. Досег main() { int prom1=1; double prom3= prom2 + 5.92;/*GRESKA */ /*error C2065: 'prom2': undeclared identifier*/ double prom2=3.22; ... } C језик је строго типски и свака променљива пре употребе мора бити декларисана и дефинисана

  9. Досег 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

  10. Наредбе гранања и избора - селекција • Наредбе условног гранања-скока: if , if else, if elseif ...еlse • Наредба селективног гранања: switch • Наредбе контролисаног скока:break, continue • Наредба безусловног скока:goto,

  11. Наредба if else- општи облик if(izraz1) { naredbe } else if(izraz2) { naredbe } ... else { naredbe }

  12. Наредба гранања и избора - селекција • Омогућава гранање програма: • Једноблоковско: if, • двоблоковско: if - else, • Вишеблоковско: if - else if - ... - else

  13. Наредба:if услов услов ИСТИНА ИСТИНА ЛАЖ ЛАЖ исказ Сложени исказ Једноблоковско гранање if (uslov) { iskaz1; ... iskazN; } if (uslov) iskaz;

  14. Наредба: if if(а>5)b=3; if(b>=3)/* НЕМА ; иза услова*/ { b=1;count = 45.32;slovo = 'A'; }

  15. Пример наредбe: if Програм који проверава да ли је учитани број позитиван #include <stdio.h> main() { float broj; printf(”Unesite broj: ”); scanf( ”%f”,&broj); if ( broj>0 ) printf( ”Broj je pozitivan\n”, ); }

  16. Двоблоковско гранање: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;

  17. 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

  18. 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

  19. Наредба 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");

  20. Пример: 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)

  21. Вишеблоковско гранање: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;]

  22. Наредба: 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 }

  23. 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

  24. Пример наредбе 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”); }

  25. Наредба селективног гранања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] }

  26. Наредба селективног вишеблоковског гранања: switch блок 1 блок 2 блок n блок 0 израз . . . v1 v2 vn иначе switch (izraz) { case v1: iskaz1; ... iskazN; case v2: iskaz1; ... iskazN; . . . case vN: iskaz1; ... iskazN; [default: iskaz0;] }

  27. Наредба switch • Прво се израчуна вредност izraz. • Израчуната вредност се пореди са vrednost_1, vrednost_2,... vrednost_N. • Уколико је иста вредност пронађенабиће извршене СВЕ наредбе које се налазе између тог case дела и краја switch нардбе. • Преостали case делови се неће поредити, али ће њихове припадајуће наредбе бити извршене.

  28. Наредба 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"); } }

  29. Наредба: 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

  30. Наредба 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

  31. Наредба: 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

  32. Пример наредбе 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”); } }

  33. Пример наредбе 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); }

  34. Спречавање дељења са нулом #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); }

  35. Наредбе понављања Петље или цикличне алгоритамске структуре: • while - петља • For-петља • do while- петља

  36. whileпетља • Општи облик ове наредбе је: while(izraz) naredba; или while(izraz){naredba_1; ...; naredba_N;} или while(izraz) { naredba_1; naredba_2; ... naredba_N; }

  37. whileпетља • Прво се израчунава вредност izraz у загради. • Уколико је izraz логички тачан, (вредност различита од нуле) извршиће се наведене наредбе. • Поступак се понавља све док је izraz≠ 0. • Bредност izrazу while петљи мора да промени своју логичку вредност да би ce напуcтила петља.

  38. while - петља са излазом на врху ЛАЖ услов ИСТИНА Тело петље Омогућава реализацију петље са излазом на врху! Општиоблик while (izraz)iskaz; или while (izraz) { iskaz1; ... iskazN; } Петља ће се понављати све док је услов испуњен (тачан) (не мора се извршити ни једанпут) Све док је izrazИСТИНИТ(!=0)извршава се (сложена) наредба КадizrazпостанеЛАЖ(==0) прекида се извршавање петље

  39. 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

  40. Пример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++; } }

  41. Пример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”); }

  42. Пример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); }

  43. Пример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. ???!!!

  44. Пример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); } }

  45. Пример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”); } }

  46. Петља do while - излаз на дну • Код dowhile петље се задовољење услова испитује тек на њеном крају (разлика у односу на for и while). • То значи да ће се свака do whileпетља извршити бар једанпут, што није случај за претходне две петље.

  47. Петље са излазом на дну:do...while • Општи облик је следећи: do { naredbe } while( izraz ); • do whileпетља се извршава све док је израз у загради тачан (izraz≠ 0)

  48. Петље са излазом на дну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); }

  49. Петље са излазом на днуdo...while тело петље ISTINA услов LAŽ Омогућава реализацију петљи са излазом на дну Општи облик: do iskaz; while (izraz); или do { iskaz1; ... iskazN; } while (izraz); 1. Извршавају се искази изаdo (тело петље) 2. Израчунава се вредност услова 3. Ако је израз ISTINIT (!=0) иди на корак 1 4. Ако је израз LAŽ (==0) прекида се извршавање петљеи прелази се на следећи исказ изаwhile

  50. Пример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); }

More Related