Presentation is loading. Please wait.

Presentation is loading. Please wait.

流程控制: while loop 迴圈 Test condition Enter loop Yes (non-0) Execute Loop body no exit F=0 F=F+20 … F=F+20 0 -17 20 -6 40 4 60 15 80 26 100 37 120 48 140.

Similar presentations


Presentation on theme: "流程控制: while loop 迴圈 Test condition Enter loop Yes (non-0) Execute Loop body no exit F=0 F=F+20 … F=F+20 0 -17 20 -6 40 4 60 15 80 26 100 37 120 48 140."— Presentation transcript:

1 流程控制: while loop 迴圈 Test condition Enter loop Yes (non-0) Execute Loop body no exit F=0 F=F+20 … F=F+20 0 -17 20 -6 40 4 60 15 80 26 100 37 120 48 140 60 160 71 180 82 200 93 220 104 240 115 260 126 280 137 300 148 F=0 F=F+20 F<=300

2 while loop 迴圈 F = 0; while (F <= 300){ F = F+20; } Test condition Enter loop Yes(non-0) Execute Loop body no exit /* C Language */ F=0 F<=300 F=F+20

3 #include /* temperature version 3.0 */ main() { int fahr, celsius; int lower, upper, step; lower = 0; /* lower limit of temperature table */ upper = 300; /* upper limit */ step = 20; /* step size */ fahr = lower; while (fahr <= upper){ celsius = 5*(fahr-32)/9; printf("%d\t%d\n", fahr, celsius); fahr = fahr + step; } Variable Declaration int = integer Variable assignment while loop

4 #include /* print F-C table */ main() { float fahr, celsius; int lower, upper, step; lower = 0; /* lower limit of temperature table */ upper = 300; /* upper limit */ step = 20; /* step size */ fahr = lower; while (fahr <= upper){ celsius = 5.0/9.0 *(fahr-32.0); printf("%3.0f\t%6.1f\n", fahr, celsius); fahr = fahr + step; } floating point version of ex3. Floating point costant

5 Exercise 1 Print the following numbers using while loops 1 2 3 5 8 13 21 34 55

6 Outline Variable and Arithmetic Expression The For Statement Symbolic Constants Character Input and Output Arrays Functions Arguments – Call by Value Character Arrays External Variables and Scope

7 for loop for(initial ; loop test ; increment){ Loop body … … } Test condition Enter loop yes Execute Loop body no exit initial value Execute Loop increment F=0 F=F+20; F<=300 for(F=0; F<=300; F=F+20){ printf( “ %d\n ”, F); }

8 for statement #include /* print F-S table */ main() { int fahr; for(fahr=0; fahr <= 300; fahr = fahr+20) printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32)); } initial increment exit loop test Type conversion

9 Exercise 2 Print the following numbers using for loops 1 2 3 5 8 13 21 34 55

10 Review of HW#2 * ** *** **** ***** ****** ******* ******** ********* ********** #include main() { int i,j; for(i=1;i<=10;i++) {/* 第一層迴圈 * 增加直行 */ for(j=1;j<=i;j++) { printf("*");/* 第二層迴圈 * 增加橫的 */ } printf("\n"); }

11 Review of HW#2 * ** *** **** ***** ****** ******* ******** ********* ********** #include main() { int i,k; for(i=0;i<10;i++){ for(k=0;k<i;k++){ printf("*"); } printf("\n"); } }

12 Review of HW#2 * ** *** **** ***** ****** ******* ******** ********* ********** #include main () { int A, B; for(A=1; A<=10; A= A+1){ B=0; printf("\n"); while(B<A){ printf("*"); B=B+1; }

13 Review of HW#2 * ** *** **** ***** ****** ******* ******** ********* ********** #include int main () { int a,b; for(a=0;a<10;a++){ for(b=1;b<=a;b++) printf("*", b); printf("*\n",a); } return 0; }

14 Review of HW#2 * ** *** **** ***** ****** ******* ******** ********* ********** #include int main(){ int a,b; a=10; b=11; while(a>=0){ while(b<11){ printf("*"); b=b+1; } printf("\n"); b=a; a=a-1; }

15 New input function: scanf() C standard I/O function: scanf() int scanf(char *format, arg1, arg2, … ) The same as printf pointer: provide address of the variable No. of matched items Prototype: 格式化輸入函數

16 Example: scanf() #include main() { int num; float f; printf("Please input number: "); scanf("%d", &num); printf( “ your input is %d ”, num); printf("Please input number: "); scanf("%f", &f); } memory &num 指標 (pointer) 代表變數的位址 (address)

