C/C++ - 函数

Similar documents
C/C++ 语言 - 循环

C/C++ - 字符输入输出和字符确认

C/C++ - 文件IO

C/C++语言 - 运算符、表达式和语句

C/C++程序设计 - 字符串与格式化输入/输出

C

C/C++ - 数组与指针

C++ 程式設計

C/C++ - 字符串与字符串函数

C/C++语言 - C/C++数据

新版 明解C言語入門編

C

C/C++语言 - 分支结构

新・明解C言語入門編『索引』

C 1

新・解きながら学ぶC言語

( CIP) /. :, ( ) ISBN TP CIP ( 2005) : : : : * : : 174 ( A ) : : ( 023) : ( 023)

nooog

CC213

C C

2013 C 1 # include <stdio.h> 2 int main ( void ) 3 { 4 int cases, a, b, i; 5 scanf ("%d", & cases ); 6 for (i = 0;i < cases ;i ++) 7 { 8 scanf ("%d %d

c_cpp

CC213

2013 C 1 #include <stdio.h> 2 int main(void) 3 { 4 int cases, i; 5 long long a, b; 6 scanf("%d", &cases); 7 for (i = 0; i < cases; i++) 8 { 9 scanf("%

C C C The Most Beautiful Language and Most Dangerous Language in the Programming World! C 2 C C C 4 C Project 30 C Project 3 60 Project 40

Python a p p l e b e a r c Fruit Animal a p p l e b e a r c 2-2

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.06.doc

C 1 # include <stdio.h> 2 int main ( void ) { 4 int cases, i; 5 long long a, b; 6 scanf ("%d", & cases ); 7 for (i = 0;i < cases ;i ++) 8 { 9

C

C/C++ - 结构体、共用体、枚举体

untitled

untitled

Ps22Pdf

untitled

Microsoft Word - C-pgm-ws2010.doc

untitled

Microsoft Word - 第3章.doc

int *p int a 0x00C7 0x00C7 0x00C int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++;

Microsoft Word - CPE考生使用手冊 docx

WWW PHP

untitled

epub 33-8

扉页

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc

<4D F736F F D DB0AAA4A4BDD2B57BBCC6BEC7ACECA2DFA1AEA2CF2E646F63>

綜合社會保障援助指引

項 訴 求 在 考 慮 到 整 體 的 財 政 承 擔 以 及 資 源 分 配 的 公 平 性 下, 政 府 採 取 了 較 簡 單 直 接 的 一 次 性 減 稅 和 增 加 免 稅 額 方 式, 以 回 應 中 產 家 庭 的 不 同 訴 求 ( 三 ) 取 消 外 傭 徵 費 6. 行 政 長

(f) (g) (h) (ii) (iii) (a) (b) (c) (d) 208

南華大學數位論文

Microsoft Word 一年級散文教案.doc

米食天地教案

第32回独立行政法人評価委員会日本貿易保険部会 資料1-1 平成22年度財務諸表等

Microsoft Word - 08 单元一儿童文学理论

untitled

bnbqw.PDF

第三章

nb.PDF

Microsoft Word - 發布版---規範_全文_.doc

概 述 随 着 中 国 高 等 教 育 数 量 扩 张 目 标 的 逐 步 实 现, 提 高 教 育 质 量 的 重 要 性 日 益 凸 显 发 布 高 校 毕 业 生 就 业 质 量 年 度 报 告, 是 高 等 学 校 建 立 健 全 就 业 状 况 反 馈 机 制 引 导 高 校 优 化 招

鱼类丰产养殖技术(二).doc

疾病诊治实务(一)

名人养生.doc

<4D F736F F D2040B9C5B871A661B0CFABC8AE61C2A7AB55ACE3A8735FA7F5ABD8BFB3B9C5B871A661B0CFABC8AE61C2A7AB55ACE3A8732E646F63>


中老年保健必读(十).doc

27 i

% % ,542 12,336 14,53 16,165 18,934 22,698 25, ,557 7,48 8,877 11, 13,732 17,283 22,

海淀区、房山区(四)

穨ecr1_c.PDF

穨2005_-c.PDF

北京理工大学.doc

尲㐵.⸮⸮⸮⸮⸮

东城区(下)

果树高产栽培技术(一).doc

物质结构_二_.doc

第一節 研究動機與目的

i

水力发电(九)

中国古代文学家(八).doc

景观植物(一)

Microsoft Word - 目录.doc

园林植物卷(三).doc

19q indd

厨房小知识_一_

中南财经大学(七).doc


赵飞燕外传、四美艳史演义

厨房小知识(五)

最新监察执法全书(十八).doc

园林植物卷(十二).doc

华东师范大学.doc

國立中山大學學位論文典藏

乳业竞争_一_

最新执法工作手册(十).doc

untitled

最新执法工作手册(十六)

中国政法大学(六).doc

胎儿健康成长.doc

1. 本文首段的主要作用是 A. 指出 異蛇 的藥用功效 說明 永之人爭奔走焉 的原因 B. 突出 異蛇 的毒性 為下文 幾死者數矣 作鋪墊 C. 交代以蛇賦稅的背景 引起下文蔣氏有關捕蛇的敘述 2. 本文首段從三方面突出蛇的 異 下列哪一項不屬其中之一 A. 顏色之異 B. 動作之異 C. 毒性之

Microsoft Word - edu-re~1.doc

Transcription:

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