Date post: | 19-Dec-2015 |
Category: |
Documents |
View: | 223 times |
Download: | 0 times |
The C programming language:Introduction
Fall 2003, Jen-Chang Liu
Position of C
Hardwaremachines
MS WindowsUnixLinux
shelldesktop dos
applications
machinelanguage
High-levellanguage
compiler
C, C++Pascal,..
HumanNatural language
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
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
Tutorial Started by learning by examples… Please try the examples on your own
如何產生可執行程式?
C sourceCodeC 原始程式
Compiler編譯器
ExecutableCode可執行碼
Turbo C 2.01整合式編譯環境
文字檔形式*.c
執行檔形式*.exe
Visual C++
Compiler Unix: cc, gcc(GNU C compiler)
gcc has PC version, you may try to install it Windows: Visual C++, Borland C++
編譯器
aaa.ccompiler aaa.obj
bbb.ccompiler bbb.obj
abc.exe
…
link
Example 1
#include <stdio.h>
main( ) { printf("Hello, world\n"); }
functions
Standard input/output library
printfscanf…
argumentsBody ofmain func
Terminatorof
statement
函式庫
C programming concept
Controlunit
tape
read/write head
…
symbols
state of the machines
Turing machine
printf(“Hello world!”);
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
inputfunction
output
Example 1 (cont.) “Hello, world\n”
Example 2
Character strings(string constant)
Newline character\t: tab, \b: backspace, \\: \
Program components Function
Contains statements that specify the computing operations to be done
Variable Store values for computing
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
上課程式實做繳交規定program submission in class
每次上課後將當天實做之程式繳交 方式 : email
Subject: work 日期 學號 例: work1027 93321001 只交上 .c 檔便可
繳交程式必須加上註解 (comments) ,包括 姓名,學號 程式目的 每行的作用
Prog2-1// 劉震昌 , 93xx0xx// 程式目的:測試整數變數並印出#include <stdio.h>void main(void){ int i; /* 變數宣告 declaration */ i=2; /* 設定變數 */ printf(“This is my %dnd C program”, i); // 印出
訊息}
變數宣告與設定 宣告:告知編譯器 data type 與 變數名稱
Ex. int i;
變數設定
變數名稱可以任取,最好取有意義的文字( 第一個字不可為數字 )
變數型態
i = 2; // 將 i 設成 2
Data types of Variables
int integershort short integerlong long integerchar characterfloat floating pointdouble double-precision
case-sensitivekeywords
Integer withmachine-dependentsizes
Prog4-0 (p. 4-10)
#include <stdio.h>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(doubl
e));}
Test the range of (short)int#include <stdio.h>void main(void){
short i;i=32767;printf("i=%d\n", i);i=32768;printf("i=%d\n", i);
}
Variables and arithmetic expression (1.2)
C = (5/9)(F-32) 攝氏 -華氏轉換 Try to output the right table using printf
0 -1720 -640 460 1580 26100 37120 48140 60160 71180 82200 93220 104240 115260 126280 137300 148
F C
0 -1720 -640 460 1580 26100 37120 48140 60160 71180 82200 93220 104240 115260 126280 137300 148
/* temperature version 0 */#include <stdio.h>
main(){ printf(“0 -17\n"); printf(“20 -6\n"); printf(“40 4\n”); /* … */}
0 -1720 -640 460 1580 26100 37120 48140 60160 71180 82200 93220 104240 115260 126280 137300 148
/* temperature version 1 */#include <stdio.h>
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 -> CF+20 -> CF+20 -> C…
Arithmetic expression C = 5*(F-32)/9;
C = 5/9*(F-32);
Expressions are evaluated in this direction one-by-one
=0Because their type is integer,division will truncate the remainder
Equation in C F = F + 20;
F 無解?
F + 20 Temp
F
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
More about printf Format numeric output
%d
tight output
0
20
40
60
120
%3d
0
20
40
60
120
Right justified
Course break
http://alg.csie.ncnu.edu.tw/course/cprogram/introduction.htm
0 -1720 -640 460 1580 26100 37120 48140 60160 71180 82200 93220 104240 115260 126280 137300 148
/* temperature version 2 */#include <stdio.h>
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 -> CF+20 -> CF+20 -> C…
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);
Evaluateorder
整數位數 小數位數
Floating point (cont.) Many print-out form
others
%f%6f%.2f%6.2f
%o otcal%x hexadecimal%c character%s character string%% %
流程控制: while loop 迴圈
Testcondition
Enter loop
Yes (non-0)
ExecuteLoop body
noexit
F=0F=F+20F=F+20…
F=F+20
0 -1720 -640 460 1580 26100 37120 48140 60160 71180 82200 93220 104240 115260 126280 137300 148
F=0
F=F+20
F<=300
while loop 迴圈
F = 0;while (F <= 300){ F = F+20;}
Testcondition
Enter loop
Yes(non-0)
ExecuteLoop body
noexit
/* C Language */
F=0
F<=300
F=F+20
#include <stdio.h>
/* 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 Declarationint = integer
Variableassignment
whileloop
#include <stdio.h>
/* 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 pointversion of ex3.
Floating point costant
Exercise 1 Print the following numbers using while
loops11235813213455
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
for loop
for(initial ; loop test ; increment){ Loop body… … }
Testcondition
Enter loop
yes
ExecuteLoop body
noexit
initial value
ExecuteLoop increment
F=0
F=F+20;
F<=300
for(F=0; F<=300; F=F+20){ printf(“%d\n”, F);}
for statement
#include <stdio.h>
/* 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 looptest
Type conversion
Exercise 2 Print the following numbers using for
loops11235813213455
Review of HW#2
*** *** **** ***** ****** ******* ******** ********* **********
#include<stdio.h>
main(){
int i,j;for(i=1;i<=10;i++){ /* 第一層迴圈
* 增加直行 */for(j=1;j<=i;j++){
printf("*"); /* 第二層迴圈 * 增加橫的 */
}printf("\n");
}}
Review of HW#2
*** *** **** ***** ****** ******* ******** ********* **********
#include<stdio.h>main(){ int i,k; for(i=0;i<10;i++){ for(k=0;k<i;k++){ printf("*"); } printf("\n"); }}
Review of HW#2
*** *** **** ***** ****** ******* ******** ********* **********
#include <stdio.h>
main (){ int A, B; for(A=1; A<=10; A= A+1){ B=0; printf("\n"); while(B<A){ printf("*"); B=B+1; } }}
Review of HW#2
*** *** **** ***** ****** ******* ******** ********* **********
#include<stdio.h>
int main (){
int a,b;
for(a=0;a<10;a++){for(b=1;b<=a;b++)
printf("*", b);printf("*\n" ,a);
}return 0;
}
Review of HW#2
*** *** **** ***** ****** ******* ******** ********* **********
#include <stdio.h>
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; } }
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
Symbol constants
#include <stdio.h>
#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 nameat compile time
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
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 takenas files
輸入stdin
輸出stdout
Example: File copying
#include <stdio.h>
/* echo, version 1 */main(){ int c;
c=getchar(); while( c != EOF ){ putchar(c); c = getchar(); }}
not equal to
End Of File
A constant definedin stdio.hNOT the same asany char values
Example: File copying EOF
Print the value of EOF
End of file
OS Keyboardterminationsignal(ctrl-Z)
#include <stdio.h>
main(){ printf("EOF = %d\n", EOF);}
Exercise Modify your homework#2
1. Use symbol constant 2. Read keyboard input to decide the level of output
*** *** **** ***** ****** ******* ******** ********* **********
Example: File copyingAssignment
c= getchar(); Assignment is an expression and has a valu
e, which is the value of the left hand side after assignment.
#include <stdio.h>main(){ int c;
while( (c=getchar()) != EOF ){ putchar(c); }}
Precedence of = and !=
Example: Character counting
#include <stdio.h>
main(){ long nc; /* number of character */
nc = 0; while(getchar() != EOF) ++nc; printf("%ld\n",nc);}
Good namingConventionFor variables
nc = nc+1;
32-bitinteger
Example : Character counting 2
#include <stdio.h>
main(){ double nc;
for(nc = 0; getchar()!= EOF; ++nc) ; printf("%.0f\n",nc);}
null statement
Increaserange
Example: Line counting
#include <stdio.h>
/* 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
條件測試characterconstant
ASCII valueof input char.
“\n” ?
if statement
if( expression ){ statement 1; }else{ statement 2; }
TestYES
Statement 1
NO
IF
statement 3;Statement 2
Statement 3
else
Exercise #2 Modify the previous program, such that
it counts the number of occurrences of ‘{’ and ‘}’ in a file
Example: Word counting
#include <stdio.h>#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 nowis in a word or not
nl=(nw=(nc=0));OR
OR: ||AND: &&
Evaluate from left to right
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
Example: Count digits Store occurrence of each digit in an
array
#include <stdio.h>
/* 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
/* 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]
Multi-way decision
if( expression ){ statement 1; }else if { statement 2; }…else{ statement N;}
statement K;
TestYES
Statement 1
NO
IF
Statement K
TestYES
Statement 2
else if
else if…
Test
else
NO
Statement N
YESStatement N-1
…
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
Functions Function, subroutine, procedure printf, getchar, putchar, …
input
output
…body…(hidden from user)
Example: Power Power(2,3) -> 23
#include <stdio.h>
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 prototypec.f. function definitionint power(int, int);
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…){Declarationsstatements}
Samefile?
These variable names are localto this function
Functions (cont.)
power(int base, int n)
return p;
…body…(hidden from user)
power(2,i)
arguments(formal arguments)
parameters(actual arguments)
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 cannotcheck the correctnessof the parameters of function calls
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
Call by value
Store-program concept Program is data
Data segment
Program segment
…
…
memory
Data segment
Program segment
main
power
…
address
2i
Program segment
…
…
memory
Program segment
main
power
…
address
power(2,i)
basen
Call by value
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;}
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
Character arrays Character arrays = strings
“Hello\n”
H e l l o \n \0
Null character
H e l l o \n \0s
結尾字元char s[10];
S[0]S[1]S[2]S[3] …
… …
S[9]
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 lengthprint longest line
Algorithm outline
#include <stdio.h>#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
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?
lineMAXLINE
…
…
memory
Program segment
main
getline
…
address
slim
Call by valuefor char arrays
int getline(line, MAXLINE)…
…
char line[MAXLINE]
line[0]…line[MAXLINE-1]
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
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
Allocatewhen entering
#include <stdio.h>#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
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…)
External variables (cont.) Write them in a header file
extern int max;extern char line[];extern char longest[];
ggyy.h
#include <ggyy.h>
int getline(void){ int c, i;
for(i=0; …}