第5章 递归 (Recurve)

Size: px
Start display at page:

Download "第5章 递归 (Recurve)"

Transcription

1 第 8 讲函数的设计方法 周水庚

2 提要 函数基础知识 函数定义 函数调用 函数形参 函数说明 递归函数基础 命令行参数 函数程序设计实例 程序设计 年秋 2

3 提要 函数基础知识 函数定义 函数调用 函数形参 函数说明 递归函数基础 命令行参数 函数程序设计实例 程序设计 年秋 3

4 函数基础知识 结构化程序设计中, 将复杂的功能分解成若干简单的子功能, 并用函数实现子功能, 通过调用函数实现子功能要求 函数是一个实现指定功能 逻辑上独立的代码段 对函数使用者来说, 把它看作 黑盒, 只需知道要传送给函数的数据 ( 输入 ), 和函数执行后能得到什么结果 ( 输出 ) 函数还可以定义局部对象, 使函数在逻辑上作为程序的一个相对独立单位, 不受主函数或其他函数对程序对象命名的影响 程序设计 年秋 4

5 函数基础知识 ( 续 ) 函数可带形参, 使函数执行时, 操作对象 求值方式等可随不同调用的需要而改变 函数为程序的层次构造和开发提供支持, 使设计新程序能在已有函数基础上构造功能更强的函数和程序 一个 C 程序以 main() 函数作为程序的主函数 程序运行时, 从它开始执行 在 C 语言中, 函数不能嵌套定义, 一个函数并不从属于另一个函数 除不能调用 main() 函数外, 其它函数可以相互调用 程序设计 年秋 5

6 函数库 把一些公用的 基本的计算功能所对应的函数集中起来, 构成一个库, 称之为函数库, 相应的函数成为库函数 函数库中的函数具有预先定义的 标准的输入 输入接口 C 语言中定义了一些基本的标准函数 编程环境工具厂商 (Microsoft Borland 等 ) 往往提供更多的函数供编程者使用 程序设计 年秋 6

7 函数库 ( 续 ) C 语言使用头文 (header file, 即 *.h 文件 ) 对函数库中的函数进行定义和说明 函数库中的函数经编译后, 绑定在一起件, 构成一个库文件 (library file, 即 *.lib 文件 ) C 程序调用 C 语言或者编程环境提供的函数时, 要在程序中 include 相应的头文件 ; 在产生执行文件时, 需要与库文件中相应的目标函数代码连接 为了使用方便,C 语言按功能分类, 提供了大量函数库, 每个函数库都有自己的头文件 程序设计 年秋 7

8 库函数的使用 使用相应库函数的程序都要在使用之前写上包含其头文件的预处理命令 常用的头文件 stdio.h ( 输入输出库函数 ) math.h stdlib.h float.h ( 数学库函数 ) time.h ( 时间库函数 ) ctype.h ( 字符分类和转换库函数 ) string.h ( 内存缓冲区和字符串处理库函数 ) graphics.h ( 图形处理库函数 ) malloc.h stdlib.h ( 内存动态分配库函数 ) signal.h process.h ( 进程控制库函数 ) 程序设计 年秋 8

9 提要 函数基础知识 函数定义 函数调用 函数形参 函数说明 递归函数基础 命令行参数 函数程序设计实例 程序设计 年秋 9

