Presentation is loading. Please wait.

Presentation is loading. Please wait.

The C programming language: Introduction Fall 2003, Jen-Chang Liu.

Similar presentations


Presentation on theme: "The C programming language: Introduction Fall 2003, Jen-Chang Liu."— Presentation transcript:

1 The C programming language: Introduction Fall 2003, Jen-Chang Liu

2 Position of C Hardware machines MS Windows Unix Linux shelldesktopdos applications machine language High-level language compiler C, C++ Pascal,.. Human Natural language

3 Introduction B -> C C is a general-purpose programming language Developed on UNIX system by D. Ritchie Portable, independent of any machine architecture OS, C compiler and all UNIX application were written in C

4 Introduction (cont.) A relatively small language ANSI C standard in 1988 The first edition of The C Programming Language was usually used as a reference manual of C American National Standards Institute Develop an unambiguous and machine- independent definition of C

5 Tutorial Started by learning by examples … Please try the examples on your own

6 如何產生可執行程式? C source Code C 原始程式 Compiler 編譯器 Executable Code 可執行碼 Turbo C 2.01 整合式編譯環境 文字檔形式 *.c 執行檔形式 *.exe Visual C++

7 Compiler Unix: cc, gcc(GNU C compiler) gcc has PC version, you may try to install it Windows: Visual C++, Borland C++ 編譯器 aaa.c compiler aaa.obj bbb.c compiler bbb.obj abc.exe … link

8 Example 1 #include main( ) { printf("Hello, world\n"); } functions Standard input/output library printf scanf … arguments Body of main func Terminator of statement 函式庫

9 C programming concept Control unit tape read/write head … symbols state of the machines Turing machine printf( “ Hello world! ” );

10 Notes Blank words( 空白,換行 ) are irrelevant in C C is well-defined language with a set of keywords with a set of functions Case sensitive: error typing is not allowed input function output

11 Example 1 (cont.) “ Hello, world\n ” Example 2 Character strings(string constant) Newline character \t: tab, \b: backspace, \\: \

12 Program components Function Contains statements that specify the computing operations to be done Variable Store values for computing

13 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

14 上課程式實做繳交規定 program submission in class 每次上課後將當天實做之程式繳交 方式 : email Subject: work 日期 學號 例: work1027 93321001 只交上.c 檔便可 繳交程式必須加上註解 (comments) ,包括 姓名,學號 程式目的 每行的作用

15 Prog2-1 // 劉震昌, 93xx0xx // 程式目的:測試整數變數並印出 #include void main(void) { int i; /* 變數宣告 declaration */ i=2; /* 設定變數 */ printf( “ This is my %dnd C program ”, i); // 印出訊息 }

16 變數宣告與設定 宣告:告知編譯器 data type 與 變數名稱 Ex. int i; 變數設定 變數名稱可以任取,最好取有意義的文字 ( 第一個字不可為數字 ) 變數型態 i = 2; // 將 i 設成 2

17 Data types of Variables int integer short short integer long long integer char character float floating point double double-precision case-sensitive keywords Integer with machine-dependent sizes

18 Prog4-0 (p. 4-10) #include void main(void) { printf( “ Size of char : %d\n ”, sizeof(char)); printf( “ Size of int : %d\n ”, sizeof(int)); printf( “ Size of short : %d\n ”, sizeof(short)); printf( “ Size of float : %d\n ”, sizeof(float)); printf( “ Size of double: %d\n ”, sizeof(double)); }

19 Test the range of (short)int #include void main(void) { short i; i=32767; printf("i=%d\n", i); i=32768; printf("i=%d\n", i); }

20 Variables and arithmetic expression (1.2) C = (5/9)(F-32) 攝氏 - 華氏轉換 Try to output the right table using printf 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 FC

21 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 /* temperature version 0 */ #include main() { printf( “ 0 -17\n"); printf( “ 20 -6\n"); printf( “ 40 4\n ” ); /* … */ }

22 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 /* temperature version 1 */ #include main() { int F, C; F = 0; C = 5 * (F-32) / 9; printf("%d %d\n", F, C); F = F+20; C = 5 * (F-32) / 9; printf("%d %d\n", F, C); /* … */ } /*algorithm */ F=0 -> C F+20 -> C …

23 Arithmetic expression C = 5*(F-32)/9; C = 5/9*(F-32); Expressions are evaluated in this direction one-by-one =0 Because their type is integer, division will truncate the remainder

24 Equation in C F = F + 20; F 無解? F + 20Temp F

25 More about printf printf("%d\t%d\n", F, C); Variables should be properly initialized C does not have build-in input or output Call the function printf and scanf The current value of the variable will be printed on display

26 More about printf Format numeric output %d tight output 0 20 40 60 120 %3d 0 20 40 60 120 Right justified

27 Course break http://alg.csie.ncnu.edu.tw/course/cprogram /introduction.htm http://alg.csie.ncnu.edu.tw/course/cprogram /introduction.htm

28 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 /* temperature version 2 */ #include main() { float F, C; F = 0.0; C = 5.0 * (F-32.0) / 9.0; printf( “ %f %f\n", F, C); F = F+20.0; C = 5.0 * (F-32.0) / 9.0; printf("%f %f\n", F, C); /* … */ } /*algorithm */ F=0 -> C F+20 -> C …

29 Floating-point representation +1.101 2 x 2 -5 32-bit sign significand exponent *Must be normalized Ex. 0.1101 2 x 2 -4 010000110 8 bits 23 bits 101000 …………….0 significandexponent Bias exponent = exponent + 127 [-127,128] -> [0, 255]

30 Floating point  C = 5.0/9.0 *(F-32.0);  (F-32) : integer will convert to float for computation  C = 5/9 *(F-32.0);  What will happen?  printf("%3.0f\t%6.1f\n", F, C); Evaluate order 整數位數小數位數

31 Floating point (cont.) Many print-out form others %f %6f %.2f %6.2f %o otcal %x hexadecimal %c character %s character string % %

32 流程控制: 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

33 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

34 #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

35 #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

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

37 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

38 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); }

39 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

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

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

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

43 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; }

44 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; }

45 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; }

46 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

47 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

48 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

49 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

50

51 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

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

53 Exercise Modify your homework#2 1. Use symbol constant 2. Read keyboard input to decide the level of output * ** *** **** ***** ****** ******* ******** ********* **********

54 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 !=

55 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

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

57 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 ” ?

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

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

60 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

61 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

62 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

63 /* 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]

64 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 …

65 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

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

67 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);

68 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

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

70 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

71 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

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

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

74 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; }

75 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

76 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]

77 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

78 #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

79 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?

80 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]

81 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

82 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

83 #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

84 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 … )

85 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 "The C programming language: Introduction Fall 2003, Jen-Chang Liu."

Similar presentations


Ads by Google