17 Symbol constants #include #define LOWER 0 #define UPPER 300 #define STEP 20 /* print F-S table */ main() { int fahr; for(fahr=LOWER; fahr <= UPPER; fahr = fahr+STEP) printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32)); } Symbol name (Meaningful, easy to read) Symbol value Replace this symbol name at compile time

18 Outline Variable and Arithmetic Expression The For Statement Symbolic Constants Character Input and Output Arrays Functions Arguments – Call by Value Character Arrays External Variables and Scope

19 Character I/O A text stream is a sequence of characters getchar() getch() getche() getc() putchar(c) putch(c,stdout) putc(c,stdout) I/O devices are also taken as files 輸入 stdin 輸出 stdout

20

21 Example: File copying #include /* echo, version 1 */ main() { int c; c=getchar(); while( c != EOF ){ putchar(c); c = getchar(); } not equal to End Of File A constant defined in stdio.h NOT the same as any char values

22 Example: File copying EOF Print the value of EOF End of file OSKeyboard termination signal(ctrl-Z) #include main() { printf("EOF = %d\n", EOF); }

23 Example: File copying Assignment c= getchar(); Assignment is an expression and has a value, which is the value of the left hand side after assignment. #include main() { int c; while( (c=getchar()) != EOF ){ putchar(c); } Precedence of = and !=

24 Example: Character counting #include main() { long nc; /* number of character */ nc = 0; while(getchar() != EOF) ++nc; printf("%ld\n",nc); } Good naming Convention For variables nc = nc+1; 32-bit integer

25 Example : Character counting 2 #include main() { double nc; for(nc = 0; getchar()!= EOF; ++nc) ; printf("%.0f\n",nc); } null statement Increase range

26 Example: Line counting #include /* count lines */ main() { int c, nl; nl = 0; while( (c=getchar()) != EOF) if(c == '\n') ++nl; printf("%d\n", nl); } Test condition is equal to 條件測試 character constant ASCII value of input char. “ \n ” ?

27 if statement if( expression ){ statement 1; } else{ statement 2; } Test YES Statement 1 NO IF statement 3; Statement 2 Statement 3 else

28 Exercise #2 Modify the previous program, such that it counts the number of occurrences of ‘ { ’ and ‘ } ’ in a file

29 Example: Word counting #include #define IN 1 #defin OUT 2 /* count lines, word, characters */ main() { int c, nl, nw, nc, state; state = OUT; nl = nw = nc = 0; while( (c=getchar()) != EOF){ ++nc; if(c == '\n') ++nl; if(c == ' ' || c == '\n' || c == '\t;) state = OUT; else if(state == OUT){ state = IN; ++nw; } printf("%d %d %d\n", nl, nw, nc); } Word: separate by space, Tab, and newline record whether now is in a word or not nl=(nw=(nc=0)); OR OR: || AND: && Evaluate from left to right

30 Outline Variable and Arithmetic Expression The For Statement Symbolic Constants Character Input and Output Arrays Functions Arguments – Call by Value Character Arrays External Variables and Scope

31 Example: Count digits Store occurrence of each digit in an array #include /* count digits, white space, and others */ main() { int c, i, nwhite, nother; int ndigit[10]; /* initialize */ Declaration of array ndigit[0] ndigit[1] ndigit[2] ndigit[3] ndigit[4] ndigit[9] ?????? 16 bits

32 /* initialize */ nwhite = nother = 0; for(i=0; i<10; ++i) ndigit[i] = 0; while((c = getchar() != EOF) if(c >= '0' && c <= '9') ++ndigit[ c-'0' ]; else if(c == ' ' || c == '\n' || c == '\t') ++nwhite; else ++nother; printf("digit = "); for(i=0; i<10; ++i) printf(" %d", ndigit[i]); printf(", white space = %d, other = %d\n", nwhite, nother); } in the interval [0,9]

33 Multi-way decision if( expression ){ statement 1; } else if { statement 2; } … else{ statement N; } statement K; Test YES Statement 1 NO IF Statement K Test YES Statement 2 else if … Test else NO Statement N YES Statement N-1 …

34 Outline Variable and Arithmetic Expression The For Statement Symbolic Constants Character Input and Output Arrays Functions Arguments – Call by Value Character Arrays External Variables and Scope

35 Functions Function, subroutine, procedure printf, getchar, putchar, … input output … body … (hidden from user)