10 函数定义 函数定义的一般形式为 类型标识符函数名 ( 形式参数说明表 ) { 说明和定义部分语句序列 程序设计 年秋 10

11 函数定义 ( 续 ) 类型标识符用于标识函数执行结果返回值的类型 当函数不返回值时, 习惯用 void 来标记 当函数返回 int 型值时, 类型标识符 int 可以省略 函数名是一个标识符, 一个 C 程序有且只有一个 main() 函数, 其它的函数名可以随意命名 程序设计 年秋 11

12 函数定义 ( 续 ) 函数名之后括号内的形式参数说明表 是按需要而定 没有形参的函数, 也就没有形参说明表, 常用 void 代之, 但函数名之后的一对圆括号不可省略 当函数有多个形参时, 形参说明之间用逗号分隔, 每个形参说明指定形参名和类型 程序设计 年秋 12

13 函数定义 ( 续 ) 最外层花括号 { 和 括住的部分 是函数体 在函数体的前面部分可有函数需要的程序对象的说明和定义 函数体内定义的变量是局部变量, 只能在函数体内引用它们 说明和定义之后是由语句序列组成的代码 程序设计 年秋 13

14 例子 1 求两个数中最小值的函数 min() double min(double x, double y) /* 返回 double 型值, 有两个形参 x, y, 都为 double 型的 */ { /* 函数返回 x 和 y 中的小者的值 */ return x < y? x : y; return 语句的执行将结束函数的执行 C 语言的 return 语句有两种形式 : return; 用于不返回值的函数体中 return 表达式 ; 用于有返回值的函数体中 程序设计 年秋 14

15 例子 2 求两个正整数最大公因子的函数 gcd() 两个正整数 a 和 b 的最大公因子有性质 : gcd(a, b) = gcd(a-b, b), 如 a > b; gcd(a, b) = gcd(a, b-a), 如 a < b; gcd(a, b) = a, 如 a = b 程序设计 年秋 15

16 第 1 解法 int gcd(int a, int b) { while( a!= b) if(a > b) a -= b; else b -= a; return a; 程序设计 年秋 16

17 第 2 解法 步骤 : [ 求余数 ] 求 a 除 b 的余数 r [ 判结束 ] 如 r 等于 0,b 为最大公约数 [ 替换 ] 用 b 置 a,r 置 b, 并回到步骤 [ 求余数 ] 程序设计 年秋 17

18 int gcd(int a, int b) { int r; while(1) { if((r = a % b) == 0) break; a = b; b = r; return b; 程序设计 年秋 18

19 int gcd(int a, int b) { int r = a; do { a = b; b = r; r = a % b; while (r); return b; 程序设计 年秋 19

20 函数定义 ( 续 ) C 语言允许在函数名后的圆括号内只给出各形参的名, 随后才指定各形参的类型 但这种写法在 C++ 中已不允许 double min(x, y) double x, y; { return x < y? x : y; C 语言还允许函数体为空的函数 dummy() /* 或 dummy(void) */ { 程序设计 年秋 20

21 提要 函数基础知识 函数定义 函数调用 函数形参 函数说明 递归函数基础 命令行参数 函数程序设计实例 程序设计 年秋 21

22 函数调用 函数被定义以后, 凡要实现函数功能的地方, 就可简单地通过函数调用来完成 函数调用的一般形式为 函数名 ( 实在参数表 ) 实在参数, 简称实参 函数调用时的实参按它们出现的顺序与函数定义中的形参一一对应, 并要求实参类型与其对应的形参类型相一致 程序设计 年秋 22

23 函数调用 ( 续 ) 函数调用有两种方式 传值调用 (call by value) 把实参的值传给被调用函数的参数 ( 形参 ) 这时, 被调用函数对参数的改变, 不影响调用函数实参的原始值 传引用调用 (call by reference) 把实参的地址传给被调用函数的参数 ( 形参 ) 地址 这时, 被调用函数对参数的改变, 将影响到调用函数实参的原始值 程序设计 年秋 23

24 函数调用 ( 续 ) 对 double min(double x, double y) 的函数调用 w = min(u, v); 函数调用 min(u, v) 就是对函数 min() 的调用, 它提供了两个实参 u 和 v, 分别对应形参 x 和 y 如果调用无形参的函数, 这时函数的调用形式变为 函数名 (); 其中, 函数名之后的一对圆括号不能省略 程序设计 年秋 24

25 函数调用 ( 续 ) 按函数调用在程序中的作用, 有两种不同类型的应用 利用函数所完成的功能 将函数调用作为一个独立的语句 这种应用不要求或无视函数的返回值 如 : 程序中经常使用的调用格式输入函数 scanf() 和格式输出函数 printf() 等 利用函数的返回值 或用返回值继续进行表达式的计算, 或输出函数返回值等 程序设计 年秋 25

26 函数调用的执行过程 1. 为形参分配内存空间 2. 计算实参表达式的值, 并将值赋给对应的形参 3. 为函数的局部变量分配内存空间 4. 执行函数体内的语句序列 5. 函数体执行完, 或执行了 return 语句后, 释放为这次函数调用分配的全部内存空间 6. 将函数值 ( 如果有 ) 返回到函数调用处继续执行 程序设计 年秋 26

27 #include <stdio.h> double x, y, d, min(double, double); void main() { printf( Enter x,y.\n ); scanf( %lf%lf,&x,&y); d = min(x, y); printf( MIN(%.3f, %.3f) = %.3f\n, x, y, d); double min(double a, double b) { double temp; temp = a > b? b : a; return temp; 程序设计 年秋 27

28 对函数调用的说明 当函数执行 return 语句或执行完函数体的语句序列后, 函数的这次调用就执行结束, 随之将控制返回到函数调用处继续执行 函数的返回值是通过执行 return 语句时, 计算 return 之后的表达式值而获得的 如果函数不提供返回值, 则 return 语句不应包含表达式 如果函数有返回值, 则应有确定的类型, 并在函数定义时指明 若函数定义时不指明返回值类型, 且函数有返回值,C 语言约定该函数的返回值类型为 int 型 程序设计 年秋 28

29 对函数调用的说明 ( 续 ) 为了明确指明函数不提供返回值, 建议在函数定义时, 在函数名之前写上 void 并在这样的函数体内, 所有的 return 语句都不应该带表达式 当函数执行不带表达式的 return 语句返回时, 函数并不是一定不带回值, 而是返回一个不确定的值 这样的函数调用不应该利用函数返回值进行计算, 否则会产生错误结果 函数定义中的 return 语句的表达式类型应与函数定义中指明的返回值类型相一致 如果 return 语句中的表达式类型与函数定义指明的返回值类型不一致时, 对于是基本类型情况, 则以函数的返回值类型为准, 系统会自动进行类型转换 程序设计 年秋 29

30 对函数调用的说明 ( 续 ) 在函数未被调用时, 函数定义中的形参和函数体中定义的局部变量并不占用存储单元 在函数定义中, 必须为函数的形参指定数据类型 函数体中所使用的形参的初值是由函数调用时对应的实参表达式给定的 C 语言规定, 实参表达式对形参的数据传递是 值传递 的, 即单向传递 对于有多个实参的函数调用情况,C 语言不规定实参的求值次序 程序设计 年秋 30

31 提要 函数基础知识 函数定义 函数调用 函数形参 函数说明 递归函数基础 命令行参数 函数程序设计实例 程序设计 年秋 31

32 函数形参 函数设置形参的目的是让函数被调用时, 能从调用处获得信息 ( 数据或指针 ) C 语言关于函数形参遵守以下规定 函数调用时, 形参从实参获得初值 函数形参可看作函数内部的局部变量, 函数体内对形参的修改不会影响实参本身 函数形参的作用由形参的类型确定 基本类型 指针类型 数组类型 当函数的形参是某种指针类型或数组类型时, 形参从实参处得到某环境变量的指针, 函数体就能通过指针形参间接引用环境变量, 能改变环境变量的值 程序设计 年秋 32

33 提要 函数基础知识 函数定义 函数调用 函数形参 函数说明 递归函数基础 命令行参数 函数程序设计实例 程序设计 年秋 33

34 函数说明 为什么要对函数进行说明? 一个函数要调用另一个函数, 应知道有关如何正确调用被调用函数的一些信息 编译程序根据这些信息检查调用的正确性 对不正确的调用给出错误信息 ; 对正确的调用编译出机器代码 程序设计 年秋 34

35 调用函数与被调用函数 调用函数与被调用函数之间在程序正文中可能会存在以下三种情况 调用同一程序文件中前面已定义的函数 调用处于同一程序文件后面定义的函数 调用别的程序文件中定义的函数 对于第一种情况, 在函数调用处, 被调用函数的详细信息已被编译程序所接受 对于后两种情况, 因这时被调用函数的信息还未被编译程序所接受, 不能检查函数调用的正确性, 所以在调用之前需对被调用函数作出说明 程序设计 年秋 35

36 调用函数与被调用函数空间关系 int f1( ){ f1( ){ f1( ){ a=f2( ); a=f2( ); f1.cpp f2( ){ a=f1( ); int f2( ){ int f2( ){ f2.cpp 程序设计 年秋 36

37 函数说明形式 与调用有关的函数信息包括 函数的返回值类型 函数名和函数有关形参的个数及其类型等 只给出函数的调用信息称作函数说明 函数说明的一般形式为类型标识符 ( 形参类型表 ); 其中, 形参类型表顺序给出各形参的类型 形参类型表可以为空 为了强调函数没有形参, 空形参类型表可以写作 void 函数说明对要定义的函数名及其返回值类型和各形参的类型作说明, 以便让编译程序预先知道该标识符是函数名 它的返回值类型和它的形参个数及各形参的类型 程序设计 年秋 37

38 函数说明示例 #include <stdio.h> void main() { double power(double, int),x; int n; printf("enter x and n.\n"); scanf("%lf %d",&x,&n); printf("power(%f, %d) = %f\n", x, n, power(x, n)); double power (double x, int n) {/*x n =x*x n-1, 当 n 为奇数 ; 或 x n = (x 2 ) n/2, 当 n 为偶数 */ double z, y; z = 1.0; y = x; while (n>0) { while (n%2 == 0) { n /= 2; y *= y; n--; z *= y; return z; 程序设计 年秋 38

39 有函数说明的两种情况 -1 被调用函数是库函数 程序需使用预处理命令 #include 将包含有库函数的模型 它们所使用的常量 宏定义 数据类型定义等信息的文件包含进来 习惯称文件名以. h 为后缀的文件为头文件 (header file) 在头文件中通常包含宏定义 数据类型说明和定义 公共变量的外部说明等 在大型 C 程序设计中, 用户程序也会有自己的头文件, 如有头文件名为 d_type.h 使用包含预处理命令 #include "d_type.h" 程序设计 年秋 39

40 有函数说明的两种情况 -2 调用同一程序文件中后面定义的函数, 或是调用别的程序文件中定义的函数, 应在调用函数之前对被调用函数作函数说明 在 C 语言中, 如被调用函数的返回值是整型或字符型, 也可以不对其返回类型作说明 程序设计 年秋 40

41 提要 函数基础知识 函数定义 函数调用 函数形参 函数说明 递归函数基础 命令行参数 函数程序设计实例 程序设计 年秋 41

42 递归函数基础 一个函数为完成复杂的工作, 可以调用其他函数 例如, 从主函数出发, 主函数调用函数 A(), 函数 A() 又调用函数 B(), 函数 B() 又调用函数 C(), 等等 这样从主函数出发, 形成一个长长的调用链, 就是通常所说的函数嵌套调用 (nested call) 函数嵌套调用时, 有一个重要的特征, 先被调用的函数后返回 如这里所举例子, 待函数 C() 完成计算返回后, B() 函数继续计算 ( 可能还要调用其他函数 ), 待计算完成, 返回到函数 A(), 函数 A() 计算完成后, 才返回到主函数 当函数调用链上的某两个函数为同一个函数时, 称这种函数调用方式为递归调用 (recursive call) 程序设计 年秋 42

43 递归函数基础 (2) 程序设计 年秋 43

44 递归函数基础 (3) 函数调用过程 A B C A 函数调用图 A B C 程序设计 年秋 44

45 递归的概念 递归的定义 若一个对象部分地包含它自己, 或用它自己给自己定义, 则称这个对象是递归的 若一个函数直接地或间接地调用自己, 则称这个函数是递归函数 (recursive function) 在以下三种情况下, 常常用到递归方法 定义是递归的 数据结构是递归的 问题的解法是递归的 程序设计 年秋 45

46 递归函数示例 -1 阶乘函数 : 1, n! = n ( n 1)!, 当 n = 0 时当 n 1时 用循环实现阶乘计算的函数 long fac(int n) { long s; int i; for(s = 1L, i = 1; i <= n; i++) s *= i; return s; 用递归实现阶乘计算函数 求解阶乘函数的递归算法 long fac (int n ) { if ( n == 0 ) return 1L; else return (long)n*fac (n-1); 程序设计 年秋 46

47 求解阶乘 4! 的过程 程序设计 年秋 47

48 递归函数示例 -2 用递归函数实现数组元素的求和计算 int rsum(int *a, int n) { if (n == 0) return 0; /* 若数组没有元素, 则返回 0 */ return *a+rsum(a+1, n-1); /* 当前元素与其余元素的和 */ 程序设计 年秋 48

49 递归函数示例 -3 求解 Hanoi 塔问题 问题是这样的, 有三根针 ( 设分别为 A B C), 在 A 针上有 n 张大小均不相同的金片, 大的在下, 小的在上 要求按以下规则, 把这 n 张金片从 A 针搬到 C 针上 在搬动过程中可使用 B 针 ; 每次只允许搬动一张金片 ; 在搬动过程中, 必须保证大金片在下, 小金片在上 程序设计 年秋 49

50 递归函数示例 -3( 续 ) Hanoi 塔问题 ( 续 ) 程序设计分析 move(int n, char A, char C, char B) { /* 将 n 张金片从 A 针搬到 C 针, 搬动过程可使用 B 针 */ if (n==1) /* 对于只搬动一张金片情况 */ (1) 将金片 n 从 A 针搬到 C 针 ; else { /* 搬 n(>1) 张金片时, 按同样算法先搬前 n-1 张金片 */ (2) 将 A 针上的 n-1 张金片搬到 B 针上, 中间可使用 C 针 ; (3) 将金片 n 从 A 针搬到 C 针 ; /* 搬动第 n 张金片 */ /* 搬 B 针上前 n-1 张金片 */ (4) 将 B 针上的 n-1 张金片搬到 C 针, 中间可使用 A 针 ; 程序设计 年秋 50

51 递归函数示例 -3( 续 ) Hanoi 问题的解法是递归的, 是直接递归 程序设计 年秋 51

52 递归函数示例 -3( 续 ) Hanoi 塔问题 ( 续 ) #include <stdio.h> void hanoi (int n,char A,char C,char B) { // 解决汉诺塔问题的算法 if ( n == 1 ) printf( " move %c to %c\n ",A, C); else { hanoi ( n-1, A, B, C ); printf( " move %c to %c\n ",A, C); hanoi ( n-1, B, C, A ); 程序设计 年秋 52

53 递归函数 ( 续 ) 对于算法间接地由其自身定义情况, 称为间接递归 在间接递归情况下, 函数调用链中, 在同一个函数再次出现之前, 有一个或多个其它别的函数 递归程序特点 通常, 以递归形式定义算法与非递归算法比较, 算法结构会更紧凑 清晰 但是, 递归函数在递归调用过程中, 会占用更多的内存空间和需更多的运行时间 另外, 在编写递归函数时, 必须防止遗漏递归终止条件和防止振荡式的相互递归调用, 否则会产生无限递归调用现象 程序设计 年秋 53

54 直接递归 vs. 间接递归 直接递归 间接递归 程序设计 年秋 54

55 用递推实现递归的示意程序 勒让得多项式的递归定义为 1, p(n,x)= x, n=0; n=1; ((2n-1)xp(n-1,x)-(n-1)p(n-2,x))/n,n>1 程序设计分析 用递归函数实现, 能很容易地写出它的函数定义如下 double p(int n, double x) { if (n==0) return 1.0; if (n==1) return x; return ((2.0*n-1.0)*x*p(n-1,x)-(n-1.0)*p(n-2,x))/n; 程序设计 年秋 55

56 用递推实现递归的示意程序 ( 续 ) 勒让得多项式用递推方法实现 程序设计分析 计算 p(n,x) 的困难是 n>1 情况 然而, 若知道了 p(n-2,x) 和 p(n-1,x) 的话, 就能立即按公式计算出 p(n,x) 由于 p(0,x) 与 p(1,x) 是能立即得到的 这样就能用递推方法, 从 p(0,x) 与 p(1,x) 出发, 依次计算出 p(2,x),p(3,x), 即从幂次低的勒让得多项式到幂次高的勒让得多项式的递推解法 程序设计 年秋 56

57 用递推实现递归的示意程序 ( 续 ) 勒让得多项式用递推方法实现, 函数定义如下 double p(int n, double x) { double first, second, third; int count; if (n == 0) return 1.0; if (n == 1) return x; first = 1.0; second = x; for(count = 2; count <= n; count++) { third = ((2.0*count-1.0)*x*second - (count-1.0)*first)/count; first = second; second = third; return third; 程序设计 年秋 57

58 递推 (recurrence)vs. 递归 (recursion) 共同点 把复杂问题转化为简单问题进行处理 不同点 递推 : 程序员找到递推关系, 程序从最简单问题开始, 递推得到复杂问题解 递归 : 程序员找到递归关系, 程序把复杂问题逐步归结为简单处理, 再从最简单问题开始, 递推得到复杂问题解 程序设计 年秋 58

59 递归实例 (1) 递归计算 x 的 y 次方 int power(int x, int y) { if(y==0) return 1; return x*power(x, y-1): 程序设计 年秋 59

60 递归实例 (2) 输入一个正整数, 用递归将该整数倒序输出 #include<stdio.h> void reverse(int n) { printf( %d, n%10); if (n<10) return; reverse(n/10); 程序设计 年秋 60

61 提要 函数基础知识 函数定义 函数调用 函数形参 函数说明 递归函数基础 命令行参数 函数程序设计实例 程序设计 年秋 61

62 命令行参数 执行 C 程序, 可以看作是对该程序的 main() 函数的调用 main() 函数执行结束, 返回环境 为能从环境向 C 程序传递信息, 启动 C 程序的命令行可带有任选的参数 命令行的一般形式为程序名参数 1 参数 2 参数 n 其中程序名和各参数之间用空白符分隔 为能让 main() 函数读取命令行中的参数, 环境将多个参数以两个参数形式传递给 main() 函数 其中第一个参数 ( 习惯记作 argc) 表示命令行中参数的个数 ( 包括程序名 ); 第二个参数 ( 习惯记作 argv) 是一个字符指针数组 其中 argv[0] 指向程序名字符串,argv[1] 指向参数 1 字符串,...,argv[argc-1] 指向最后一个参数字符串 如果 argc 等于 1, 则表示程序名后面没有参数 程序设计 年秋 62

63 命令行参数示例 说明 main() 函数对参数 argc 与 argv 引用方法的程序 打印启动程序时的命令行各参数 #include <stdio.h> void main(int argc, char *argv[] /* 或 char **argv; */ ) { int k; for(k = 1; k < argc; k++) printf("%s %c", argv[k], k < argc-1? ' ' : '\n'); printf("\n\n"); 如上述程序的执行程序名为 aecho.exe, 执行该程序的命令行为 : aecho Hello world! 则程序将输出 Hello world! 根据约定,main() 函数的参数 argc 的值为 3;argv[0],argv[1], argv[2] 分别指向字符串 "echo" "Hello" "world!" 的第一个字符 程序设计 年秋 63

64 命令行参数 ( 续 ) 在程序的 printf() 函数调用中, 字符转换格式 %c 输出一个字符, 若是已输出了命令行最后一个参数, 该格式将输出一个换行符, 若是输出其他参数, 则输出一个空白符 因函数的数组参数是指向数组首元素的指针变量, 所以在主函数 main() 中可对 argv 施行增量运算 例如, 在 argv[0] 指针指向程序名字符串的第一个字符情况下, 对 argv 施增量运算 ++argv 后,argv[0]( 或 *argv) 就指向参数 1 的第一个字符 程序设计 年秋 64

65 命令行参数 ( 续 ) 利用在主函数 main() 中可对 argv 施行增量运算的性质, 可改写前述示例程序为以下形式 #include <stdio.h> void main(int argc, char **argv) { while (--argc > 0) printf("%s %c", *++argv,argc > 1? ' ' : '\n'); 这里,++argv 使指针 argv 先加 1, 让它一开始就指向参数 1; 逐次增 1, 使它遍历指向各参数 又利用函数 printf() 的第一个格式参数是字符串表达式, 上述程序对 printf() 的调用可改写成 printf((argc > 1)? "%s " : "%s\n",*++argv); 程序设计 年秋 65

66 命令行参数示例 -1 假定启动程序时给出的命令行参数是一串整数, 程序将全部整数求和后输出 #include <stdio.h> #include <math.h> void main(int argc, char **argv) { int k, s; for(s = 0, k = 1; k < argc; k++) s += atoi(*++argv); /* 从数字字符串译出整数 */ printf( \t%d\n, s); 程序设计 年秋 66

67 命令行参数 ( 续 ) 利用指针数组作 main() 函数的形参, 向程序传递命令行参数字符串, 其中字符串的长度可以不同, 参数的个数也可以任意, 这是指针数组作函数参数最为方便灵活的应用 命令行可带任选的参数, 程序 ( 主要 main() 函数 ) 应能正确识别某参数的出现, 及该参数的意义 通常,C 程序将命令行参数分成两部分 一部分是一定要出现的参数, 它们通常被安排在命令行参数表的最后部分, 并对这些参数出现顺序也有明确的约定 另一部分是可任选的参数, 因它们中的某些或全部可以不出现, 为使程序能正确识别出现的参数及其意义,C 程序习惯用以下形式表示一个可任选的参数 - 字符参数 程序设计 年秋 67

68 命令行参数 ( 续 ) C 程序习惯用以下形式表示一个可任选的参数 - 字符参数 其中负号表示一个任选参数, 紧接的字符是任选参数的标志符 其后的参数可以没有 如有, 就作为命令行的下一个参数 特别是对于标志符之后的参数没有的情况, 多个参数标志符紧接在一起, 合用一个任选参数开始符 ( 负号字符 ) 程序设计 年秋 68

69 命令行参数程序示例 输入正文, 从中寻找包含特定字符串的行 其中特定字符串由命令行的参数指定 程序另设两个供任选的参数 参数 1 -x 印出所有那些不包含特定字符串的行 ; 无 -x, 则印出所有那些包含特定字符串的行 参数 2 -n 在输出字符行之前, 冠以该行在正文中的行号 ; 否则, 输出时不带行号 另约定, 特定字符串参数是命令行的最后一个参数 ; 任选参数的出现顺序可以任意 如两个任选参数都出现时, 可合在一起同时指定, 如 -xn 或 -nx 一个任选参数最多只能出现一次 运行本程序的命令行的一般形式为 find -x -n pattern filename 程序设计 年秋 69

70 命令行参数程序示例 ( 续 ) #define LINES 500 #define MAXLINE 300 #include <stdio.h> #include <string.h> #include <malloc.h> int getline(file *fp, char *s, int lim); /* 从文件读出一个串到 s, 返回串的长度 */ int index(char *s, char *t); ) /* 判断 t 是否出现在 s 中, 并确定出现 位置 */ int main(int argc, char **argv) { char *lineptr[lines]; int lineno[lines]; int len, m; int nlines = 0; int n = 0; int err = 0; int inverse = 0; int num = 0; FILE *fp; char line[maxline], *s; 程序设计 年秋 70

71 命令行参数程序示例 ( 续 ) while (err == 0 && --argc > 0 && (*++argv)[0] == - ) /* *++argv 是指向任选参数串的首字符指针,(*++argv)[0] 是任选参数字符串的首字符 */ for(s = argv[0]+1; *s!= \0 ; s++) switch (*s) { case 'x' : if (inverse) err = 1; /* 限制 x 最多只能出现 1 次 */ else inverse = 1;/* inverse=1 表示 x 出现 */ break; case 'n' : if (num) err = 1; /* 限制 n 最多只能出现 1 次 */ else num = 1; /* num=1 表示 n 出现 */ break; default : err = 1; /* 正确情况下, 至此 argc 应为 2*/ if (err argc!= 2) { /* 如有使用不当 */ printf("usage:find -x -n pattern filename\n"); return 1; 程序设计 年秋 71

72 命令行参数程序示例 ( 续 ) if ((fp = fopen(*(argv+1), "r")) == NULL) { fprintf(stderr, "Can't open %s. \n", *(argv+1)); return 2; while ((len = getline(fp, line, MAXLINE)) > 0) { nlines++; /* 记录行数 */ if ((index(line, *argv) >= 0)!= inverse) if ((s = (char *)malloc(len+1)) == NULL) break; else { lineno[n] = nlines; strcpy(s, line); lineptr[n++] = s; fclose(fp); for(m = 0; m < n; m++) { if (num) printf("%4d: ", lineno[m]); return 0; printf("%s\n", lineptr[m]); 程序设计 年秋 72

73 命令行参数程序示例 ( 续 ) int getline(file *fp, char *s, int lim) /* 从文件读出一个串到 s, 返回串的长度 */ { int c; char *ps = s; while (ps < s+lim-1 && (c = fgetc(fp))!= EOF) { *ps++ = c; if (c == '\n') break; *ps = '\0'; return ps-s; int index(char *s, char *t) /* 判断 t 是否出现在 s 中, 并确定出现位置 */ { int i, len1 = strlen(s), len2 = strlen(t); char *ps, *pt; for(i = 0; i <= len1-len2; i++) { for(ps = s+i, pt = t; *pt!= '\0' && *ps == *pt; ps++, pt++); if (*pt == '\0') return i; return -1; 程序设计 年秋 73

74 提要 函数基础知识 函数定义 函数调用 函数形参 函数说明 递归函数基础 命令行参数 函数程序设计实例 程序设计 年秋 74

75 函数程序设计实例 -1 编制求整数是几位十进位数的函数 设函数模型为 int digit(int n), 函数的功能是求形参 n 是几位十进位数 引入变量 c 计数 n 的位数, 则反复将 n 除以 10, 直至 n 等于 0 的重复次数, 就能推算出 n 的十进位的位数 函数开始时预置计数器 c 为 0, 循环的工作部分是让 c 增 1 和 n 除以 10, 循环直至 n 除以 10 后为 0 结束 如下面的函数 digits() 的定义 int digits(int n) { int c = 0; do { c++; n /= 10; while (n); return c; 程序设计 年秋 75

76 函数程序设计实例 -2 编制从两个已知非空字符串中找出最长公共子串的长度和最长公共子串的个数的函数 设函数模型为 int commstr(char *str1, char *str2, int *lenpt) 函数的形参 str1 和 str2 是已知字符串首字符的指针, 形参 lenpt 用于存储找到的最长子串的长度, 函数返回找到的最长公共子串的个数 函数算法的基本想法是对字符串 s2 的各种可能子串, 在字符串 s1 中找是否有同样的子串 记两个字符串 str1 和 str2 的长度分别为 len1 和 len2 假定 len1 >= len2 则它们最长的公共子串长度不会超过 len2 设要寻找的子串长为 ln,ln 的初值为 len2, 即以 str2 字符串的最长子串开始寻找, 当在 str1 中没有长为 ln 的相同子串时, 就让 ln 减 1, 即用 str2 更短的子串重新寻找 若找到, 则该子串就可作为函数要找的 str1 和 str2 的一个最长子串 若直至找遍了 str2 的所有可能的子串, 还未在 str1 中找到相同的子串, 则说明 str1 和 str2 没有公共子串 程序设计 年秋 76

77 函数程序设计实例 -2( 续 ) 编制从两个已知非空字符串中找出最长公共子串的的长度和最长公共子串的个数的函数 ( 续 ) #include <stdio.h> int commstr(char *str1, char *str2, int *lenpt) /* 函数返回最长公共子串的个数, 通过指针参数传回最长公共子串的长度 */ { int len1, len2, ln, count, i, k, p; char *st; if((len1=strlen(str1))<(len2=strlen(str2))){ /* 把 str2 作为短的串 */ st = str1; str1 = str2; str2 = st; count = 0; ln = len1; len1 = len2; len2 = ln; 程序设计 年秋 77

78 函数程序设计实例 -2( 续 ) for(ln=len2;ln>0;ln--) { /* 找长 ln 的公共子串 */ for(k = 0; k + ln <= len2; k++) { /* 自 str2[k] 开始, 长为 ln 子串与 str1 的子串比较 */ for(p = 0; p + ln <= len1; p++) { /* str1 中的子串自 str1[p] 开始, 两子串对应字符逐一比较 */ for(i = 0; i < ln; i++) if (str2[k+i]!= str1[p+i]) break; if (i == ln) count++; /* 找到一个最长公共子串 */ if (count) break; /* 如找到过, 退出寻找循环 */ *lenpt = ln; return count; void main() { int c, len; c=commstr("abc1abcsabcd123", "123bAbc", &len); printf(" 有 %d 个长为 %d 的公共子串 \n", c, len); 程序设计 年秋 78

79 函数程序设计实例 -3 编写函数 int trans(unsigned n, int d, char s[]), 将无符号整数 n 翻译成 d(2 <= d <= 16) 进制的字符串 s 函数的返回值是该 d 进制的字符串长度 当 d>10 时,d 进制的数字位值可能要大于 9, 约定大于 9 的数字位值分别用字符 A B C D E F 标记数字位值 求 n 整除 d 的余数, 就能得到 n 的 d 进制数的最低位数字, 然后 n/=d 重复上述步骤, 直至 n 为 0, 能依次得到 n 的 d 进制数的最低位数字至最高位数字 再由各位数字取出相应字符, 就得到 n 的 d 进制数的字符串表示 程序设计 年秋 79

80 函数程序设计实例 -3( 续 ) 编写函数 int trans(unsigned n, int d, char s[])( 续 ) #include <stdio.h> #define M sizeof(unsigned int)*8 int trans(unsigned n, int d, char s[]) { char digits[] = ABCDEF ; char buf[m+1]; int j, k = M; if (d < 2 d > 16) { s[0] = \0 ; return 0; buf[k] = \0 ; do { buf[--k] = digits[n%d]; n /= d; while (n); for(j = 0; s[j++] = buf[k++]; ); return j-1; 程序设计 年秋 80

81 函数程序设计实例 -4 编制判定正整数 n 的 d 进制表示形式是否是回文数的函数 回文数就是自左向右读和自右向左读是相同的数 例如,n = 232, 其十进制表示是回文数 ;n = 27, 其二进制表示 是回文数 设函数 circle(int n, int d) 是要判 n 的 d 进制表示是否是回文数 实现这个判定有两种方法 : 一是顺序译出 n 的 d 进制表示的各位数字, 然后将其首末对应位数字两两比较, 若对应位数字都相同, 则 n 的 d 进制表示是回文数 二是在顺序从低位到高位译出 n 的 d 进制各数字位的同时, 把译出的各位数字看作是另一个 d 进制数字的高位至低位, 并将其重新转换成整数 若转换所得整数与 n 相等, 则 n 的 d 进制表示是回文数 程序设计 年秋 81

82 函数程序设计实例 -4( 续 ) 判 n 的 d 进制表示是否回文数函数 circle(int n, int d)( 续 ) 下面是参照第二种方法编写的函数 int circle(int n, int d) { int s = 0, m = n; while (m) { s = s*d + m%d; m /= d; return s == n; 程序设计 年秋 82

83 函数程序设计实例 -5 编制函数 int part(int a[], int low, int high) 对数组元素 a[low] - a[high] 以 a[low] 为基准, 对数据作划分, 使划分后新的 a[low] -- a[k-1] 中的元素均小于 a[k];a[k+1] - - a[high] 中的元素均大于等于 a[k] 函数返回 k 值,a[k] 是数组 a 中的第 k+1 大元素 令函数要调整存储位置的元素是 a[k] 至 a[j], 变量 k 和 j 就是未确定存储位置元素区间的下界和上界, 它们的初值分别为 low 和 high 首先将 a[low] 暂存于变量 temp, 然后是一个循环, 循环内是交替地执行从后向前考察元素的循环和从前向后考察元素的循环 程序设计 年秋 83

84 函数程序设计实例 -5 temp=a[low]; 初始化 :k=low; j=high low k j high 从后往前搜索 If a[j] temp, j--; otherwise, a[k] 和 a[j] 互换 ; k++ 从前往后搜索 If a[k]<temp, k++; otherwise, a[k] 和 a[j] 互换 ;j-- 程序设计 年秋 84

85 函数程序设计实例 -5( 续 ) 编制函数 int part(int a[], int low, int high)( 续 ) 在从后向前考察循环中, 当考察元素 a[j] 不比 temp 小时, 让 j 减 1 当发现元素 a[j] 比 temp 小时, 结束从后向前的循环, 并将 a[j] 移至 a[k], 和让 k 增 1 在从前向后考察循环中, 当考察元素 a[k] 比 temp 小时, 让 k 增 1 当发现 a[k] 不比 temp 小时, 结束从前向后的考察循环, 并将 a[k] 移至 a[j], 和让 j 减 1 上述循环直至调整区间不再有元素时结束 最后将暂存于 temp 中的值回填到 a[k] 中, 返回 k 值 程序设计 年秋 85

86 函数程序设计实例 -5( 续 ) 编制函数 int part(int a[], int low, int high)( 续 ) int part(int a[], int low, int high) { int k = low, j = high, temp = a[low]; do { while ( j > k && a[j] >= temp ) j--; if (k < j) a[ k++ ] = a[j]; while ( k < j && a[k] < temp ) k++; if (k < j) a[ j-- ] = a[k]; while ( k < j); a[k] = temp; return k; 程序设计 年秋 86

87 函数程序设计实例 -5( 续 ) 编制函数 int part(int a[], int low, int high)( 续 ) 以下是利用函数 part() 实现求数组 a 按自小到大顺序, 第 k 个元素 ( 自 0 开始计数 ) 的函数 int kth() 和示意主函数 int kth(int a[], int k, int n) { int m = 0, h = n-1, t; do { t = part(a, m, h); if ( t > k ) h = t - 1 ; else if ( t < k ) m = t + 1 ; while ( t!= k ); return a[k]; int a[] = {0, 1, 9, 7, 6, 4, 5, 2, 3, 8; void main() { int i; printf("enter i "); scanf("%d", &i); printf("%d %d\n", i, kth(a, i, 10)); 程序设计 年秋 87

88 第 8 讲小结 函数基础知识 函数定义 函数调用 函数形参 ( 指针类型 数组类型 字符指针 ) 函数说明 递归函数基础 ( 直接递归 间接递归 线性递归 递推 ) 命令行参数 函数程序设计实例 程序设计 年秋 88

chap07.key

chap07.key #include void two(); void three(); int main() printf("i'm in main.\n"); two(); return 0; void two() printf("i'm in two.\n"); three(); void three() printf("i'm in three.\n"); void, int 标识符逗号分隔,

More information

Generated by Unregistered Batch DOC TO PDF Converter , please register! 浙江大学 C 程序设计及实验 试题卷 学年春季学期考试时间 : 2003 年 6 月 20 日上午 8:3

Generated by Unregistered Batch DOC TO PDF Converter , please register! 浙江大学 C 程序设计及实验 试题卷 学年春季学期考试时间 : 2003 年 6 月 20 日上午 8:3 浙江大学 C 程序设计及实验 试题卷 2002-2003 学年春季学期考试时间 : 2003 年 6 月 20 日上午 8:30-10:30 注意 : 答题内容必须写在答题卷上, 写在本试题卷上无效 一. 单项选择题 ( 每题 1 分, 共 10 分 ) 1. 下列运算符中, 优先级最低的是 A.

More information

《C语言程序设计》第2版教材习题参考答案

《C语言程序设计》第2版教材习题参考答案 教材 C 语言程序设计 ( 第 2 版 ) 清华大学出版社, 黄保和, 江弋编著 2011 年 10 月第二版 ISBN:978-7-302-26972-4 售价 :35 元 答案版本 本习题答案为 2012 年 2 月修订版本 一 选择题 1. 设已定义 int a, * p, 下列赋值表达式中正确的是 :C)p = &a A. *p = *a B. p = *a C.p = &a D. *p =

More information

《C语言程序设计》教材习题参考答案

《C语言程序设计》教材习题参考答案 教材名称 : C 语言程序设计 ( 第 1 版 ) 黄保和 江弋编著清华大学出版社 ISBN:978-7-302-13599-9, 红色封面 答案制作时间 :2011 年 2 月 -5 月 一 选择题 1. 设已定义 int a, * p, 下列赋值表达式中正确的是 :C)p=&a 2. 设已定义 int x,*p=&x;, 则下列表达式中错误的是 :B)&*x 3. 若已定义 int a=1,*b=&a;,

More information

Microsoft PowerPoint - 4. 数组和字符串Arrays and Strings.ppt [兼容模式]

Microsoft PowerPoint - 4. 数组和字符串Arrays and Strings.ppt [兼容模式] Arrays and Strings 存储同类型的多个元素 Store multi elements of the same type 数组 (array) 存储固定数目的同类型元素 如整型数组存储的是一组整数, 字符数组存储的是一组字符 数组的大小称为数组的尺度 (dimension). 定义格式 : type arrayname[dimension]; 如声明 4 个元素的整型数组 :intarr[4];

More information

Microsoft PowerPoint - 3. 函数Functionl.ppt [兼容模式]

Microsoft PowerPoint - 3. 函数Functionl.ppt [兼容模式] 函数 Function 如何重用代码 How to reuse code 3 4 = 3*3*3*3 3 4,6 5 : 拷贝 - 粘帖代码 (Copy-paste code) 3 4,6 5,12 10 : 拷贝 - 粘帖代码 (Copy-paste code) Bad! 使用函数 (with a function) 使用函数 (with a function) 使用函数 (with a function)

More information

C 1

C 1 C homepage: xpzhangme 2018 5 30 C 1 C min(x, y) double C // min c # include # include double min ( double x, double y); int main ( int argc, char * argv []) { double x, y; if( argc!=

More information

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

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.06.doc 2 5 8 11 0 13 1. 13 2. 15 3. 18 1 23 1. 23 2. 26 3. 28 2 36 1. 36 2. 39 3. 42 4. 44 5. 49 6. 51 3 57 1. 57 2. 60 3. 64 4. 66 5. 70 6. 75 7. 83 8. 85 9. 88 10. 98 11. 103 12. 108 13. 112 4 115 1. 115 2.

More information

《C语言程序设计》教材习题参考答案

《C语言程序设计》教材习题参考答案 教材名称 : C 语言程序设计 ( 第 1 版 ) 黄保和 江弋编著清华大学出版社 ISBN: 978-7-302-13599-9, 红色封面答案制作时间 :2011 年 2 月 -5 月一 思考题 1 函数总需要从 main 中调用吗? 当调用一个函数时, 为什么要使用参数? 函数不是总需要从 main 函数中调用, 使用参数的目的是为了给被调函数传递数据 2 什么是函数的返回值? 是否每个函数都有返回值?

More information

untitled

untitled 1 DBF (READDBF.C)... 1 2 (filetest.c)...2 3 (mousetes.c)...3 4 (painttes.c)...5 5 (dirtest.c)...9 6 (list.c)...9 1 dbf (readdbf.c) /* dbf */ #include int rf,k,reclen,addr,*p1; long brec,erec,i,j,recnum,*p2;

More information

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

新・明解C言語入門編『索引』 !... 75!=... 48 "... 234 " "... 9, 84, 240 #define... 118, 213 #include... 148 %... 23 %... 23, 24 %%... 23 %d... 4 %f... 29 %ld... 177 %lf... 31 %lu... 177 %o... 196 %p... 262 %s... 242, 244 %u... 177

More information

第5章 递归 (Recurve)

第5章  递归 (Recurve) 第 11 讲指针与引用 (Part II) 周水庚 2016-11-24 提要 指针形参 数组形参 字符指针形参 函数形参 返回指针值的函数 程序设计 -2016 年秋 2 提要 指针形参 数组形参 字符指针形参 函数形参 返回指针值的函数 程序设计 -2016 年秋 3 函数形参 函数设置形参的目的是让函数被调用时, 能从调用处获得数据或指针信息 C 语言关于函数形参遵守以下规定 函数调用时, 形参从实参获得初值

More information

网C试题(08上).doc

网C试题(08上).doc 学习中心 姓名 学号 西安电子科技大学网络与继续教育学院 高级语言程序设计 (C) 全真试题 ( 闭卷 90 分钟 ) 题号一二三总分 题分 60 20 20 得分 一 单项选择题 ( 每小题 3 分, 共 60 分 ) 1.C 语言程序的基本单位是 A) 程序行 B) 语句 C) 函数 D) 字符 2. 下列四组选项中, 均是不合法的用户标识符的选项是 A)A B)getc C)include D)while

More information

期中考试试题讲解

期中考试试题讲解 一 选择题 ( 一 ) 1. 结构化程序设计所规定的三种基本结构是 C A 主程序 子程序 函数 B 树形 网形 环形 C 顺序 选择 循环 D 输入 处理 输出 2. 下列关于 C 语言的叙述错误的是 A A 对大小写不敏感 B 不同类型的变量可以在一个表达式中 C main 函数可以写在程序文件的任何位置 D 同一个运算符号在不同的场合可以有不同的含义 3. 以下合法的实型常数是 C A.E4

More information

Microsoft PowerPoint - 5. 指针Pointers.ppt [兼容模式]

Microsoft PowerPoint - 5. 指针Pointers.ppt [兼容模式] 指针 Pointers 变量指针与指针变量 Pointer of a variable 变量与内存 (Variables and Memory) 当你声明一个变量时, 计算机将给该变量一个内存, 可以存储变量的值 当你使用变量时, 计算机将做两步操作 : - 根据变量名查找其对应的地址 ; - 通过地址对该地址的变量内容进行读 (retrieve) 或写 (set) 变量的地址称为变量的指针! C++

More information

CC213

CC213 : (Ken-Yi Lee), E-mail: feis.tw@gmail.com 177 [P179] (1) - [P181] [P182] (2) - for [P183] (3) - switch [P184] [P187] [P189] [P194] 178 [ ]; : : int var; : int var[3]; var 2293620 var[0] var[1] 2293620

More information

C++ 程式設計

C++ 程式設計 C C 料, 數, - 列 串 理 列 main 數串列 什 pointer) 數, 數, 數 數 省 不 不, 數 (1) 數, 不 數 * 料 * 數 int *int_ptr; char *ch_ptr; float *float_ptr; double *double_ptr; 數 (2) int i=3; int *ptr; ptr=&i; 1000 1012 ptr 數, 數 1004

More information

06-statement

06-statement PHP 基本语法 条件 循环 函数杨亮 程序的基本结构 程序 输 入 运算 (+ - x / &! ) 逻辑 ( 条件 循环 递归 ) 输出 辅助 ( 变量 数组 函数 ) 小测验 用你熟悉的程序找出 1~1000 中的所有质数 我们直接看代码好了 if else elseif 1

More information

C

C C 2017 4 1 1. 2. while 3. 4. 5. for 6. 2/161 C 7. 8. (do while) 9. 10. (nested loop) 11. 12. 3/161 C 1. I 1 // summing.c: 2 #include 3 int main(void) 4 { 5 long num; 6 long sum = 0L; 7 int status;

More information

NOWOER.OM m/n m/=n m/n m%=n m%n m%=n m%n m/=n 4. enum string x1, x2, x3=10, x4, x5, x; 函数外部问 x 等于什么? 随机值 5. unsigned char *p1; unsigned long *p

NOWOER.OM m/n m/=n m/n m%=n m%n m%=n m%n m/=n 4. enum string x1, x2, x3=10, x4, x5, x; 函数外部问 x 等于什么? 随机值 5. unsigned char *p1; unsigned long *p NOWOER.OM /++ 程师能 评估. 单项选择题 1. 下 描述正确的是 int *p1 = new int[10]; int *p2 = new int[10](); p1 和 p2 申请的空间 的值都是随机值 p1 和 p2 申请的空间 的值都已经初始化 p1 申请的空间 的值是随机值,p2 申请的空间 的值已经初始化 p1 申请的空间 的值已经初始化,p2 申请的空间 的值是随机值 2.

More information

《计算概论》课程 第十九讲 C 程序设计语言应用

《计算概论》课程 第十九讲  C 程序设计语言应用 计算概论 A 程序设计部分 字符数组与字符串 李戈 北京大学信息科学技术学院软件研究所 lige@sei.pku.edu.cn 字符数组的定义 #include int main() char a[10] = 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j' ; for (int i = 0; i < 10; i++) cout

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 第 1 章程序设计和 C 语言 1.1 什么是计算机程序 1.2 什么是计算机语言 1.3 C 语言的发展及其特点 1.4 最简单的 C 语言程序 1.5 运行 C 程序的步骤与方法 1.6 程序设计的任务 1.1 什么是计算机程序 程序 : 一组计算机能识别和执行的指令 只要让计算机执行这个程序, 计算机就会自动地 有条不紊地进行工作 计算机的一切操作都是由程序控制的, 离开程序, 计算机将一事无成

More information

untitled

untitled A, 3+A printf( ABCDEF ) 3+ printf( ABCDEF ) 2.1 C++ main main main) * ( ) ( ) [ ].* ->* ()[] [][] ** *& char (f)(int); ( ) (f) (f) f (int) f int char f char f(int) (f) char (*f)(int); (*f) (int) (

More information

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

C/C++语言 - C/C++数据 C/C++ C/C++ Table of contents 1. 2. 3. 4. char 5. 1 C = 5 (F 32). 9 F C 2 1 // fal2cel. c: Convert Fah temperature to Cel temperature 2 # include < stdio.h> 3 int main ( void ) 4 { 5 float fah, cel ;

More information

Guava学习之Resources

Guava学习之Resources Resources 提供提供操作 classpath 路径下所有资源的方法 除非另有说明, 否则类中所有方法的参数都不能为 null 虽然有些方法的参数是 URL 类型的, 但是这些方法实现通常不是以 HTTP 完成的 ; 同时这些资源也非 classpath 路径下的 下面两个函数都是根据资源的名称得到其绝对路径, 从函数里面可以看出,Resources 类中的 getresource 函数都是基于

More information

C/C++ 语言 - 循环

C/C++ 语言 - 循环 C/C++ Table of contents 7. 1. 2. while 3. 4. 5. for 6. 8. (do while) 9. 10. (nested loop) 11. 12. 13. 1 // summing.c: # include int main ( void ) { long num ; long sum = 0L; int status ; printf

More information

<4D F736F F F696E74202D2043D3EFD1D4BFCEBCFE2D362DBAAFCAFD2E BBCE6C8DDC4A3CABD5D>

<4D F736F F F696E74202D2043D3EFD1D4BFCEBCFE2D362DBAAFCAFD2E BBCE6C8DDC4A3CABD5D> 第六章函数 郎大鹏 第六章函数 6.1 高效程序的编写方法 6.2 函数的定义 6.3 函数间数据的传递方法 6.4 函数的调用 6.5 函数的嵌套调用 6.6 函数的递归调用 6.7 局部变量和全局变量 6.8 变量的存储类别 6.9 习题 第六章函数 6.1 高效程序的编写方法 6.2 函数的定义 6.3 函数间数据的传递方法 6.4 函数的调用 6.5 函数的嵌套调用 6.6 函数的递归调用

More information

文件

文件 CH10 文件 1 文件的概念 一 文件分类 二 文件的组织结构 : ASCII 码文件 ( 文本文件 ) 二进制文件 文件是二进制代码的, 则文件就是字节流 文件是 ASCII 码的, 则文件就是字符流, 也是字节流 1 如 : 对于整型变量 x, 其值为 32767 若以文本方式存放, 则共有 5 个字符, 内容为 : 00110011 00110010 00110111 00110110 00110111

More information

OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料

OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢   学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 Email: 51141201063@ecnu.cn 学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料 OOP with Java Java 类型 引用 不可变类型 对象存储位置 作用域 OOP

More information

epub 33-8

epub 33-8 8 1) 2) 3) A S C I I 4 C I / O I / 8.1 8.1.1 1. ANSI C F I L E s t d i o. h typedef struct i n t _ f d ; i n t _ c l e f t ; i n t _ m o d e ; c h a r *_ n e x t ; char *_buff; /* /* /* /* /* 1 5 4 C FILE

More information

CC213

CC213 : (Ken-Yi Lee), E-mail: feis.tw@gmail.com 49 [P.51] C/C++ [P.52] [P.53] [P.55] (int) [P.57] (float/double) [P.58] printf scanf [P.59] [P.61] ( / ) [P.62] (char) [P.65] : +-*/% [P.67] : = [P.68] : ,

More information

Microsoft Word - 综合试题2.doc

Microsoft Word - 综合试题2.doc 综合测试题二 一 选择题 ( 本大题共 10 小题, 每小题 1 分, 共 10 分 ) 1. C 语言中用于结构化程序设计的三种基本结构是 A. 顺序结构 选择结构 循环结构 B. if switch break C. for while do-while D. if for continue 2. 下列关于 C 语言用户标识符的叙述中正确的是 A. 用户标识符中可以出现下划线和中划线 B. 用户标识符中不可以出现中划线,

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 第 12 章再谈指针 本章的基本内容是 : 指针与数组 指针与结构体 动态存储分配 由于指针可以直接对内存进行操作, 所以指针的功能非常 强大 正确灵活地使用指针可以有效地表示复杂的数据结 构, 并可动态分配内存空间, 提高程序的运行效率 任务 12.1 判断回文 问题 输入一个字符串, 判断该字符串是否为回文 ( 首尾对称的字句, 例如 abcba abba 均为回文 ) 要求用指针实现 想法 设两个指针变量

More information

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 odps-sdk 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基 开放数据处理服务 ODPS SDK SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基础功能的主体接口, 搜索关键词 "odpssdk-core" 一些

More information

试卷代号 :1253 座位号 E 口 国家开放大学 ( 中央广播电视大学 )2014 年秋季学期 " 开放本科 " 期末考试 C 语言程序设计 A 试题 2015 年 1 月 E 四! 五 总分! 一 单选题 ( 每小题 2 分, 共 20 分 ) 1. 由 C 语言源程序文件编译而成的目标文件的默

试卷代号 :1253 座位号 E 口 国家开放大学 ( 中央广播电视大学 )2014 年秋季学期  开放本科  期末考试 C 语言程序设计 A 试题 2015 年 1 月 E 四! 五 总分! 一 单选题 ( 每小题 2 分, 共 20 分 ) 1. 由 C 语言源程序文件编译而成的目标文件的默 试卷代号 :1253 座位号 E 口 国家开放大学 ( 中央广播电视大学 )2014 年秋季学期 " 开放本科 " 期末考试 C 语言程序设计 A 试题 2015 年 1 月 E 四! 五 总分! 一 单选题 ( 每小题 2 分, 共 20 分 ) 1. 由 C 语言源程序文件编译而成的目标文件的默认扩展名为 ( ) A. cpp B. c C. exe D. obj 2. 设 x 和 y 均为逻辑值,

More information

[改訂新版]C言語による標準アルゴリズム事典

[改訂新版]C言語による標準アルゴリズム事典 iii C 1991 SEND + MORE = MONEY C 100 2003 Java 2003 27 PC-9800 C BMP SVG EPS BMPSVG WindowsMacLinux Web iv int main() int main(void) EXIT_SUCCESS 0 https://github.com/okumuralab/ algo-c TEX TEX PDF PDF

More information

《C语言程序设计》教材习题参考答案

《C语言程序设计》教材习题参考答案 教材名称 : C 语言程序设计 ( 第 1 版 ) 黄保和 江弋编著清华大学出版社 ISBN: 978-7-302-13599-9, 红色封面答案制作时间 :2011 年 2 月 -5 月一 选择题 1. 以下数组定义中, 错误的是 :C)int a[3]=1,2,3,4; 2. 以下数组定义中, 正确的是 :B) int a[][2]=1,2,3,4; 3. 设有定义 int a[8][10];,

More information

nooog

nooog C : : : , C C,,, C, C,, C ( ), ( ) C,,, ;,, ; C,,, ;, ;, ;, ;,,,, ;,,, ; : 1 9, 2 3, 4, 5, 6 10 11, 7 8, 12 13,,,,, 2008 1 1 (1 ) 1.1 (1 ) 1.1.1 ( ) 1.1.2 ( ) 1.1.3 ( ) 1.1.4 ( ) 1.1.5 ( ) 1.2 ( ) 1.2.1

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 7.5 函数的嵌套调用 C 语言的函数定义是互相平行 独立的 即函数不能嵌套定义 但可以嵌套调用函数 即调用一个函数的过程中, 又可以调用另一个函数 7.5 函数的嵌套调用 main 函数 1 调用 a 函数 2 a 函数 3 调用 b 函数 4 b 函数 5 9 8 7 6 结束 7.5 函数的嵌套调用 例 7.5 输入 4 个整数, 找出其中最大的数 用函数的嵌套调用来处理 解题思路 : main

More information

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

C/C++语言 - 分支结构 C/C++ Table of contents 1. if 2. if else 3. 4. 5. 6. continue break 7. switch 1 if if i // colddays.c: # include int main ( void ) { const int FREEZING = 0; float temperature ; int cold_ days

More information

主要内容 函数的定义 声明与调用 函数间的参数传递 函数嵌套与内联函数 形参带缺省值的函数与函数重载 数据的作用域 预编译处理与多文件结构 C++ 系统函数 2

主要内容 函数的定义 声明与调用 函数间的参数传递 函数嵌套与内联函数 形参带缺省值的函数与函数重载 数据的作用域 预编译处理与多文件结构 C++ 系统函数 2 第四讲 函数 主要内容 函数的定义 声明与调用 函数间的参数传递 函数嵌套与内联函数 形参带缺省值的函数与函数重载 数据的作用域 预编译处理与多文件结构 C++ 系统函数 2 函数的定义 函数是程序设计中, 对功能的抽象, 是 C++ 的基本模块 C++ 程序是由函数构成的 ( 一个或多个函数 ) C++ 程序必须有且只能有一个 main 函数 函数的定义 函数头 类型标识符函数名 ( 形式参数表

More information

<4D F736F F D20D7DBBACFCAD4CCE231B2CEBFBCB4F0B0B82E646F63>

<4D F736F F D20D7DBBACFCAD4CCE231B2CEBFBCB4F0B0B82E646F63> 综合测试题一参考答案 一 填空题 ( 表达式求值 )( 本大题共 10 小题, 每小题 1 分, 共 10 分 ) 设各语句的初始化 相同 :int x=3,y=2,z=1; 1. x=y==z x= 0 2. x=!(z>y)&&!x 1 x= 1 3. x=(y++*1/3) x= 0 4. x=((x>y>z)?1:0) x= 0 5. x*=2+3 x= 15 6. x=(++z*y,y++,z%y)

More information

Monthly Report 2010_12

Monthly Report 2010_12 年月日 程序设计 -2011 年秋 1 数组的基本概念 一维数组 多维数组 字符数组与字符串 程序设计 -2011 年秋 2 定义形式 类型说明符数组名 [ 常量表达式 ]; 类型说明符数组名 [ 常量表达式 ][ 常量表达式 ]; 引用形式 数组名 [ 下标 ] 数组名 [ 下标 ][ 下标 ] 程序设计 -2011 年秋 3 数组的基本概念 一维数组 多维数组 字符数组与字符串 程序设计 -2011

More information

移动平台应用软件开发 C/C++/JAVA 基础 C 中的预处理指令 主讲 : 张齐勋 移动平台应用软件开发 课程建设小组北京大学二零一五年

移动平台应用软件开发 C/C++/JAVA 基础 C 中的预处理指令 主讲 : 张齐勋 移动平台应用软件开发 课程建设小组北京大学二零一五年 移动平台应用软件开发 C/C++/JAVA 基础 C 中的预处理指令 主讲 : 张齐勋 zhangqx@ss.pku.edu.cn 移动平台应用软件开发 课程建设小组北京大学二零一五年 预处理 2 预处理器 C 语言的编译系统分为编译预处理和正式编译 预处理作用 : 对源程序编译之前做一些处理, 生成扩展 C 源程序 预处理器的行为是由预处理指令控制的 宏定义 文件包含 条件编译 #define #ifdef

More information

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

( CIP) /. :, ( ) ISBN TP CIP ( 2005) : : : : * : : 174 ( A ) : : ( 023) : ( 023) ( CIP) /. :, 2005. 2 ( ) ISBN 7-5624-3339-9.......... TP311. 1 CIP ( 2005) 011794 : : : : * : : 174 ( A ) :400030 : ( 023) 65102378 65105781 : ( 023) 65103686 65105565 : http: / /www. cqup. com. cn : fxk@cqup.

More information

递归函数的高效实现方法

递归函数的高效实现方法 递归函数的高效实现方法 赵建华 递归函数的适用范围和优缺点 分治法 把一个比较大的问题分解为若干个比较小的问题, 分别求解这些比较小的问题, 再综合得到原问题的解 如果比较小的问题和原问题具有同样的性质, 那么适用递归接法 要求最终能够把问题分解为能够直接解决的简单问题 优点 简洁 能够帮助思考 和问题的结构有对应关系 缺点 效率低下 递归 递归的定义 若一个对象部分地包含它自己, 或用它自己给自己定义,

More information

FY.DOC

FY.DOC 高 职 高 专 21 世 纪 规 划 教 材 C++ 程 序 设 计 邓 振 杰 主 编 贾 振 华 孟 庆 敏 副 主 编 人 民 邮 电 出 版 社 内 容 提 要 本 书 系 统 地 介 绍 C++ 语 言 的 基 本 概 念 基 本 语 法 和 编 程 方 法, 深 入 浅 出 地 讲 述 C++ 语 言 面 向 对 象 的 重 要 特 征 : 类 和 对 象 抽 象 封 装 继 承 等 主

More information

chap12.ppt

chap12.ppt 第十二章 文件 C ( 前所讲 ) 程序 ( 可包含若干源程序文件 ) 文件 也属于. 目的 : 使程序操作中的数据得以长期保存 一 概述 OS 以文件为单位对数据进行存储管理 流与文件流 :C 提供的一个 I/O 统一接口, 与具体的被访问设备无关 把 I/O 工作抽象成从源到目地的流, 所有的 I/O 通过流来进行, 所有流都具有相同的行为 文件 : 指具体的实际设备 ( 一切具有 I/O 能力的外部设备

More information

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("%

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(% 2013 ( 28 ) ( ) 1. C pa.c, pb.c, 2. C++ pa.cpp, pb.cpp Compilation Error long long cin scanf Time Limit Exceeded 1: A 10 B 1 C 1 D 5 E 5 F 1 G II 5 H 30 1 2013 C 1 #include 2 int main(void) 3

More information

一 关于内存 数据存储 变量分类 局部变量 全局变量 静态变量 请看下面代码, 分析变量类型? int pi = 3; int Area(int r, int *sum) { int b; static int c =0; b = pi * r * r; c += b; *sum = c; retu

一 关于内存 数据存储 变量分类 局部变量 全局变量 静态变量 请看下面代码, 分析变量类型? int pi = 3; int Area(int r, int *sum) { int b; static int c =0; b = pi * r * r; c += b; *sum = c; retu 移动平台应用软件开发 C/C++/JAVA 基础 指针以及指针操作 主讲 : 张齐勋 zhangqx@ss.pku.edu.cn 移动平台应用软件开发 课程建设小组北京大学二零一五年 一 关于内存 数据存储 变量分类 局部变量 全局变量 静态变量 请看下面代码, 分析变量类型? int pi = 3; int Area(int r, int *sum) { int b; static int c =0;

More information

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double

More information

第3章.doc

第3章.doc 3 3 3 3.1 3 IT Trend C++ Java SAP Advantech ERPCRM C++ C++ Synopsys C++ NEC C C++PHP C++Java C++Java VIA C++ 3COM C++ SPSS C++ Sybase C++LinuxUNIX Motorola C++ IBM C++Java Oracle Java HP C++ C++ Yahoo

More information

数学分析(I)短课程 [Part 2] 4mm 自然数、整数和有理数

数学分析(I)短课程 [Part 2]   4mm 自然数、整数和有理数 .. 数学分析 (I) 短课程 [Part 2] 自然数 整数和有理数 孙伟 华东师范大学数学系算子代数中心 Week 2 to 18. Fall 2014 孙伟 ( 数学系算子代数中心 ) 数学分析 (I) 短课程 Week 2 to 18. Fall 2014 1 / 78 3. 自然数理论初步 孙伟 ( 数学系算子代数中心 ) 数学分析 (I) 短课程 Week 2 to 18. Fall 2014

More information

Microsoft Word - 《C语言开发入门》课程教学大纲-2.doc

Microsoft Word - 《C语言开发入门》课程教学大纲-2.doc C 语言开发入门 课程教学大纲 ( 课程英文名称 ) 课程编号 :201409210011 学分 :5 学分学时 :60 学时 ( 其中 : 讲课学时 :37 学时上机学时 :23 学时 ) 先修课程 : 计算机导论后续课程 :C++ 程序设计适用专业 : 信息及其计算机相关专业开课部门 : 计算机系 一 课程的性质与目标 C 语言开发入门 是计算机各专业必修的基础课程, 是数据结构 C++ Java

More information

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例 帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例 这篇文章主要介绍了帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例, 本文还详细介绍了帝国 CMS 数据库类中的一些常用方法, 需要的朋友可以参考下 例 1: 连接 MYSQL 数据库例子 (a.php)

More information

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 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 201 201 21 ( ) 1. C pa.c, pb.c, 2. C++ pa.cpp, pb.cpp Compilation Error long long cin scanf Time Limit Exceeded 1: A 1 B 1 C 5 D RPG 10 E 10 F 1 G II 1 1 201 201 C 1 # include 2 int main ( void

More information

Microsoft PowerPoint - string_kruse [兼容模式]

Microsoft PowerPoint - string_kruse [兼容模式] Strings Strings in C not encapsulated Every C-string has type char *. Hence, a C-string references an address in memory, the first of a contiguous set of bytes that store the characters making up the string.

More information

2015年计算机二级(C语言)模拟试题及答案(三)

2015年计算机二级(C语言)模拟试题及答案(三) 2016 年计算机二级 (C 语言 ) 模拟试题及答案 (3) 1.( A ) 是构成 C 语言程序的基本单位 A 函数 B 过程 C 子程序 D 子例程 2.C 语言程序从 ( C ) 开始执行 A 程序中第一条可执行语句 B 程序中第一个函数 C 程序中的 main 函数 D 包含文件中的第一个函数 3 以下说法中正确的是( C ) A C 语言程序总是从第一个定义的函数开始执行 B 在 C 语言程序中,

More information

提纲 1 2 OS Examples for 3

提纲 1 2 OS Examples for 3 第 4 章 Threads2( 线程 2) 中国科学技术大学计算机学院 October 28, 2009 提纲 1 2 OS Examples for 3 Outline 1 2 OS Examples for 3 Windows XP Threads I An Windows XP application runs as a seperate process, and each process may

More information

第一章三角函数 1.3 三角函数的诱导公式 A 组 ( ) 一 选择题 : 共 6 小题 1 ( 易诱导公式 ) 若 A B C 分别为 ABC 的内角, 则下列关系中正确的是 A. sin( A B) sin C C. tan( A B) tan C 2 ( 中诱导公式 ) ( ) B. cos(

第一章三角函数 1.3 三角函数的诱导公式 A 组 ( ) 一 选择题 : 共 6 小题 1 ( 易诱导公式 ) 若 A B C 分别为 ABC 的内角, 则下列关系中正确的是 A. sin( A B) sin C C. tan( A B) tan C 2 ( 中诱导公式 ) ( ) B. cos( 第一章三角函数 1. 三角函数的诱导公式 A 组 一 选择题 : 共 6 小题 1 ( 易诱导公式 ) 若 A B C 分别为 ABC 的内角 则下列关系中正确的是 A. sin( A B) sin C C. tan( A B) tan C ( 中诱导公式 ) B. cos( B C) cos A D. sin( B C) sin A sin60 cos( ) sin( 0 )cos( 70 ) 的值等于

More information

格式化字符串 Weifeng Sun School of Software, DLUT

格式化字符串 Weifeng Sun School of Software, DLUT 格式化字符串 Weifeng Sun School of Software, DLUT 格式化字符串漏洞 格式化字符串, 也是一种比较常见的漏洞类型 会触发该漏洞的函数很有限 主要就是 printf 还有 sprintf,fprintf 等等 c 库中 print 家族的函数 >int printf(const char* format,...) 2 / 42 3 / 42 A B 字符串指针 char

More information

第4章 栈和队列

第4章  栈和队列 第 7 讲 数组 字符串 指针及其应用 (Part II) 周水庚 2006 年 10 月 18 日 程序设计 -2006 年秋 1 提要 数组的基本概念 一维数组 多维数组 字符数组和字符串 指针和数组 程序设计 -2006 年秋 2 数组 定义形式 类型说明符数组名 [ 常量表达式 ]; 类型说明符数组名 [ 常量表达式 ][ 常量表达式 ]; 引用形式 数组名 [ 下标 ] 数组名 [ 下标

More information

第4章 栈和队列

第4章  栈和队列 期中考试成绩统计结果 ( 平均 :68) 第 9 讲指针与引用 (Part I) 周水庚 2017 年 11 月 23 日 提要 指针 指针和数组 提要 指针 指针和数组 指针与指针的作用 指针是 C 语言中用于表示程序对象地址的一类数据 指针的作用 间接引用它所指的对象 描述数据和数据之间的关系, 以便构造复杂的数据结构 利用各种类型指针形参, 能使函数增加活力 指针与数组结合, 使引用数组元素的形式更加多样

More information

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d

More information

1 2005 9 2005,,,,,,,,,, ( http: \ \ www. ncre. cn,, ) 30,,,,,,,, C : C : : 19 : 100081 : : 7871092 1 /16 : 8. 75 : 96 : 2005 11 1 : 2005 11 1 : ISBN 7

1 2005 9 2005,,,,,,,,,, ( http: \ \ www. ncre. cn,, ) 30,,,,,,,, C : C : : 19 : 100081 : : 7871092 1 /16 : 8. 75 : 96 : 2005 11 1 : 2005 11 1 : ISBN 7 1 2005 9 2005,,,,,,,,,, ( http: \ \ www. ncre. cn,, ) 30,,,,,,,, C : C : : 19 : 100081 : : 7871092 1 /16 : 8. 75 : 96 : 2005 11 1 : 2005 11 1 : ISBN 7-80097 - 564-9 /TP 8 : 10. 00 ,,,, 1994 NCRE,,, ( ),,,,,

More information

第 1 页共 9 页 文档履历 版本号日期制 / 修订人内容描述 V 正式版本

第 1 页共 9 页 文档履历 版本号日期制 / 修订人内容描述 V 正式版本 V3s 项目 CamDroid 编译第三方程序 / V1.0 第 1 页共 9 页 文档履历 版本号日期制 / 修订人内容描述 V1.0 2014-04-23 正式版本 第 2 页共 9 页 目录 1. 交叉编译环境... 3 2. 第三方库的 Makefile 示例... 4 3. 第三方应用 Makefile 示例... 5 4. 第三方应用 CamLinux.mk 示例... 6 5. 常见错误...

More information

C++ 程序设计 OJ9 - 参考答案 MASTER 2019 年 6 月 7 日 1

C++ 程序设计 OJ9 - 参考答案 MASTER 2019 年 6 月 7 日 1 C++ 程序设计 OJ9 - 参考答案 MASTER 2019 年 6 月 7 日 1 1 CARDGAME 1 CardGame 题目描述 桌上有一叠牌, 从第一张牌 ( 即位于顶面的牌 ) 开始从上往下依次编号为 1~n 当至少还剩两张牌时进行以下操作 : 把第一张牌扔掉, 然后把新的第一张放到整叠牌的最后 请模拟这个过程, 依次输出每次扔掉的牌以及最后剩下的牌的编号 输入 输入正整数 n(n

More information

2015年计算机二级(C语言)模拟试题及答案(四)

2015年计算机二级(C语言)模拟试题及答案(四) 2016 年 计 算 机 二 级 (C 语 言 ) 模 拟 试 题 及 答 案 (4) 一 填 空 题 1 C 语 言 中 基 本 的 数 据 类 型 有 : 2 C 语 言 中 普 通 整 型 变 量 的 类 型 说 明 符 为, 在 内 存 中 占 字 节, 有 符 号 普 通 整 型 的 数 据 范 围 是 3 整 数 -35 在 机 内 的 补 码 表 示 为 4 执 行 下 列 语 句 int

More information

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

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 2013 18 ( ) 1. C pa.c, pb.c, 2. C++ pa.cpp, pb.cpp, Compilation Error cin scanf Time Limit Exceeded 1: A 5 B 5 C 5 D 5 E 5 F 5 1 2013 C 1 # include 2 int main ( void ) 3 { 4 int cases, a, b,

More information

CC213

CC213 : (Ken-Yi Lee), E-mail: feis.tw@gmail.com 9 [P.11] : Dev C++ [P.12] : http://c.feis.tw [P.13] [P.14] [P.15] [P.17] [P.23] Dev C++ [P.24] [P.27] [P.34] C / C++ [P.35] 10 C / C++ C C++ C C++ C++ C ( ) C++

More information

Ps22Pdf

Ps22Pdf C ( CIP) C /. :, 2001. 7 21 ISBN 7-5624 -2355-5. C........ C. TP312 CIP ( 2001 ) 034496 C * * : 7871092 1 /16 : 14. 25 : 356 20017 1 20017 1 : 1 6 000 ISBN 7-5624-2355-5 / TP311 : 21. 00 C, C,,,, C,, (

More information

OOP with Java 通知 Project 4: 推迟至 4 月 25 日晚 9 点

OOP with Java 通知 Project 4: 推迟至 4 月 25 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 推迟至 4 月 25 日晚 9 点 复习 Protected 可以被子类 / 同一包中的类访问, 不能被其他类访问 弱化的 private 同时赋予 package access class MyType { public int i; public double d; public

More information

_汪_文前新ok[3.1].doc

_汪_文前新ok[3.1].doc 普 通 高 校 本 科 计 算 机 专 业 特 色 教 材 精 选 四 川 大 学 计 算 机 学 院 国 家 示 范 性 软 件 学 院 精 品 课 程 基 金 青 年 基 金 资 助 项 目 C 语 言 程 序 设 计 (C99 版 ) 陈 良 银 游 洪 跃 李 旭 伟 主 编 李 志 蜀 唐 宁 九 李 涛 主 审 清 华 大 学 出 版 社 北 京 i 内 容 简 介 本 教 材 面 向

More information

<4D F736F F D C4EA33D4C2C8ABB9FABCC6CBE3BBFAB5C8BCB6BFBCCAD4B6FEBCB6B1CACAD4CAD4BEEDBCB0B2CEBFBCB4F0B0B82E646F63>

<4D F736F F D C4EA33D4C2C8ABB9FABCC6CBE3BBFAB5C8BCB6BFBCCAD4B6FEBCB6B1CACAD4CAD4BEEDBCB0B2CEBFBCB4F0B0B82E646F63> 2012 年 3 月全国计算机等级考试二级笔试试卷及参考答案 C 语言程序设计 ( 考试时间 90 分钟, 满分 100 分 ) 一 选择题 ((1)-(10) (21)-(40) 每题 2 分,(11)-(20) 每题 1 分, 共 70 分 ) 下列各题 A) B) C) D) 四个选项中, 只有一个选项是正确的 请将正确选项填涂在答题卡相应位置上答在试卷上不得分 1. 下列叙述中正确的是 A)

More information

<4D F736F F D20CBB6CABFD1D0BEBFC9FAC8EBD1A7BFBCCAD4B4F3B8D92D383835B3CCD0F2C9E8BCC62E646F63>

<4D F736F F D20CBB6CABFD1D0BEBFC9FAC8EBD1A7BFBCCAD4B4F3B8D92D383835B3CCD0F2C9E8BCC62E646F63> 目录 I 考查目标... 2 II 考试形式和试卷结构... 2 III 考查内容... 2 IV. 题型示例及参考答案... 7 1 全国硕士研究生入学统一考试程序设计考试大纲 I 考查目标 全国硕士研究生入学统一考试计算机技术 软件工程专业学位硕士 程序设计 考试是为江苏大学招收以上硕士生设置的具有选拔性质的考试科目 其目的是科学 公平 有效地测试考生是否具备攻读计算机技术 软件工程专业学位硕士所必须的基本素质

More information

untitled

untitled Introduction to Programming ( 數 ) Lecture 3 Spring 2005 March 4, 2005 Lecture 2 Outline 數 料 If if 狀 if 2 (Standard Output, stdout): 料. ((Standard Input, stdin): 料. 類 數 數 數 說 printf 見 數 puts 串 數 putchar

More information

c_cpp

c_cpp C C++ C C++ C++ (object oriented) C C++.cpp C C++ C C++ : for (int i=0;i

More information

PowerPoint Presentation

PowerPoint Presentation 归纳与递归 离散数学 归纳与递归 南京大学计算机科学与技术系 内容提要 归纳 数学归纳法 强数学归纳法 运用良序公理来证明 递归 递归定义 结构归纳法 递归算法 数学归纳法 数学归纳法 ( 有效性 ) 良序公理 正整数集合的非空子集都有一个最小元素 数学归纳法的有效性 ( 归谬法 ) 假设 n P(n) 不成立, 则 n (P(n)) 成立. 令 S={ n + P(n)},S 是非空子集. 根据良序公理,S

More information

download.kaoyan.com_2006ÄêÌì½ò¹¤Òµ´óѧ¸ß¼¶ÓïÑÔ³ÌÐòÉè¼Æ£¨409£©¿¼ÑÐÊÔÌâ

download.kaoyan.com_2006ÄêÌì½ò¹¤Òµ´óѧ¸ß¼¶ÓïÑÔ³ÌÐòÉè¼Æ£¨409£©¿¼ÑÐÊÔÌâ 考生注意 : 本试卷共七大题, 满分 150 分 考试时间为 3 小时 ; 所有答案均写在答题纸上 ( 注明题号 ), 在此答题一律无效无效 一 选择题 ( 本题共 20 小题, 每小题 2 分, 满分 40 分 ) 1 char ch 1 2 A 0

More information

6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C C C51 C51 ANSI C MCS-51 C51 ANSI C C C51 bit Byte bit sbit

6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C C C51 C51 ANSI C MCS-51 C51 ANSI C C C51 bit Byte bit sbit 6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C51 6.1 C51 6.1.1 C51 C51 ANSI C MCS-51 C51 ANSI C C51 6.1 6.1 C51 bit Byte bit sbit 1 0 1 unsigned char 8 1 0 255 Signed char 8 11 128

More information

求出所有的正整数 n 使得 20n + 2 能整除 2003n n 20n n n 20n n 求所有的正整数对 (x, y), 满足 x y = y x y (x, y) x y = y x y. (x, y) x y =

求出所有的正整数 n 使得 20n + 2 能整除 2003n n 20n n n 20n n 求所有的正整数对 (x, y), 满足 x y = y x y (x, y) x y = y x y. (x, y) x y = 求出所有的正整数 n 使得 20n + 2 能整除 2003n + 2002 n 20n + 2 2003n + 2002 n 20n + 2 2003n + 2002 求所有的正整数对 (x, y), 满足 x y = y x y (x, y) x y = y x y. (x, y) x y = y x y 对于任意正整数 n, 记 n 的所有正约数组成的集合为 S n 证明 : S n 中至多有一半元素的个位数为

More information

第7章-并行计算.ppt

第7章-并行计算.ppt EFEP90 10CDMP3 CD t 0 t 0 To pull a bigger wagon, it is easier to add more oxen than to grow a gigantic ox 10t 0 t 0 n p Ts Tp if E(n, p) < 1 p, then T (n) < T (n, p) s p S(n,p) = p : f(x)=sin(cos(x))

More information

一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八二三四五六七八九十一二三四五

一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八二三四五六七八九十一二三四五 科学出版社职教技术出版中心 www.aboo C 语言程序设计学习指导与练习 ( 二级 ) 魏文主编 陈燕敏汪志勤李文锦副主编 北京 内容简介本书针对浙江省计算机等级考试的大纲, 结合作者多年的实际教学经验, 总结归纳出各章节的知识点, 对重点 难点等内容进行解释与剖析, 并给出实例 书中提供了四套笔试综合练习题和详解, 分析解题思路, 给出应试技巧 针对上机考试, 编写了上机练习精解, 同时提供了一套上机考试模拟练习题及解答,

More information

华恒家庭网关方案

华恒家庭网关方案 LINUX V1.5 1 2 1 2 LINUX WINDOWS PC VC LINUX WINDOWS LINUX 90% GUI LINUX C 3 REDHAT 9 LINUX PC TFTP/NFS http://www.hhcn.com/chinese/embedlinux-res.html minicom NFS mount C HHARM9-EDU 1 LINUX HHARM9-EDU

More information

幻灯片 1

幻灯片 1 第一类换元法 ( 凑微分法 ) 学习指导 复习 : 凑微分 部分常用的凑微分 : () n d d( (4) d d( ); (5) d d(ln ); n n (6) e d d( e ); () d d( b); ); () d d( ); (7) sin d d (cos ) 常见凑微分公式 ); ( ) ( ) ( b d b f d b f ); ( ) ( ) ( n n n n d f

More information

ebook14-4

ebook14-4 4 TINY LL(1) First F o l l o w t o p - d o w n 3 3. 3 backtracking parser predictive parser recursive-descent parsing L L ( 1 ) LL(1) parsing L L ( 1 ) L L ( 1 ) 1 L 2 L 1 L L ( k ) k L L ( 1 ) F i r s

More information

新版 明解C++入門編

新版 明解C++入門編 511!... 43, 85!=... 42 "... 118 " "... 337 " "... 8, 290 #... 71 #... 413 #define... 128, 236, 413 #endif... 412 #ifndef... 412 #if... 412 #include... 6, 337 #undef... 413 %... 23, 27 %=... 97 &... 243,

More information

How to Debug Tuxedo Server printf( Input data is: %s, inputstr); fprintf(stdout, Input data is %s, inputstr); fprintf(stderr, Input data is %s, inputstr); printf( Return data is: %s, outputstr); tpreturn(tpsuccess,

More information

untitled

untitled 3 C++ 3.1 3.2 3.3 3.4 new delete 3.5 this 3.6 3.7 3.1 3.1 class struct union struct union C class C++ C++ 3.1 3.1 #include struct STRING { typedef char *CHARPTR; // CHARPTR s; // int strlen(

More information

Microsoft PowerPoint - DS_Ch4_EN [兼容模式]

Microsoft PowerPoint - DS_Ch4_EN [兼容模式] Data Structure Ch.4 Recursion Dr. He Emil Huang School of Computer Science and Technology Soochow University 苏州大学计算机科学与技术学院网络工程系 本章 ppt 与教材对应情况 本章涉及所有内容涵盖了教材以下章节 Chapter 5 ( 递归,Recursion) Question: 递归与数据结构课程体系的关系?

More information

Ps22Pdf

Ps22Pdf ( 98 ) C ( ) ( )158 1998 C : C C C,,, C,, : C ( ) : : (, 100084) : : : 7871092 1/ 16 :18 25 :415 : 2000 3 1 2000 3 1 : ISBN 7 302 01166 4/ T P432 : 00016000 : 22 00 ( 98 ) 20 90,,, ;,,, 1994, 1998, 160,

More information

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 复习 Protected 可以被子类 / 同一包中的类访问, 不能被其他类访问 弱化的 private 同时赋予 package access class MyType { public int i; public double d; public char

More information

untitled

untitled 不 料 料 例 : ( 料 ) 串 度 8 年 數 串 度 4 串 度 數 數 9- ( ) 利 數 struct { ; ; 數 struct 數 ; 9-2 數 利 數 C struct 數 ; C++ 數 ; struct 省略 9-3 例 ( 料 例 ) struct people{ char name[]; int age; char address[4]; char phone[]; int

More information

Microsoft Word - CPE考生使用手冊160524.docx

Microsoft Word - CPE考生使用手冊160524.docx 大 學 程 式 能 力 檢 定 (CPE) 考 生 使 用 手 冊 2016 年 5 月 24 日 這 份 手 冊 提 供 給 參 加 CPE 檢 定 考 試 的 考 生 內 容 包 含 考 試 環 境 的 使 用, 以 及 解 題 時 所 使 用 I/O 的 基 本 知 識 1. 如 欲 報 名 參 加 CPE 考 試, 請 先 於 CPE 網 站 完 成 帳 號 註 冊, 然 後 再 報 名 該

More information

觀 音 佛 祖 送 給 衣 宸 的 話 005 自 序 007 Part 1 修 行 心 體 驗 一 篇 看 見 佛 祖 012 二 篇 在 家 修 行 039 三 篇 世 界 的 創 造 者 054 四 篇 大 慈 悲 079 五 篇 最 珍 貴 的 禮 物 095 六 篇 自 救 法 力 練 習

觀 音 佛 祖 送 給 衣 宸 的 話 005 自 序 007 Part 1 修 行 心 體 驗 一 篇 看 見 佛 祖 012 二 篇 在 家 修 行 039 三 篇 世 界 的 創 造 者 054 四 篇 大 慈 悲 079 五 篇 最 珍 貴 的 禮 物 095 六 篇 自 救 法 力 練 習 觀 音 佛 祖 送 給 衣 宸 的 話 005 自 序 007 Part 1 修 行 心 體 驗 一 篇 看 見 佛 祖 012 二 篇 在 家 修 行 039 三 篇 世 界 的 創 造 者 054 四 篇 大 慈 悲 079 五 篇 最 珍 貴 的 禮 物 095 六 篇 自 救 法 力 練 習 110 七 篇 以 至 善 心 創 作 133 八 篇 智 慧 善 法 151 九 篇 我 的 修

More information

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 复习 Protected 可以被子类 / 同一包中的类访问, 不能被其他类访问 弱化的 private 同时赋予 package access class MyType { public int i; public double d; public char

More information

幻灯片 1

幻灯片 1 算法分析与设计 Analysis and Design of Algorithm 第 3 次课 要点回顾 算法复杂度的概念 时间复杂度 空间复杂度 复杂度的渐近性态 略去低阶项所留下的主项 五个渐近分析记号及其性质 NP 完全性理论 问题的复杂度 易解 难解 不可解问题 P NP NPC NP 难问题 1. 渐近上界记号 O 2. 渐近下界记号 3. 紧渐近界记号 4. 非紧上界记号 o 5. 非紧下界记号

More information