C/C++
Table of contents 1. 2. 3. & 4. 5. 1
2
3
# include <stdio.h> # define SIZE 50 int main ( void ) { float list [ SIZE ]; readlist (list, SIZE ); sort (list, SIZE ); average (list, SIZE ); bargragh (list, SIZE ); return 0; } 4
5
printf() printf() printf() 6
7
**************************************** Wuhan University 299 Bayi Road Wuchang District, Wuhan, PR China 430072 **************************************** 8
i // lethead1.c # include <stdio.h> # define NAME " Wuhan University " # define ADDRESS " 299 Bayi Road, Wuchang District," # define PLACE " Wuhan, PR China 430072 " # define WIDTH 40 void starbar ( void ); /* prototype the function */ int main ( void ) { starbar (); printf ("%s\n", NAME ); printf ("%s\n", ADDRESS ); printf ("%s\n", PLACE ); 9
ii } starbar (); /* use the function */ return 0; void starbar ( void ) /* define the function */ { int count ; for ( count = 1; count <= WIDTH ; count ++) putchar ( * ); putchar ( \n ); } 10
starbar() (function prototype) starbar (function call) (function definition) 11
main() void starbar ( void ); starbar() void void 12
main... void starbar ( void ); int main ( void ) {... }... int main ( void ) { void starbar ( void ); } 13
main() starbar() starbar (); starbar() starbar() (calling function) 14
starbar() main() starbar() 15
starbar() main() #define #include 16
starbar() count starbar() count 17
**************************************** Wuhan University 299 Bayi Road, Wuchang District, Wuhan, PR China 430072 **************************************** 18
40 19
40 1. 40 19
40 1. 40 2. Wuhan University 19
40 1. 40 2. Wuhan University 19
40 1. 40 2. Wuhan University 3. 19
40 1. 40 2. Wuhan University 3. l 40 l (40 l)/2 19
i // lethead2.c # include <stdio.h> # include <string.h> # define NAME " Wuhan University " # define ADDRESS " 299 Bayi Road, Wuchang District," # define PLACE " Wuhan, PR China 430072 " # define WIDTH 40 # define SPACE void show_n_char ( char ch, int num ); int main ( void ) { int spaces ; 20
ii show_n_char ( *, WIDTH ); putchar ( \n ); show_ n_ char ( SPACE, 12) ; /* use a constant as arguments */ printf ("%s\n", NAME ); spaces = ( WIDTH - strlen ( ADDRESS )) /2; show_ n_ char ( SPACE, spaces ); /* use a variable as argument */ printf ("%s\n", ADDRESS ); show_n_char ( SPACE, ( WIDTH - strlen ( PLACE )) /2) ; /* use an expression as argument */ printf ("%s\n", PLACE ); show_n_char ( *, WIDTH ); putchar ( \n ); return 0; 21
iii } /* show_ n_ char () definition */ void show_n_char ( char ch, int num ) { int count ; for ( count = 1; count <= num ; count ++) putchar (ch); } 22
void show_n_char ( char ch, int num ) show_n_char() ch num char int ch num (formal argument) (formal parameter) 23
void func1 ( int x, y, z) // wrong void func2 ( int x, int y, int z) // right 24
1 void show_n_char (ch, num ) char ch; int num ; {... } 25
2 void func1 (x, y, z) int x, y, z; {... } 26
ANSI void show_n_char ( char ch, int num ); void show_n_char (char, int ); 27
ANSI C void show_n_char (); 28
(actual argument) ch num show_n_char ( SPACE, 12) ; 12 show_n_char() ch num 29
30
return 31
return 32
return i // lesser. c -- finds the lesser of two integers # include <stdio.h> int imin (int, int ); int main ( void ) { int n1, n2; printf (" Enter two integers (q to quit ):\n"); while ( scanf ("%d %d", &n1, &n2) == 2) { printf (" The lesser of %d and %d is %d.\n", n1, n2, imin (n1,n2)); printf (" Enter two integers (q to quit ):\n"); } printf (" Bye.\n"); return 0; 33
return ii } int imin ( int n,int m) { int min ; min = (n < m)? n : m; return min ; } 34
return Enter two integers ( q to quit ): 509 333 The lesser of 509 and 333 is 333. Enter two integers ( q to quit ): -9333 6 The lesser of -9333 and 6 is -9333. Enter two of integers ( q to quit ): q Bye. 35
return return imin() min return lesser = imin (m, n); min lesser imin (m, n); lesser = min ; 36
return return imin() min return lesser = imin (m, n); min lesser imin (m, n); lesser = min ; 36
return answer = 2* imin (m, n) + 5; printf ("%d\n", imin ( answer +2, LIMIT )); 37
return imin int imin ( int n,int m) { return ((n < m)? n : m); } 38
return int what_if ( int n) { double z = 100. 0 / ( double ) n; return z; } What will happen? 39
return int what_if ( int n) { double z = 100. 0 / ( double ) n; return z; } What will happen? doule z int 39
return return return imin() int imin ( int n, int m) { if (n < m) return n; else return m; printf ("Oh my god!\n"); } return printf 40
return return ; return void 41
void double klink ( int a, int b) int double 42
int imin ( int n, int m) {... } int main ( void ) {... n = imin (n1, n2);... } 43
int imin (int, int ); int main ( void ) { int n1, n2, lesser ;... n = imin (n1, n2);... } int imin ( int n, int m) {... } 44
int main ( void ) { int imin (int, int ); int n1, n2, lesser ;... n = imin (n1, n2);... } int imin ( int n, int m) {... } 45
ANSI C 46
// stdio.h int getchar (); int putchar ( int c); int printf ( const char * format,... ); int scanf ( const char * format,... ); 47
// math.h double sin ( double ); double cos ( double ); double tan ( double ); double asin ( double ); double acos ( double ); double atan ( double ); double log ( double ); double log10 ( double ); double pow ( double x, double y); double exp ( double ); double sqrt ( double ); int abs ( int ); double fabs ( double ); 48
C (recursion) 49
i /* recur. c -- recursion illustration */ # include <stdio.h> void up_and_down ( int ); int main ( void ) { up_and_down (1) ; return 0; } void up_and_down ( int n) { printf (" Level %d: n location %p\n", n, &n); // 1 if (n < 4) 50
ii } up_and_down (n +1) ; printf (" LEVEL %d: n location %p\n", n, &n); // 2 51
Level 1: n location 0 x7fff5fbff7bc Level 2: n location 0 x7fff5fbff79c Level 3: n location 0 x7fff5fbff77c Level 4: n location 0 x7fff5fbff75c LEVEL 4: n location 0 x7fff5fbff75c LEVEL 3: n location 0 x7fff5fbff77c LEVEL 2: n location 0 x7fff5fbff79c LEVEL 1: n location 0 x7fff5fbff7bc 52
Level 1: n location 0 x7fff5fbff7bc Level 2: n location 0 x7fff5fbff79c Level 3: n location 0 x7fff5fbff77c Level 4: n location 0 x7fff5fbff75c LEVEL 4: n location 0 x7fff5fbff75c LEVEL 3: n location 0 x7fff5fbff77c LEVEL 2: n location 0 x7fff5fbff79c LEVEL 1: n location 0 x7fff5fbff7bc & &n n printf() %p 52
main() 1 up_and_down() #1 Level 1 n < 4 up_and_down()( 1 ) 2 up_and_down()( 2 ) #1 Level 2 Level 3 Level 4 53
4 n 4 if up_and_down() #2 Level 4 4 3 3 if 4 #2 Level 3 3 2 Level 2 54
n 55
#1 4 1 2 3 4 #2 4 3 2 1 56
57
return (tail recursion) 58
59
i // factor. c -- uses loops and recursion to calculate factorials # include <stdio.h> long fact ( int n); long rfact ( int n); int main ( void ) { int num ; printf (" This program calculates factorials.\ n" ); printf (" Enter a value in the range 0-12 ( q to quit ):\n"); while ( scanf ("%d", & num ) == 1) { if ( num < 0) 60
ii } printf ("No negative numbers, please.\n"); else if ( num > 12) printf (" Keep input under 13.\ n"); else { printf (" loop : %d! = %ld\n", num, fact ( num )); printf (" recursion : %d! = %ld\n", num, rfact ( num )); } printf (" Enter a value in the range 0-12 ( q to quit ):\n"); } printf (" Bye.\n"); return 0; 61
iii long fact ( int n) // loop - based function { long ans ; for ( ans = 1; n > 1; n - -) ans *= n; return ans ; } long rfact ( int n) // recursive version { long ans ; if (n > 0) ans = n * rfact (n -1) ; else ans = 1; 62
iv } return ans ; 63
This program calculates factorials. Enter a value in the range 0-12 ( q to quit ): 5 loop : 5! = 120 recursion : 5! = 120 Enter a value in the range 0-12 ( q to quit ): 10 loop : 10! = 3628800 recursion : 10! = 3628800 Enter a value in the range 0-12 ( q to quit ): 12 loop : 12! = 479001600 recursion : 12! = 479001600 Enter a value in the range 0-12 ( q to quit ): q Bye. 64
65
65
65
66
66
67
1 0 n n%2 67
1 0 n n%2 n%2 2 0 1 67
i /* binary. c -- prints integer in binary form */ # include <stdio.h> void to_ binary ( unsigned long n); int main ( void ) { unsigned long number ; printf (" Enter an integer (q to quit ):\n"); while ( scanf ("%lu", & number ) == 1) { printf (" Binary equivalent : "); to_binary ( number ); putchar ( \n ); printf (" Enter an integer (q to quit ):\n"); } 68
ii } printf (" Done.\n"); return 0; void to_ binary ( unsigned long n) { int r; r = n % 2; if (n >= 2) to_binary (n / 2); putchar ( 0 + r); return ; } 69
Enter an integer ( q to quit ): 9 Binary equivalent : 1001 Enter an integer ( q to quit ): 255 Binary equivalent : 11111111 Enter an integer ( q to quit ): 1024 Binary equivalent : 10000000000 Enter an integer ( q to quit ): q Done. 70
71
F 1 = F 2 = 1, F n = F n 1 +F n 2, n = 3,4,. 72
long Fibonacci ( int n) { if (n > 2) return Fibonacci ( n -1) + Fibonacci ( n -2) ; else return 1; } (double recursion) 73
1: n Level number of n 1 1 2 2 3 2 2 4 2 3.. l 2 l 1 74
&
& C (pointer) 75
& scanf() 76
& & 77
& & var &var 77
& var = 24; var 07BC printf ("%d %p\n", var, & var ); 24 07 BC 78
& i /* loccheck. c -- checks to see where variables are stored */ # include <stdio.h> void func ( int ); int main ( void ) { int var1 = 2, var2 = 5; // local to main () printf (" main (): var1 = %2d, & var1 = %p\n", var1, & var1 ); printf (" main (): var2 = %2d, & var2 = %p\n", var2, & var2 ); func ( var2 ); return 0; } 79
& ii void func ( int var2 ) { int var1 = 10; // local to func () printf (" func (): var1 = %2d, & var1 = %p\n", var1, & var1 ); printf (" func (): var2 = %2d, & var2 = %p\n", var2, & var2 ); } 80
& In main (), var1 = 2 and & var1 = 0 x7fff5fbff7d8 In main (), var2 = 5 and & var2 = 0 x7fff5fbff7d4 In func (), var1 = 10 and & var1 = 0 x7fff5fbff7a8 In func (), var2 = 5 and & var2 = 0 x7fff5fbff7ac 81
& var1 var2 func ( main() var2 ) 5 ( func() var2 ) 82
83
x y x = y; y = x; 84
x y x = y; y = x; 84
x y x = y; y = x; 84
x y temp = y; x = y; y = temp ; 85
x y temp = y; x = y; y = temp ; 85
// swap1.c # include <stdio.h> void swap ( int u, int v); int main ( void ) { int x = 5, y = 10; printf (" Before : x = %2d, y = %2d.\n", x, y); swap (x, y); printf (" After : x = %2d, y = %2d.\n", x, y); return 0; } 86
void swap ( int u, int v) { int temp ; temp = u; u = v; v = temp ; } 87
void swap ( int u, int v) { int temp ; temp = u; u = v; v = temp ; } Before : x = 5, y = 10. After : x = 5, y = 10. 87
void swap ( int u, int v) { int temp ; temp = u; u = v; v = temp ; } Before : x = 5, y = 10. After : x = 5, y = 10. Why not interchanged? 87
i // swap2.c: # include <stdio.h> void swap ( int u, int v); int main ( void ) { int x = 5, y = 10; printf (" Before : x = %2d, y = %2d.\n", x, y); swap (x, y); printf (" After : x = %2d, y = %2d.\n", x, y); return 0; } 88
void swap ( int u, int v) { int temp ; printf (" Before : u = %2d, v = %2d.\n", u, v); temp = u; u = v; v = temp ; printf (" After : u = %2d, v = %2d.\n", u, v); } 89
void swap ( int u, int v) { int temp ; printf (" Before : u = %2d, v = %2d.\n", u, v); temp = u; u = v; v = temp ; printf (" After : u = %2d, v = %2d.\n", u, v); } 89
Before : x = 5, y = 10. Before : u = 5, v = 10. After : u = 10, v = 5. After : x = 5, y = 10. 90
Before : x = 5, y = 10. Before : u = 5, v = 10. After : u = 10, v = 5. After : x = 5, y = 10. swap() u v main() swap() main() u v x y 90
return int main ( void ) {... x = swap (x, y);... } int swap ( int u, int v) { int temp ; temp = u; u = v; v = temp ; return u; } 91
x y return 92
x y return 92
x y return 92
93
ptr ptr = & var ; var ptr ptr var 94
ptr ptr = & var ; var ptr ptr var ptr &var 94
ptr ptr ptr = & var1 ; 95
96
* 96
* ptr var ptr = & var ; * var value = * ptr ; 97
* ptr var ptr = & var ; * var value = * ptr ; ptr = & var ; value = * ptr ; value = var ; 97
pointer ptr ; 98
pointer ptr ; 98
pointer ptr ; 98
99
// int * pi; // pi char * pc; // pc float * pf, * pg; // pf pg 100
// int * pi; // pi char * pc; // pc float * pf, * pg; // pf pg * int * pi; pi *pi int * 100
pc (*pc) char pc char pc 101
102
i // swap3.c # include <stdio.h> void swap ( int *, int *); int main ( void ) { int x = 5, y = 10; printf (" Before : x = %2d, y = %2d.\n", x, y); swap (&x, &y); printf (" After : x = %2d, y = %2d.\n", x, y); return 0; } 103
void swap ( int * u, int * v) { int temp ; temp = *u; *u = *v; *v = temp ; } 104
Originally : x = 5, y = 10. Now : x = 10, y = 5. 105
swap (&x, &y); x y void swap ( int * u, int * v); void swap ( int *, int *); 106
int temp ; x temp temp = *u; u &x x *u x y x *u = *v; 107
x y x y x y * 108
109
function1 (x); int function1 ( int num ) 110
function2 (&x); int function2 ( int * ptr ) 111