1 / 26

Базови управляващи структури

Базови управляващи структури. Верига Веригата е линейна последователност от действия. Описва се чрез съставен оператор (блок) . Съставният оператор представлява група оператори, които се изпълняват последователно и се разглеждат като един оператор . { оператор1; оператор2; …

rodney
Download Presentation

Базови управляващи структури

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. Базови управляващи структури Верига • Веригата е линейна последователност от действия. Описва се чрез съставен оператор (блок). Съставният оператор представлява група оператори, които се изпълняват последователно и се разглеждат като един оператор. { оператор1; оператор2; … операторn; }

  2. Разклонение • Разклонение (алтернатива) е управляваща структура, при която изчислителният процес се разклонява, в зависимост от стойността на определено условие израз. • Оператор if(с една алтернатива) if(израз) оператор;

  3. Оператор if-else(с две алтернативи) if (израз) оператор1 else оператор2 • Оператор if-else-if (вложен оператор if) • Нивата на влагане са с неограничен брой. • Защо се предпочита пред програма с последователниif оператори?

  4. if (израз1) оператор1 else if (израз2) оператор2 elseif (израз3) оператор3 else оператор4 • Изпълнява се един от много оператори. • Изразите се изчисляват последователно. • Ако даден израз има стойност 0, съответният оператор се изпълнява и операторът завършва. • Ако нито един израз не е 0, изпълнява се последният оператор след else.

  5. вложен оператор if

  6. Оператор switch-case(многозначно разклонение) switch (израз) { caseконстанта1: оператор1 break; caseконстанта2: оператор2 break; . . . caseконстантаn: break; default: операторn+1 break; }

  7. Първо се изчислява изразът. Ако неговата стойност съвпадне с някоя константаi, съответният операторi се изпълнява, докато се срещне оператор break. • Ако стойността на израза не съвпада с нито една константа, изпълнява се вариантът default. • Константите са от целочислен или символен тип и са уникални. • Ако не се използва break след дадена константа, преминава се към следващия фрагмент, докато се срещне оператор breakили се достигне края на оператора switch.

  8. ЦИКЪЛ • Цикълът е последователност от инструкции, която се повтаря многократно. Оператор за цикъл с пост - условие do-while do оператор while (израз); • Приложение на оператора за цикъл • Проверка при въвеждане на данни • Програма тип меню

  9. Оператор за цикъл с предусловие while while (израз) оператор; Пример: Програмата въвежда поток (последователност) от цели числа. Въвеждането се преустановява чрез въвеждане на ограничителното число -999. Изчислява се сумата на въведените числа (ограничителното число не участва в сумата).

  10. Алгоритъм: • Нулиране на сумата. • Извеждане на съобщение за действие. • Докато въвежданото число е различно от 999 повтаряй: • Натрупване на числото към сумата. • Печат на сумата. #include <stdio.h> int main() { int number, s; s=0; printf("Въведи последователност от цели числа (-999 за край): "); while(scanf("%d", &number), number != -999) s += number; printf("Сума = %d\n", s); return 0; }

  11. Оператор за цикъл for модификация for(изразинициализация ; израз ; израз модификация) оператор;

  12. Първо се извършва инициализация • На второ място се изчислява изразът (най-често за отношение), който определя условието за край на цикъла. • Ако стойността му е 0 (истина), се изпълнява операторът и след това – модификацията. • Изчислява се изразът. • Когато стойността на израза стане =0 (лъжа), изпълнението на цикъла се преустановява. • Пример: Да се състави програма, която намира сумата на n реални числа, където 1n10. Алгоритъм: • Нулиране на сумата. • Въвеждане на цяло число n в диапазона [1, 10]. • За начална стойност на брояча = 1 до крайна стойност nи всеки път увеличаване с 1 повтаряй: • Въвеждане на реално число. • Натрупване на числото към сумата. • Печат на сумата.

  13. #include <stdio.h> int main() { int n, i; float number, s; do { printf("Въведете n в интервала [1, 10]: "); scanf("%d", &n); } while(n<1 || n>10); printf("Въведете %d реални числа:\n", n); for(s=0.0, i=1; i<=n && scanf("%f", &number) == 1; i++) s += number; printf("Сума = %.3f\n", s); return 0; } • При описанието на оператор forинициализация, израз или модификация могат да се пропуснат, но тогава се заменят с ;. Например: for(;;)

  14. Операторът breakпрекъсва изпълнението на цикъла и предизвиква принудително излизане от цикъл. • Пример: Програмата намира сумата на поток от цели числа като ограничителното число е 999. #include <stdio.h> int main() { int number, s; s=0; printf("Въведи последователност от цели числа (999 за край): "); for(;;) { scanf("%d", &number); if(number == 999) //Числото 999 прекъсва //изпълнението на цикъла break; s += number; } printf("Сума = %d\n", s); return 0; }

  15. Операторът continueпрекъсва изпълнението на текущата итерация на цикъла, като запазва стойностите на променливите. • За цикли whileи do-while се преминава към проверка на условието за край (израз), а за for- към изчисление на модификацията. инициализация while(израз1) { оператор1; if(израз2) continue; оператор2; } for(инициализация; израз1; модификация) { оператор1; if(израз2) continue; оператор2; }

  16. Пример: да се състави програма, която въвежда n символа (n<=10)и преобразува малките букви в главни. #include <stdio.h> int main() { inti,n; char c; do { printf("Въведете n в интервала [1, 10]: "); scanf("%d", &n); } while(n<1 || n>10); printf("Въведете %d символа:\n", n); for(i=1; i<=n; i++) { c = getche(); if(c < ‘a’ || c > ‘z’) /* Символ различен от малка буква прекъсва итерацията */ continue; c -= 32; printf("Главна буква = %с\n", с); } return 0; }

  17. ПРИМЕРИ 1. Изрази #include<stdio.h>Резултат void main()-1 0 1 { int x=1,y=1,z=0; x*= y/2 + z; y*= ++z * x--; printf("%2d%2d%2d\n",x,y,z); } #include<stdio.h>Резултат void main()-1 1 1 { int x=1,y=1,z=0; x = y/2 + z; y = ++z && x-- || y; printf("%2d%2d%2d\n",x,y,z); }

  18. ПРИМЕРИ 1. Изрази #include<stdio.h> Резултат void main() 2 1 1 { int x=1,y=1,z=0; x = y%2 + z; y = ++z && ++x || --y; printf("%2d%2d%2d\n",x,y,z); } #include <stdio.h> Резултат void main()r=1 x=0 y=1 z=-3 { int x=0,y=1,z=-1,r; r = x++ || ++y && --z; x* = y--/--z; printf("r=%d x=%d y=%d " "z=%d\n",r,x,y,z); }

  19. ПРИМЕРИ • Оператор if • Последователни оператори if #include <stdio.h> #define A 180 #define B 250 #define C 600 void main() { double s,d; printf("s="); scanf("%lf",&s); if(s<=A) d=0; if(s>A && s<=B) d=(s-A)*10/100; if(s>B && s<=C) d=(B-A)*10/100 + (s-B)*20/100; if(s>C) d=(B-A)*10/100 + (C-B)*20/100 - (s-C)*30/100; printf("s=%.2lf lv -> d=%.2lf lv\n",s,d); }

  20. ПРИМЕРИ • Оператор if • Вложен оператор if #include <stdio.h> #define A 180 #define B 250 #define C 600 void main() { double s,d; printf("s="); scanf("%lf",&s); if(s<=A) d=0; else if(s<=B) d=(s-A)*10/100; else if(s<=C) d=(B-A)*10/100 + (s-B)*20/100; else d=(B-A)*10/100 + (C-B)*20/100 - (s-C)*30/100; printf("s=%.2lf lv -> d=%.2lf lv\n",s,d); }

  21. ПРИМЕРИ • Оператор за цикъл do • Коректно въвеждане на входни данни • Въвеждане на цяло число в интервал [1,10] #include <stdio.h> void main() { int nbr, r; do { printf("nbr="); r=scanf("%d",&nbr); } while( r!=1 || nbr<1 || nbr >10 ); printf("nbr=%d\n",nbr); }

  22. ПРИМЕРИ • Оператор за цикъл do • Програма тип меню #include <stdio.h> 1/2 #include <conio.h> void main() { int izbor,a=5,b=10; do { clrscr(); printf("1. Action1\n"); printf("2. Action2\n"); printf("3. Action3\n"); printf("4. Action4\n"); printf("5. END\n"); printf("izbor="); scanf("%d",&izbor);

  23. ПРИМЕРИ • Оператор за цикъл do • Програма тип меню switch(izbor) 2/2 { case 1:printf("a+b=%d\n)",a+b);break; case 2:printf("a-b=%d\n)",a-b);break; case 3:printf("a*b=%d\n)",a*b);break; case 4:printf("a/b=%d\n)",a/b);break; case 5:break; } printf("Press any key\n"); getch(); } while(izbor!=5); }

  24. ПРИМЕРИ • Оператор за цикъл while • Известен брой на повторение на цикъла (определен) #include <stdio.h> void main() { double r,r_ser,r_par; int n,i; i=0; r_ser=0; r_par=0; printf(“broi n:"); scanf("%d",&n); while(i++<n) { printf(“r %d:",i); scanf("%lf",&r); r_ser+= r; r_par+= 1/r; } printf("r_ser = %.4lf, r_par = %.4lf\n",r_ser,1/r_par); }

  25. ПРИМЕРИ • Оператор за цикъл while • Неизвестен брой на повторение на цикъла (неопределен): край с EOF #include <stdio.h> void main() { double r,r_ser,r_par; int i; i=1; r_ser=0; r_par=0; printf(“vavedi r ili CTRL+Z za krai:"); while(printf("\nE. r%d:",i++),scanf("%lf",&r) != EOF) { r_ser+= r; r_par+= 1/r; } printf("\nr_ser = %.4lf, r_par = %.4lf\n",r_ser,1/r_par); }

  26. ПРИМЕРИ • Оператор за цикъл for #include <stdio.h> void main() { double r,r_ser,r_par; int n,i; r_ser=0; r_par=0; printf(“broi n:"); scanf("%d",&n); for(i=1;i<=n;i++) { printf(“r %d:",i); scanf("%lf",&r); r_ser+= r; r_par+= 1/r; } printf("r_ser = %.4lf, r_par = %.4lf\n",r_ser,1/r_par); }

More Related