36 Example: Power Power(2,3) -> 2 3 #include int power(int m, int n); main() { int i; for(i=0; i<10; ++i) printf("%d %d %d\n", i, power(2,i), power(-3,i)); return 0; } function prototype c.f. function definition int power(int, int);

37 int power(int base, int n) { int i, p; p = 1; for(i=1; i<=n; ++i) p = p*base; return p; } Return-type function-name(parameter declarations … ) { Declarations statements } Same file? These variable names are local to this function

38 Functions (cont.) power(int base, int n) return p; … body … (hidden from user) power(2,i) arguments(formal arguments) parameters(actual arguments)

39 Early definition int power(); … int power(int, int) int base, n; { int i, p; p = 1; for(i=1; i<=n; ++i) p = p*base; return p; } ? Compiler cannot check the correctness of the parameters of function calls

40 Outline Variable and Arithmetic Expression The For Statement Symbolic Constants Character Input and Output Arrays Functions Arguments – Call by Value Character Arrays External Variables and Scope

41 Call by value Store-program concept Program is data Data segment Program segment … … memory Data segment Program segment main power … address

42 2i2i Program segment … … memory Program segment main power … address power(2,i) base n Call by value

43 Call by value - example int power(int base, int n) { int p; for(p=1; n>0; --n) p = p * base; return p; } int power(int base, int n) { int i, p; p = 1; for(i=1; i<=n; ++i) p = p*base; return p; }

44 Outline Variable and Arithmetic Expression The For Statement Symbolic Constants Character Input and Output Arrays Functions Arguments – Call by Value Character Arrays External Variables and Scope

45 Character arrays Character arrays = strings “ Hello\n ” H e l l o \n \0 Null character H e l l o \n \0 s 結尾字元 char s[10]; S[0]S[1]S[2]S[3] … …… S[9]

46 Character arrays: example Read text lines and print the longest while (there ’ s another line) if (it ’ s longer than the previous longest) save it save its length print longest line Algorithm outline

47 #include #define MAXLINE 1000 int getline(char line[], int maxline); void copy(char to[], char from[]); main() { int len; int max; char line[MAXLINE]; char longest[MAXLINE]; max = 0; while((len=getline(line, MAXLINE)) > 0) if(len > max){ max = len; copy(longest, line); } if(max > 0) printf("%s", longest); return 0; } 0 if no input

48 int getline(char s[], int lim) { int c, i; for(i=0; i<lim-1 && (c=getchar())!=EOF && c!='\n'; ++i) s[i] = c; if(c == '\n'){ s[i]=c; ++i; } s[i]='\0'; return i; } void copy(char to[], char from[]) { int i i=0; while((to[i] = from[i]) != '\0') ++i; } left to right evaluation when i=0?

49 line MAXLINE … … memory Program segment main getline … address s lim Call by value for char arrays int getline(line, MAXLINE) … … char line[MAXLINE] line[0] … line[MAXLINE-1]

50 Outline Variable and Arithmetic Expression The For Statement Symbolic Constants Character Input and Output Arrays Functions Arguments – Call by Value Character Arrays External Variables and Scope

51 Scope of variables Local variables in a function Automatic variables int getline(char s[], int lim) { int c, i; for(i=0; i<lim-1 && (c=getchar())!=EOF && c!='\n'; ++i) s[i] = c; … } code segment Data segment enter Allocate when entering

52 #include #define MAXLINE 1000 int max; char line[MAXLINE]; char longest[MAXLINE]; int getline(void); void copy(void); main() { int len; extern int max; extern char longest[]; max = 0; while((len=getline()) > 0) if(len > max){ max = len; copy(); } if(max > 0) printf("%s", longest); return 0; } int getline(void) { int c, i; extern char line[]; for(i=0; i<lim-1 && (c=getchar())!=EOF && c!='\n'; ++i) s[i] = c; if(c == '\n'){ s[i]=c; ++i; } s[i]='\0'; return i; } void copy(void) { int i extern char line[], longest[]; i=0; while((to[i] = from[i]) != '\0') ++i; } External var. definition External var. declaration

53 External variables Advantage Less communication of variables in functions calls Disadvantage Variables can be changed in unexpected way Functions lose its generality (must live with the external variables … )

54 External variables (cont.) Write them in a header file extern int max; extern char line[]; extern char longest[]; ggyy.h #include int getline(void) { int c, i; for(i=0; … }


Download ppt "流程控制: while loop 迴圈 Test condition Enter loop Yes (non-0) Execute Loop body no exit F=0 F=F+20 … F=F+20 0 -17 20 -6 40 4 60 15 80 26 100 37 120 48 140."

Similar presentations


Ads by Google