幻灯片 1

Size: px
Start display at page:

Download "幻灯片 1"

Transcription

1 信息科学技术学院 程序设计实习 郭炜微博 刘家瑛微博 1

2 信息科学技术学院 程序设计实习 郭炜刘家瑛 函数指针 ( 教材 P107) 2

3 基本概念 程序运行期间, 每个函数都会占用一段连续的内存空间 而函数名就是该函数所占内存区域的起始地址 ( 也称 入口地址 ) 我们可以将函数的入口地址赋给一个指针变量, 使该指针变量指向该函数 然后通过指针变量就可以调用这个函数 这种指向函数的指针变量称为 函数指针 3

4 基本概念 程序运行期间, 每个函数都会占用一段连续的内存空间 而函数名就是该函数所占内存区域的起始地址 ( 也称 入口地址 ) 我们可以将函数的入口地址赋给一个指针变量, 使该指针变量指向该函数 然后通过指针变量就可以调用这个函数 这种指向函数的指针变量称为 函数指针 函数指针 函数体 4

5 定义形式 类型名 (* 指针变量名 )( 参数类型 1, 参数类型 2, ); 5

6 定义形式 类型名 (* 指针变量名 )( 参数类型 1, 参数类型 2, ); 例如 : int (*pf)(int,char); 6

7 定义形式 类型名 (* 指针变量名 )( 参数类型 1, 参数类型 2, ); 例如 : int (*pf)(int,char); 表示 pf 是一个函数指针, 它所指向的函数, 返回值类型应是 int, 该函数应有两个参数, 第一个是 int 类型, 第二个是 char 类型 7

8 使用方法 可以用一个原型匹配的函数的名字给一个函数指针赋值 要通过函数指针调用它所指向的函数, 写法为 : 函数指针名 ( 实参表 ); 8

9 使用方法 #include <stdio.h> void PrintMin(int a,int b) { if( a<b ) printf("%d",a); else printf("%d",b); } int main() { void (* pf)(int,int); int x = 4, y = 5; pf = PrintMin; pf(x,y); return 0; } 9

10 使用方法 #include <stdio.h> void PrintMin(int a,int b) { if( a<b ) printf("%d",a); else printf("%d",b); } int main() { void (* pf)(int,int); int x = 4, y = 5; pf = PrintMin; pf(x,y); return 0; PrintMin } 10 pf

11 使用方法 #include <stdio.h> void PrintMin(int a,int b) { if( a<b ) printf("%d",a); else printf("%d",b); } int main() { void (* pf)(int,int); int x = 4, y = 5; pf = PrintMin; pf(x,y); return 0; 输出结果 : 4 PrintMin } 11 pf

12 函数指针和 qsort 库函数 C 语言快速排序库函数 : void qsort(void *base, int nelem, unsigned int width, int ( * pfcompare)( const void *, const void *)); 可以对任意类型的数组进行排序 12

13 函数指针和 qsort 库函数 a[0] a[1] a[i] a[n-1] 对数组排序, 需要知道 : 13

14 函数指针和 qsort 库函数 a[0] a[1] a[i] a[n-1] 对数组排序, 需要知道 : 1) 数组起始地址 14

15 函数指针和 qsort 库函数 a[0] a[1] a[i] a[n-1] 对数组排序, 需要知道 : 1) 数组起始地址 2) 数组元素的个数 15

16 函数指针和 qsort 库函数 a[0] a[1] a[i] a[n-1] 对数组排序, 需要知道 : 1) 数组起始地址 2) 数组元素的个数 3) 每个元素的大小 ( 由此可以算出每个元素的地址 ) 16

17 函数指针和 qsort 库函数 a[0] a[1] a[i] a[n-1] 对数组排序, 需要知道 : 1) 数组起始地址 2) 数组元素的个数 3) 每个元素的大小 ( 由此可以算出每个元素的地址 ) 4) 元素谁在前谁在后的规则 17

18 函数指针和 qsort 库函数 a[0] a[1] a[i] a[n-1] void qsort(void *base, int nelem, unsigned int width, int ( * pfcompare)( const void *, const void *)); base: 待排序数组的起始地址, 18

19 函数指针和 qsort 库函数 a[0] a[1] a[i] a[n-1] void qsort(void *base, int nelem, unsigned int width, int ( * pfcompare)( const void *, const void *)); base: 待排序数组的起始地址, nelem: 待排序数组的元素个数, 19

20 函数指针和 qsort 库函数 a[0] a[1] a[i] a[n-1] void qsort(void *base, int nelem, unsigned int width, int ( * pfcompare)( const void *, const void *)); base: 待排序数组的起始地址, nelem: 待排序数组的元素个数, width: 待排序数组的每个元素的大小 ( 以字节为单位 ) 20

21 函数指针和 qsort 库函数 a[0] a[1] a[i] a[n-1] void qsort(void *base, int nelem, unsigned int width, int ( * pfcompare)( const void *, const void *)); base: 待排序数组的起始地址, nelem: 待排序数组的元素个数, width: 待排序数组的每个元素的大小 ( 以字节为单位 ) pfcompare : 比较函数的地址 21

22 函数指针和 qsort 库函数 void qsort(void *base, int nelem, unsigned int width, int ( * pfcompare)( const void *, const void *)); pfcompare: 函数指针, 它指向一个 比较函数 该比较函数应为以下形式 : int 函数名 (const void * elem1, const void * elem2); 比较函数是程序员自己编写的 22

23 函数指针和 qsort 库函数 排序就是一个不断比较并交换位置的过程 qsort 函数在执行期间, 会通过 pfcompare 指针调用 比较函数, 调用时将要比较的两个元素的地址传给 比较函数, 然后根据 比较函数 返回值判断两个元素哪个更应该排在前面 23

24 函数指针和 qsort 库函数 a[0] a[1] a[i] a[n-1] pfcompare( e1, e2 );

25 函数指针和 qsort 库函数 a[0] a[1] a[i] a[n-1] pfcompare( e1, e2 ); int 比较函数名 (const void * elem1, const void * elem2); 25

26 函数指针和 qsort 库函数 a[0] a[1] a[i] a[n-1] pfcompare( e1, e2 ); int 比较函数名 (const void * elem1, const void * elem2); 比较函数编写规则 : 1) 如果 * elem1 应该排在 * elem2 前面, 则函数返回值是负整数 2) 如果 * elem1 和 * elem2 哪个排在前面都行, 那么函数返回 0 3) 如果 * elem1 应该排在 * elem2 后面, 则函数返回值是正整数 26

27 函数指针和 qsort 库函数 实例 : 下面的程序, 功能是调用 qsort 库函数, 将一个 unsigned int 数组按照个位数从小到大进行排序 比如 8,23,15 三个数, 按个位数从小到大排序, 就应该是 23,15,8 27

28 #include <stdio.h> #include <stdlib.h> int MyCompare( const void * elem1, const void * elem2 ) { unsigned int * p1, * p2; p1 = (unsigned int *) elem1; // * elem1 非法 p2 = (unsigned int *) elem2; // * elem2 非法 return (* p1 % 10) - (* p2 % 10 ); } #define NUM 5 int main() { unsigned int an[num] = { 8,123,11,10,4 }; qsort( an,num,sizeof(unsigned int), MyCompare); for( int i = 0;i < NUM; i ++ ) printf("%d ",an[i]); return 0; } 输出结果 :

29 信息科学技术学院 程序设计实习 郭炜微博 刘家瑛微博 1

30 信息科学技术学院 程序设计实习 郭炜刘家瑛 命令行参数 ( 教材 P157) 2

31 命令行方式运行程序 Windows + R 键 : 3

32 命令行方式运行程序 4

33 命令行方式运行程序 5

34 命令行方式运行程序 notepad sample.txt notepad 程序如何得知, 用户在以命令行方式运行它的时候, 后面跟着什么参数? 6

35 命令行参数 将用户在 CMD 窗口输入可执行文件名的方式启动程序时, 跟在可执行文件名后面的那些字符串, 称为 命令行参数 命令行参数可以有多个, 以空格分隔 比如, 在 CMD 窗口敲 : copy file1.txt file2.txt copy, file1.txt, file2.txt 就是命令行参数 如何在程序中获得命令行参数呢? 7

36 命令行参数 int main(int argc, char * argv[]) { } argc: 代表启动程序时, 命令行参数的个数 C/C++ 语言规定, 可执行程序程序本身的文件名, 也算一个命令行参数, 因此,argc 的值至少是 1 8

37 命令行参数 int main(int argc, char * argv[]) { } argc: 代表启动程序时, 命令行参数的个数 C/C++ 语言规定, 可执行程序程序本身的文件名, 也算一个命令行参数, 因此,argc 的值至少是 1 argv: 指针数组, 其中的每个元素都是一个 char* 类型的指针, 该指针指向一个字符串, 这个字符串里就存放着命令行参数 例如,argv[0] 指向的字符串就是第一个命令行参数, 即可执行程序的文件名,argv[1] 指向第二个命令行参数,argv[2] 指向第三个命令行参数 9

38 #include <stdio.h> int main(int argc, char * argv[]) { for(int i = 0;i < argc; i ++ ) printf( "%s\n",argv[i]); return 0; } 将上面的程序编译成 sample.exe, 然后在控制台窗口敲 : sample para1 para2 s.txt 5 hello world

39 #include <stdio.h> int main(int argc, char * argv[]) { for(int i = 0;i < argc; i ++ ) printf( "%s\n",argv[i]); return 0; } 将上面的程序编译成 sample.exe, 然后在控制台窗口敲 : sample para1 para2 s.txt 5 hello world 输出结果就是 : sample para1 para2 s.txt 5 hello world

40 信息科学技术学院 程序设计实习 郭炜微博 刘家瑛微博 1

41 信息科学技术学院 程序设计实习 郭炜刘家瑛 位运算 ( 教材 P28) 2

42 基本概念 位运算 : 用于对整数类型 (int,char, long 等 ) 变量中的某一位 (bit), 或者若干位进行操作 比如 : 3

43 基本概念 位运算 : 用于对整数类型 (int,char, long 等 ) 变量中的某一位 (bit), 或者若干位进行操作 比如 : 1) 判断某一位是否为 1 4

44 基本概念 位运算 : 用于对整数类型 (int,char, long 等 ) 变量中的某一位 (bit), 或者若干位进行操作 比如 : 1) 判断某一位是否为 1 2) 只改变其中某一位, 而保持其他位都不变 5

45 基本概念 位运算 : 用于对整数类型 (int,char, long 等 ) 变量中的某一位 (bit), 或者若干位进行操作 比如 : 1) 判断某一位是否为 1 2) 只改变其中某一位, 而保持其他位都不变 C/C++ 语言提供了六种位运算符来进行位运算操作 : & 按位与 ( 双目 ) 按位或 ( 双目 ) ^ 按位异或 ( 双目 ) ~ 按位非 ( 取反 )( 单目 ) << 左移 ( 双目 ) >> 右移 ( 双目 ) 6

46 按位与 & 将参与运算的两操作数各对应的二进制位进行与操作, 只有对应的两个二进位均为 1 时, 结果的对应二进制位才为 1, 否则为 0 7

47 按位与 & 例如 : 表达式 21 & 18 的计算结果是 16 ( 即二进制数 10000), 因为 : 8

48 按位与 & 例如 : 表达式 21 & 18 的计算结果是 16 ( 即二进制数 10000), 因为 : 21 用二进制表示就是 : 用二进制表示就是 : 二者按位与所得结果是 :

49 按位与 & 通常用来将某变量中的某些位清 0 且同时保留其他位不变 也可以用来获取某变量中的某一位 例如, 如果需要将 int 型变量 n 的低 8 位全置成 0, 而其余位不变, 则可以执行 : 10

50 按位与 & 通常用来将某变量中的某些位清 0 且同时保留其他位不变 也可以用来获取某变量中的某一位 例如, 如果需要将 int 型变量 n 的低 8 位全置成 0, 而其余位不变, 则可以执行 : n = n & 0xffffff00; 11

51 按位与 & 通常用来将某变量中的某些位清 0 且同时保留其他位不变 也可以用来获取某变量中的某一位 例如, 如果需要将 int 型变量 n 的低 8 位全置成 0, 而其余位不变, 则可以执行 : n = n & 0xffffff00; 也可以写成 : n &= 0xffffff00; 12

52 按位与 & 通常用来将某变量中的某些位清 0 且同时保留其他位不变 也可以用来获取某变量中的某一位 例如, 如果需要将 int 型变量 n 的低 8 位全置成 0, 而其余位不变, 则可以执行 : n = n & 0xffffff00; 也可以写成 : n &= 0xffffff00; 如果 n 是 short 类型的, 则只需执行 : n &= 0xff00; 13

53 按位与 & 如何判断一个 int 型变量 n 的第 7 位 ( 从右往左, 从 0 开始数 ) 是否是 1? 14

54 按位与 & 如何判断一个 int 型变量 n 的第 7 位 ( 从右往左, 从 0 开始数 ) 是否是 1? 只需看表达式 n & 0x80 的值是否等于 0x80 即可 0x80:

55 按位或 将参与运算的两操作数各对应的二进制位进行或操作, 只有对应的两个二进位都为 0 时, 结果的对应二进制位才是 0, 否则为 1 16

56 按位或 例如 : 表达式 的值是 23, 因为 : 17

57 按位或 例如 : 表达式 的值是 23, 因为 : 21: : :

58 按位或 按位或运算通常用来将某变量中的某些位置 1 且保留其他位不变 例如, 如果需要将 int 型变量 n 的低 8 位全置成 1, 而其余位不变, 则可以执行 : 19

59 按位或 按位或运算通常用来将某变量中的某些位置 1 且保留其他位不变 例如, 如果需要将 int 型变量 n 的低 8 位全置成 1, 而其余位不变, 则可以执行 : n = 0xff; 0xff:

60 按位异或 ^ 将参与运算的两操作数各对应的二进制位进行异或操作, 即只有对应的两个二进位不相同时, 结果的对应二进制位才是 1, 否则为 0 例如 : 表达式 21 ^ 18 的值是 7( 即二进制数 111) 21: : ^18:

61 按位异或 ^ 按位异或运算通常用来将某变量中的某些位取反, 且保留其他位不变 例如, 如果需要将 int 型变量 n 的低 8 位取反, 而其余位不变, 则可以执行 : n ^= 0xff; 0xff:

62 按位异或 ^ 异或运算的特点是 : 如果 a^b=c, 那么就有 c^b = a 以及 c^a=b ( 穷举法可证 ) 此规律可以用来进行最简单的加密和解密 23

63 按位异或 ^ 另外异或运算还能实现不通过临时变量, 就能交换两个变量的值 : int a = 5, b = 7; a = a ^ b; b = b ^ a; a = a ^ b; 即实现 a,b 值交换 穷举法可证 24

64 按位非 ~ 按位非运算符 ~ 是单目运算符 其功能是将操作数中的二进制位 0 变成 1,1 变成 0 例如, 表达式 ~21 的值是整型数 0xffffffea 21: ~21:

65 左移运算符 << 表达式 : a << b 的值是 : 将 a 各二进位全部左移 b 位后得到的值 左移时, 高位丢弃, 低位补 0 a 的值不因运算而改变 26

66 左移运算符 << 例如 : 9 << 4 9 的二进制形式 : 因此, 表达式 9<<4 的值, 就是将上面的二进制数左移 4 位, 得 : 即为十进制的

67 左移运算符 << 实际上, 左移 1 位, 就等于是乘以 2, 左移 n 位, 就等于是乘以 2 n 而左移操作比乘法操作快得多 28

68 右移运算符 >> 表达式 : a >> b 的值是 : 将 a 各二进位全部右移 b 位后得到的值 右移时, 移出最右边的位就被丢弃 a 的值不因运算而改变 29

69 右移运算符 >> 表达式 : a >> b 的值是 : 将 a 各二进位全部右移 b 位后得到的值 右移时, 移出最右边的位就被丢弃 a 的值不因运算而改变 对于有符号数, 如 long,int,short,char 类型变量, 在右移时, 符号位 ( 即最高位 ) 将一起移动, 并且大多数 C/C++ 编译器规定, 如果原符号位为 1, 则右移时高位就补充 1, 原符号位为 0, 则右移时高位就补充 0 30

70 右移运算符 >> 实际上, 右移 n 位, 就相当于左操作数除以 2 n, 并且将结果往小里取整 -25 >> 4 = -2-2 >> 4 = >> 4 = 1 31

71 #include <stdio.h> int main() { int n1 = 15; short n2 = -15; unsigned short n3 = 0xffe0; char c = 15; n1 = n1>>2; n2 >>= 3; n3 >>= 4; c >>= 3; printf( "n1=%d,n2=%x,n3=%x,c=%x",n1,n2,n3,c); } 32

72 #include <stdio.h> int main() { int n1 = 15; short n2 = -15; unsigned short n3 = 0xffe0; char c = 15; n1 = n1>>2; n2 >>= 3; n3 >>= 4; c >>= 3; printf( "n1=%d,n2=%x,n3=%x,c=%x",n1,n2,n3,c); } // 输出结果是 :n1=3,n2=fffffffe,n3=ffe,c=1 33

73 n1: n1 >>= 2: 变成 n2: n2 >>= 3: 变成 fffffffe, 即 n3: n3 >>= 4: 变成 ffe c: c >>= 3; 变成 int n1 = 15; short n2 = -15; unsigned short n3 = 0xffe0; char c = 15; 34

74 思考题 : 有两个 int 型的变量 a 和 n(0 <= n <= 31), 要求写一个表达式, 使该表达式的值和 a 的第 n 位相同 35

75 思考题 : 有两个 int 型的变量 a 和 n(0 <= n <= 31), 要求写一个表达式, 使该表达式的值和 a 的第 n 位相同 答案 : ( a >> n ) & 1

76 思考题 : 有两个 int 型的变量 a 和 n(0 <= n <= 31), 要求写一个表达式, 使该表达式的值和 a 的第 n 位相同 答案 : ( a >> n ) & 1 a b 31 b 30 b n b 0

77 思考题 : 有两个 int 型的变量 a 和 n(0 <= n <= 31), 要求写一个表达式, 使该表达式的值和 a 的第 n 位相同 答案 : ( a >> n ) & 1 a a>>n b 31 b 30 b n b 0 b 31 b 31 b i b n

78 思考题 : 有两个 int 型的变量 a 和 n(0 <= n <= 31), 要求写一个表达式, 使该表达式的值和 a 的第 n 位相同 答案 : ( a >> n ) & 1 a a>>n b 31 b 30 b n b 0 b 31 b 31 b i b n (a>>n) & b n 39

79 思考题 : 有两个 int 型的变量 a 和 n(0 <= n < 31), 要求写一个表达式, 使该表达式的值和 a 的第 n 位相同 另一答案 : (a & (1 << n )) >> n

80 信息科学技术学院 程序设计实习 郭炜 刘家瑛 引用 的概念和应用 1

81 引用的概念 ( 教材第 62 页 ) 下面的写法定义了一个引用, 并将其初始化为引用某个变量 类型名 & 引用名 = 某变量名 ; int n = 4; int & r = n; // r 引用了 n, r 的类型是 2

82 引用的概念 ( 教材第 62 页 ) 下面的写法定义了一个引用, 并将其初始化为引用某个变量 类型名 & 引用名 = 某变量名 ; int n = 4; int & r = n; // r 引用了 n, r 的类型是 int & 3

83 引用的概念 ( 教材第 62 页 ) 下面的写法定义了一个引用, 并将其初始化为引用某个变量 类型名 & 引用名 = 某变量名 ; int n = 4; int & r = n; // r 引用了 n, r 的类型是 int & 某个变量的引用, 等价于这个变量, 相当于该变量的一个别名 4

84 引用的概念 int n = 4; int & r = n; r = 4; cout << r; // 输出 4 cout << n; n = 5; cout << r; 5

85 引用的概念 int n = 4; int & r = n; r = 4; cout << r; // 输出 4 cout << n; // 输出 4 n = 5; cout << r; 6

86 引用的概念 int n = 4; int & r = n; r = 4; cout << r; // 输出 4 cout << n; // 输出 4 n = 5; cout << r; // 输出 5 7

87 引用的概念 定义引用时一定要将其初始化成引用某个变量 8

88 引用的概念 定义引用时一定要将其初始化成引用某个变量 初始化后, 它就一直引用该变量, 不会再引用别的变量了 9

89 引用的概念 定义引用时一定要将其初始化成引用某个变量 初始化后, 它就一直引用该变量, 不会再引用别的变量了 引用只能引用变量, 不能引用常量和表达式 10

90 引用的概念 double a = 4, b = 5; double & r1 = a; double & r2 = r1; // r2 也引用 a r2 = 10; cout << a << endl; r1 = b; cout << a << endl; 11

91 引用的概念 double a = 4, b = 5; double & r1 = a; double & r2 = r1; // r2 也引用 a r2 = 10; cout << a << endl; // 输出 10 r1 = b; cout << a << endl; 12

92 引用的概念 double a = 4, b = 5; double & r1 = a; double & r2 = r1; // r2 也引用 a r2 = 10; cout << a << endl; // 输出 10 r1 = b; // r1 并没有引用 b cout << a << endl; 13

93 引用的概念 double a = 4, b = 5; double & r1 = a; double & r2 = r1; // r2 也引用 a r2 = 10; cout << a << endl; // 输出 10 r1 = b; // r1 并没有引用 b cout << a << endl; // 输出 5 14

94 引用应用的简单示例 C 语言中, 如何编写交换两个整型变量值的函数? 15

95 引用应用的简单示例 C 语言中, 如何编写交换两个整型变量值的函数? void swap( int * a, int * b) { int tmp; tmp = * a; * a = * b; * b = tmp; } int n1, n2; swap(& n1,& n2) ; // n1,n2 的值被交换 16

96 引用应用的简单示例 有了 C++ 的引用 : void swap( int & a, int & b) { int tmp; tmp = a; a = b; b = tmp; } int n1, n2; swap(n1,n2) ; // n1,n2 的值被交换 17

97 引用作为函数的返回值 ( 教材第 63 页 ) int n = 4; int & SetValue() { return n; } int main() { SetValue() = 40; cout << n; return 0; } 18

98 引用作为函数的返回值 ( 教材第 63 页 ) int n = 4; int & SetValue() { return n; } int main() { SetValue() = 40; cout << n; return 0; } // 输出 : 40 19

99 常引用 ( 教材第 65 页 ) 定义引用时, 前面加 const 关键字, 即为 常引用 int n; const int & r = n; r 的类型是 20

100 常引用 ( 教材第 65 页 ) 定义引用时, 前面加 const 关键字, 即为 常引用 int n; const int & r = n; r 的类型是 const int & 21

101 常引用 不能通过常引用去修改其引用的内容 : int n = 100; const int & r = n; r = 200; // 编译错 n = 300; // 没问题 22

102 常引用和非常引用的转换 const T & 和 T & 是不同的类型!!! T & 类型的引用或 T 类型的变量可以用来初始化 const T & 类型的引用 const T 类型的常变量和 const T & 类型的引用则不能用来初始化 T & 类型的引用, 除非进行强制类型转换 23

103 QUIZ 1 下面程序片段哪个没错? A) int n = 4; int & r = n * 5; B) int n = 6; const int & r = n; r = 7; C) int n = 8; const int & r1 = n; int & r2 = r1; D) int n = 8; int & r1 = n; const int r2 = r1; 24

104 QUIZ 2 下面程序片段输出结果是什么? int a = 1,b = 2; int & r = a; r = b; r = 7; cout << a << endl; A) 1 B) 2 C) 7 25

105 信息科学技术学院 程序设计实习 郭炜 刘家瑛 下一小节 : const 的用法 26

106 信息科学技术学院 程序设计实习 郭炜 刘家瑛 const 关键字的用法 1

107 1) 定义常量 const int MAX_VAL = 23; const string SCHOOL_NAME = Peking University ; 2

108 2) 定义常量指针 不可通过常量指针修改其指向的内容 int n,m; const int * p = & n; * p = 5; n = 4; p = &m; 3

109 2) 定义常量指针 不可通过常量指针修改其指向的内容 int n,m; const int * p = & n; * p = 5; // 编译出错 n = 4; p = &m; 4

110 2) 定义常量指针 不可通过常量指针修改其指向的内容 int n,m; const int * p = & n; * p = 5; // 编译出错 n = 4; //ok p = &m; 5

111 2) 定义常量指针 不可通过常量指针修改其指向的内容 int n,m; const int * p = & n; * p = 5; // 编译出错 n = 4; //ok p = &m; //ok, 常量指针的指向可以变化 6

112 2) 定义常量指针 不能把常量指针赋值给非常量指针, 反过来可以 const int * p1; int * p2; p1 = p2; //ok p2 = p1; //error p2 = (int * ) p1; //ok, 强制类型转换 7

113 2) 定义常量指针 函数参数为常量指针时, 可避免函数内部不小心改变参数指针所指地方的内容 void MyPrintf( const char * p ) { strcpy( p,"this"); // 编译出错 printf("%s",p); //ok } 8

114 3) 定义常引用 不能通过常引用修改其引用的变量 int n; const int & r = n; r = 5; //error n = 4; //ok 9

115 信息科学技术学院 程序设计实习 郭炜 刘家瑛 下一小节 : 动态内存分配 10

116 信息科学技术学院 程序设计实习 郭炜 刘家瑛 动态内存分配 1

117 用 new 运算符实现动态内存分配 ( 教材 P109) 第一种用法, 分配一个变量 : P = new T; T 是任意类型名,P 是类型为 T * 的指针 动态分配出一片大小为 sizeof(t) 字节的内存空间, 并且将该内存空间的起始地址赋值给 P 比如 : int * pn; pn = new int; * pn = 5; 2

118 用 new 运算符实现动态内存分配 ( 教材 P109) 第二种用法, 分配一个数组 : P = new T[N]; T : 任意类型名 P : 类型为 T * 的指针 N : 要分配的数组元素的个数, 可以是整型表达式 动态分配出一片大小为 sizeof(t) 字节的内存空间, 并且将该内存空间的起始地址赋值给 P 3

119 用 new 运算符实现动态内存分配 ( 教材 P109) 动态分配数组示例 : int * pn; int i = 5; pn = new int[i * 20]; pn[0] = 20; pn[100] = 30; // 编译没问题 运行时导致数组越界 4

120 用 delete 运算符释放动态分配的内存 用 new 动态分配的内存空间, 一定要用 delete 运算符进行释放 delete 指针 ;// 该指针必须指向 new 出来的空间 int * p = new int; * p = 5; delete p; delete p; // 导致异常, 一片空间不能被 delete 多次 5

121 用 delete 运算符释放动态分配的数组 用 delete 释放动态分配的数组, 要加 [] delete [ ] 指针 ;// 该指针必须指向 new 出来的数组 int * p = new int[20]; p[0] = 1; delete [ ] p; 6

122 信息科学技术学院 程序设计实习 郭炜 刘家瑛 下一小节 : 内联函数 函数重载和函数缺省参数 7

123 信息科学技术学院 程序设计实习 郭炜 刘家瑛 内联函数 函数重载 函数缺省参数 1

124 内联函数 ( 教材 P66) 函数调用是有时间开销的 如果函数本身只有几条语句, 执行非常快, 而且函数被反复执行很多次, 相比之下调用函数所产生的这个开销就会显得比较大 为了减少函数调用的开销, 引入了内联函数机制 编译器处理对内联函数的调用语句时, 是将整个函数的代码插入到调用语句处, 而不会产生调用函数的语句 2

125 内联函数 ( 教材 P66) inline int Max(int a,int b) { if( a > b) return a; return b; } 3

126 函数重载 ( 教材 P67) 一个或多个函数, 名字相同, 然而参数个数或参数类型不相同, 这叫做函数的重载 以下三个函数是重载关系 : int Max(double f1,double f2) { } int Max(int n1,int n2) { } int Max(int n1,int n2,int n3) { } 函数重载使得函数命名变得简单 编译器根据调用语句的中的实参的个数和类型判断应该调用哪个函数 4

127 函数重载 ( 教材 P67) (1) int Max(double f1,double f2) { } (2) int Max(int n1,int n2) { } (3) int Max(int n1,int n2,int n3) { } Max(3.4,2.5); // 调用 (1) Max(2,4); // 调用 (2) Max(1,2,3); // 调用 (3) Max(3,2.4); //error, 二义性 5

128 函数的缺省参数 ( 教材 P61): C++ 中, 定义函数的时候可以让最右边的连续若干个参数有缺省值, 那么调用函数的时候, 若相应位置不写参数, 参数就是缺省值 void func( int x1, int x2 = 2, int x3 = 3) { } func(10 ) ; // 等效于 func(10,2,3) func(10,8) ; // 等效于 func(10,8,3) func(10,, 8) ; // 不行, 只能最右边的连续若干个参数缺省 6

129 函数的缺省参数 ( 教材 P61): 函数参数可缺省的目的在于提高程序的可扩充性 即如果某个写好的函数要添加新的参数, 而原先那些调用该函数的语句, 未必需要使用新增的参数, 那么为了避免对原先那些函数调用语句的修改, 就可以使用缺省参数 7

130 浅谈 面向对象程序设计方法 郭炜刘家瑛 北京大学程序设计实习

131 结构化程序设计的思考 结构化程序设计 复杂的大问题 层层分解 / 模块化 若干子问题 自顶向下, 逐步求精 程序 数据变量结构 函数算法 2

132 结构化程序设计的问题 在结构化程序设计中 数据结构 算法 3

133 结构化程序设计的问题 在结构化程序设计中 数据结构 算法 没有直观的联系 4

134 结构化程序设计的程序模式 变量 : var1 var2 var3 Main() 函数 : Sub1() Sub2() Sub3() Sub1_1() Sub3_1() Sub3_2() 5

135 结构化程序设计的问题 不得不面对的四大囧境 : 理解难修改难差错难重用难 6

136 业界需要面向对象 软件设计的目标 : 更快 更正确 更经济 7

137 面向对象的程序设计 面向对象的程序设计方法 面向对象的程序 = 类 + 类 + + 类 设计程序的过程 设计类的过程 8

138 面向对象的程序设计 面向对象的程序设计方法 : 一类事物 抽象 共同属性 数据结构行为 函数 封装 类 class Data Function 9

139 面向对象的程序模式 Main() var1 class1 Sub1() Sub1_1() var2 class2 Sub2() var3 class3 Sub3() Sub3_1() Sub3_2() 10

140 面向对象的程序设计 如果你是 Gru, 面对如此千姿百态的 Minion, 怎么办? 11

141 面向对象的程序设计 class Minion Name; Hair Color; Eye Number; Clothes Type; Minion 类 GetMinionName(); CountEyeNum(); SetHairColor(); SelectClothType(); 12

142 面向对象的程序设计 不同的 Minion 对象 Minion 类 class Minion Name; Hair Color; Eye Number; Clothes Type; GetMinionName(); CountEyeNum(); SetHairColor(); SelectClothType(); 13

143 类的定义 class 类名 { 访问范围说明符 : 成员变量 1 成员变量 2 成员函数声明 1 成员函数声明 2 访问范围说明符 : 更多成员变量更多成员函数声明 }; 14

144 15

145 面向对象程序设计 语言的发展历程 郭炜刘家瑛 北京大学程序设计实习

146 早期程序设计语言的历史 C 语言发展历程 面向对象程序设计语言的发展历程 1960 年, 算法描述语言 ALGOL 60 诞生 (C 语言的原型 ) 1967 年, 剑桥大学的 Martin Richards 对 CPL 语言进行了简化, 产生了 BCPL 语言 1970 年, 美国 Bell Labs 的 Ken Thompson 将 BCPL 进行了修改, 命名为 B 语言 1973 年, AT&T 的 Dennis Ritchie 设计出了一种新的语言, C 语言 1995 年, Sun 公司发布 JAVA 语言 1963 年, 剑桥大学在 ALGOL 的基础上发展了 CPL 语言 1967 年, Ole- Johan Dahl 和 Kristen Nygaard, 发布 Simula 年, Xerox 的 Alan Kay 发明 Smalltalk 1983 年, AT&T 实验室 Bjarne Stroustrup 发明 C++ 语言 2003 年, 微软公司发布了 C# 语言 2

147 C++ 语言的历史 1979 年, AT&T 实验室 Dr. Bjarne Stroustrup 开始发明 开始的版本称为 : C with Classes 1983 年 8 月, 第一个 C++ 实现投入使用 1983 年 10 月, 正式命名为 C++ (CPlusPlus) 1985 年 10 月, Bjarne 完成了经典巨著 The C++ Programming Language ( 第一版 ) 3

148 C++ 标准的发展 1989 年, C++2.0 版发布 1994 年, ANSI C++ 标准发布 1998 年, ANSI 和 ISO 联合发布 C++98 标准 加入 STL (Standard Template Library) 泛型设计 2003 年, ISO 的 C++ 标准委员会发布 C++03 标准 2005 年, Library Technical Report 1 (TR1) 技术报告发布 4

149 C++11 标准 2011 年 9 月, ISO 标准委员会通过了新的 C++ 标准 -- C++11 5

150 常用的 C++ 编译器 GCC Visual C Dev C++ Eclipse Borland C++Builder 6

151 第一个面向对象语言 :Simula Simula 1967 年, Ole-Johan Dahl 和 Kristen Nygaard 发布 Simula 67 提出了类 (class) 和子类 (subclass) 的概念 程序设计语言发展史上的一个重要的里程碑

152 C++ 之父 Bjarne Stroustrup AT&T Fellow, AT&T Labs - Research Distinguished Professor Holder of the College of Engineering Chair Computer Science at Texas A&M University C++ Bible The C++ Programming Language (4th Edition) Addison-Wesley ISBN May

153 从客观事物抽象出类的例子 郭炜刘家瑛 北京大学程序设计实习

154 例 : 客观事物 类 写一个程序, 输入矩形的宽和高, 输出面积和周长 高 宽 矩形 矩形的属性 宽和高 两个变量, 分别代表宽和高 对矩形的操作 设置宽和高 计算面积 计算周长 2

155 例 : 客观事物 类 带函数的结构体 封装 矩形类 int 宽 ; w; int 高 ; h; Area(); 设置宽, 高 ; 计算面积 Perimeter() (); ; 计算周长 Init( ); (); 成员变量 成员函数 类的成员 3

156 class CRectangle { public: int w, h; void Init( int w_, int h_ ) { w = w_; h = h_; } int Area() { return w * h; } int Perimeter() { return 2 * ( w + h ); } }; // 必须有分号 4

157 int main() { int w, h; CRectangle r; //r 是一个对象 cin >> w >> h; r.init(w, h); cout << r.area() << endl << r. Perimeter(); return 0; } 类定义的变量 类的实例 对象 5

158 对象的内存分配 对象的内存空间 对象的大小 = 所有成员变量的大小之和 E.g. CRectangle 类的对象, sizeof(crectangle) = 8 每个对象各有自己的存储空间 一个对象的某个成员变量被改变, 不会影响到其他的对象 6

159 对象间的运算 对象之间可以用 = 进行赋值不能用 ==,!=, >, <, >=, <= 进行比较 除非这些运算符经过了 重载 7

160 访问类的成员变量和成员函数 用法 1: 对象名. 成员名 CRectangle r1, r2; r1.w = 5; r2.init(3,4); 8

161 访问类的成员变量和成员函数 用法 2: 指针 -> 成员名 CRectangle r1, r2; CRectangle * p1 = & r1; CRectangle * p2 = & r2; p1->w = 5; p2->init(3,4); //Init 作用在 p2 指向的对象上 9

162 访问类的成员变量和成员函数 用法 3: 引用名. 成员名 CRectangle r2; CRectangle & rr = r2; rr.w = 5; rr.init(3,4); //rr 的值变了,r2 的值也变 10

163 另一种输出结果的方式 void PrintRectangle(CRectangle & r) { cout << r.area() << ","<< r.perimeter(); } CRectangle r3; r3.init(3,4); PrintRectangle(r3); 11

164 类的成员函数的另一种写法 成员函数体和类的定义分开写 class CRectangle { public: int w, h; int Area(); // 成员函数仅在此处声明 int Perimeter() ; void Init( int w_, int h_ ); }; 12

165 类的成员函数的另一种写法 int CRectangle::Area() { return w * h; } int CRectangle::Perimeter() { return 2 * ( w + h ); } void CRectangle::Init( int w_, int h_ ) { w = w_; h = h_; } 调用通过 : 对象 / 对象的指针 / 对象的引用 13

166 1 类成员的可访问范围 郭炜刘家瑛 北京大学程序设计实习

167 类成员的可访问范围 关键字 -- 类成员可被访问的范围 private : 指定私有成员, 只能在成员函数内被访问 public : 指定公有成员, 可以在任何地方被访问 protected : 指定保护成员 三种关键字出现的次数和先后次序都没有限制 2

168 对象成员的访问权限 定义一个类 class classname { }; private: 私有属性和函数 public: 公有属性和函数 protected: 保护属性和函数 说明类成员的可见性 3

169 对象成员的访问权限 缺省为私有成员 class Man { int nage; // 私有成员 char szname[20]; // 私有成员 public: void SetName(char * Name){ strcpy(szname, Name); } }; 4

170 对象成员的访问权限 类的成员函数内部, 可以访问 : 当前对象的全部属性, 函数 同类其它对象的全部属性, 函数 类的成员函数以外的地方, 只能够访问该类对象的公有成员 5

171 class CEmployee { private: char szname[30]; // 名字 public : int salary; // 工资 void setname(char * name); void getname(char * name); void averagesalary(cemployee e1,cemployee e2); }; void CEmployee::setName( char * name) { strcpy( szname, name); //ok } void CEmployee::getName( char * name) { strcpy( name, szname); //ok } 6

172 void CEmployee::averageSalary(CEmployee e1,cemployee e2){ salary = (e1.salary + e2.salary )/2; } int main(){ CEmployee e; strcpy(e.szname,"tom "); // 编译错, 不能访问私有成员 e.setname( "Tom"); // ok e.salary = 5000; //ok return 0; } 设置私有成员的目的 强制对成员变量的访问一定要通过成员函数进行 设置私有成员的机制 -- 隐藏 7

173 szname char szname[5] 如果 szname 不是私有, 需要修改全部 : strcpy(man1.szname, Tom ); 如果将 szname 变为私有, 所有对 szname 的访问都是通过成员函数来进行, man1.setname( Tom ); 8

<4D F736F F F696E74202D20B5DA3032BDB25FC0E0BACDB6D4CFF3312E BBCE6C8DDC4A3CABD5D>

<4D F736F F F696E74202D20B5DA3032BDB25FC0E0BACDB6D4CFF3312E BBCE6C8DDC4A3CABD5D> 程序设计实习 (I): C++ 程序设计 第二讲类和对象 (1) 面向对象的程序设计 面向对象的程序设计方法, 能够较好解决结构化程序设计中出现的问题 面向对象的程序 = 类 + 类 + + 类 设计程序的过程, 就是设计类的过程 2 面向对象的程序设计 面向对象的程序设计方法 : 将某类客观事物共同特点 ( 属性 ) 归纳出来, 形成一个数据结 构 ( 可以用多个变量描述事物的属性 ); 将这类事物所能进行的行为也归纳出来,

More information

FY.DOC

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

More information

C++ 程序设计 告别 OJ2 - 参考答案 MASTER 2019 年 5 月 3 日 1

C++ 程序设计 告别 OJ2 - 参考答案 MASTER 2019 年 5 月 3 日 1 C++ 程序设计 告别 OJ2 - 参考答案 MASTER 2019 年 5 月 3 日 1 1 TEMPLATE 1 Template 描述 使用模板函数求最大值 使用如下 main 函数对程序进行测试 int main() { double a, b; cin >> a >> b; cout c >> d; cout

More information

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1 C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 月 3 日 1 1 INPUTOUTPUT 1 InputOutput 题目描述 用 cin 输入你的姓名 ( 没有空格 ) 和年龄 ( 整数 ), 并用 cout 输出 输入输出符合以下范例 输入 master 999 输出 I am master, 999 years old. 注意 "," 后面有一个空格,"." 结束,

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

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP:  ******************* * 关于 Java 测试试题 ****** ******************* * 关于 Java 测试试题 ******************* 問 1 运行下面的程序, 选出一个正确的运行结果 public class Sample { public static void main(string[] args) { int[] test = { 1, 2, 3, 4, 5 ; for(int i = 1 ; i System.out.print(test[i]);

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

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

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

More information

没有幻灯片标题

没有幻灯片标题 指针作为函数参数 : 原因 : 1 需要修改一个或多个值,( 用 return 语句不能解决问题 ) 2 执行效率的角度 使用方法 : 在函数原型以及函数首部中需要声明能够接受指针值的形参, 具体的写法为 : 数据类型 * 形参名 如果有多个指针型形参, 则用逗号分隔, 例如 : void swap(int *p1, int *p2) 它说明了形参 p1 p2 是指向整型变量的指针 在函数调用时,

More information

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

新版 明解C言語入門編

新版 明解C言語入門編 328, 4, 110, 189, 103, 11... 318. 274 6 ; 10 ; 5? 48 & & 228! 61!= 42 ^= 66 _ 82 /= 66 /* 3 / 19 ~ 164 OR 53 OR 164 = 66 ( ) 115 ( ) 31 ^ OR 164 [] 89, 241 [] 324 + + 4, 19, 241 + + 22 ++ 67 ++ 73 += 66

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

Microsoft PowerPoint - 8. 运算符重载 Operator Overloading.pptx

Microsoft PowerPoint - 8. 运算符重载 Operator Overloading.pptx 运算符重载 Operator Overloading class Point { public: ; double x_, y_; Why Operator Overloading? Point (double x =0, double y = 0):x_(x),y_(y) { int main(){ Point a(1., 2), b(3,4); Point c = a + b; return 0;

More information

C/C++ - 文件IO

C/C++ - 文件IO C/C++ IO Table of contents 1. 2. 3. 4. 1 C ASCII ASCII ASCII 2 10000 00100111 00010000 31H, 30H, 30H, 30H, 30H 1, 0, 0, 0, 0 ASCII 3 4 5 UNIX ANSI C 5 FILE FILE 6 stdio.h typedef struct { int level ;

More information

C/C++ - 函数

C/C++ - 函数 C/C++ Table of contents 1. 2. 3. & 4. 5. 1 2 3 # include # define SIZE 50 int main ( void ) { float list [ SIZE ]; readlist (list, SIZE ); sort (list, SIZE ); average (list, SIZE ); bargragh

More information

Microsoft PowerPoint - 10 模板 Template.pptx

Microsoft PowerPoint - 10 模板 Template.pptx 模板 Tempalte 泛型编程的需要 Why Templates? 设想你对整数类型实现了一个排序算法 : void sort(int *is,int n); 用该函数可以对实 复数或工资单排序吗? 模板可以复用源代码 - 泛型编程. inline void Swap( int &x, int &y){ int t = x; x = y; y =t; inline void Swap(double

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

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

C/C++程序设计 - 字符串与格式化输入/输出 C/C++ / Table of contents 1. 2. 3. 4. 1 i # include # include // density of human body : 1. 04 e3 kg / m ^3 # define DENSITY 1. 04 e3 int main ( void ) { float weight, volume ; int

More information

PowerPoint Presentation

PowerPoint Presentation 程序设计 II 计算机学院黄章进 zhuang@ustc.edu.cn 课程内容 C 程序设计实践 C 语言回顾 简单程序设计 数制转换 日期和时间处理, 等 字符串处理 高精度计算 枚举 C++ 语言 从 C 到 C++ 类与对象 运算符重载与类型转换 继承与虚函数 编码规范 2 教材 李文新, 郭炜, 余华山. 程序设计导引及在线实践, 清华大学出版社, 2007 C99 参考书 : K. N.

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

第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

Microsoft PowerPoint - plan08.ppt

Microsoft PowerPoint - plan08.ppt 程 序 设 计 语 言 原 理 Principle of Programming Languages 裘 宗 燕 北 京 大 学 数 学 学 院 2012.2~2012.6 8. 面 向 对 象 为 什 么 需 要 面 向 对 象? OO 语 言 的 发 展 面 向 对 象 的 基 本 概 念 封 装 和 继 承 初 始 化 和 终 结 处 理 动 态 方 法 约 束 多 重 继 承 总 结 2012

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

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

《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

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

幻灯片 1 信息科学技术学院 程序设计实习 郭炜微博 http://weibo.com/guoweiofpku http://blog.sina.com.cn/u/3266490431 刘家瑛微博 http://weibo.com/pkuliujiaying 1 信息科学技术学院 程序设计实习 郭炜刘家瑛 继承和派生 ( 教材 P215) 2 继承和派生的概念 继承 : 在定义一个新的类 B 时, 如果该类与某个已有的类

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

Guava学习之Resources

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

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

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

ebook8-30

ebook8-30 3 0 C C C C C C++ C + + C++ GNU C/C++ GNU egcs UNIX shell s h e l l g a w k P e r l U N I X I / O UNIX shell awk P e r l U N I X C C C C C C U N I X 30.1 C C U N I X 70 C C U N I X U N I X U N I X C Dennis

More information

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

C C C The Most Beautiful Language and Most Dangerous Language in the Programming World! C 2 C C C 4 C 40 30 10 Project 30 C Project 3 60 Project 40 C C trio@seu.edu.cn C C C C The Most Beautiful Language and Most Dangerous Language in the Programming World! C 2 C C C 4 C 40 30 10 Project 30 C Project 3 60 Project 40 Week3 C Week5 Week5 Memory & Pointer

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

(procedure-oriented)?? 2

(procedure-oriented)?? 2 1 (procedure-oriented)?? 2 (Objected-Oriented) (class)? (method)? 3 : ( 4 ???? 5 OO 1966 Kisten Nygaard Ole-Johan Dahl Simula Simula 爲 6 Smalltalk Alan Kay 1972 PARC Smalltalk Smalltalk 爲 Smalltalk 爲 Smalltalk

More information

北京大学

北京大学 1 string 类 郭炜刘家瑛 北京大学程序设计实习 string 类 string 类是一个模板类, 它的定义如下 : typedef basic_string string; 使用 string 类要包含头文件 string 对象的初始化 : string s1("hello"); // 一个参数的构造函数 string s2(8, x ); // 两个参数的构造函数

More information

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

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

More information

extend

extend (object oriented) Encapsulation Inheritance Polymorphism Dynamic Binding (base class) (derived class) 1 class Base { int I; void X(); void Y(); class Derived: public Base { private: int j; void z(); Derived

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

试卷代号 :1075 座位号 rn 国家开放大学 ( 中央广播电视大学 )2015 年秋季学期 " 开放本科 " 期末考试 c+ 十语言程序设计试题 2016 年 1 月 t 问一 Urr-f 斗 士 1 1. 下面的保留字 ( ) 不能作为函数的返回类型 A. void B. int C. new

试卷代号 :1075 座位号 rn 国家开放大学 ( 中央广播电视大学 )2015 年秋季学期  开放本科  期末考试 c+ 十语言程序设计试题 2016 年 1 月 t 问一 Urr-f 斗 士 1 1. 下面的保留字 ( ) 不能作为函数的返回类型 A. void B. int C. new 试卷代号 :1075 座位号 rn 国家开放大学 ( 中央广播电视大学 )2015 年秋季学期 " 开放本科 " 期末考试 c+ 十语言程序设计试题 2016 年 1 月 t 问一 Urr-f 斗 士 1 1. 下面的保留字 ( ) 不能作为函数的返回类型 A. void B. int C. new D. long 2. 在每个 C 十 + 程序中都必须包含有这样一个函数, 该函数的函数名为 ) A.main

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 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d =

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

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

试卷代号 ~1075 座位号 E 口 国家开放大学 ( 中央广播电视大学 )20]5 年秋季学期 " 开放本科 " 期末考试 C 十十语言程序设计 试题 同二二十斗 2016 年 1 月 巴叫一 1. 下面的保留字 ( ) 不能作为函数的返回类型 A. void B. int C. new D. l

试卷代号 ~1075 座位号 E 口 国家开放大学 ( 中央广播电视大学 )20]5 年秋季学期  开放本科  期末考试 C 十十语言程序设计 试题 同二二十斗 2016 年 1 月 巴叫一 1. 下面的保留字 ( ) 不能作为函数的返回类型 A. void B. int C. new D. l 试卷代号 ~1075 座位号 E 口 国家开放大学 ( 中央广播电视大学 )20]5 年秋季学期 " 开放本科 " 期末考试 C 十十语言程序设计 试题 同二二十斗 2016 年 1 月 巴叫一 1. 下面的保留字 ( ) 不能作为函数的返回类型 A. void B. int C. new D. long 2. 在每个 c++ 程序中都必须包含有这样一个函数, 该函数的函数名为 ( ) A. main

More information

02

02 Thinking in C++: Volume One: Introduction to Standard C++, Second Edition & Volume Two: Practical Programming C++ C C++ C++ 3 3 C C class C++ C++ C++ C++ string vector 2.1 interpreter compiler 2.1.1 BASIC

More information

untitled

untitled 1 1.1 1.2 1.3 1.4 1.5 ++ 1.6 ++ 2 BNF 3 4 5 6 7 8 1.2 9 1.2 IF ELSE 10 1.2 11 1.2 12 1.3 Ada, Modula-2 Simula Smalltalk-80 C++, Objected Pascal(Delphi), Java, C#, VB.NET C++: C OOPL Java: C++ OOPL C# C++

More information

提问袁小兵:

提问袁小兵: C++ 面 试 试 题 汇 总 柯 贤 富 管 理 软 件 需 求 分 析 篇 1. STL 类 模 板 标 准 库 中 容 器 和 算 法 这 部 分 一 般 称 为 标 准 模 板 库 2. 为 什 么 定 义 虚 的 析 构 函 数? 避 免 内 存 问 题, 当 你 可 能 通 过 基 类 指 针 删 除 派 生 类 对 象 时 必 须 保 证 基 类 析 构 函 数 为 虚 函 数 3.

More information

运算符重载 为什么要 运算符重载 那些运算符可以重载, 哪些不可以 如何实现运算符重载 实现方式 : 成员函数与非成员函数 类型转换 怎样实现对象与基本数据类型数据的运算 2

运算符重载 为什么要 运算符重载 那些运算符可以重载, 哪些不可以 如何实现运算符重载 实现方式 : 成员函数与非成员函数 类型转换 怎样实现对象与基本数据类型数据的运算 2 第十一讲 运算符重载 与类型转换 运算符重载 为什么要 运算符重载 那些运算符可以重载, 哪些不可以 如何实现运算符重载 实现方式 : 成员函数与非成员函数 类型转换 怎样实现对象与基本数据类型数据的运算 2 为什么要运算符重载 预定义的运算符只针对基本数据类型, 若要对类的对象进行类似的运算, 需要重新定义运算符的功能 运算符重载实质就是函数重载 : 对已有的运算符赋予多重含义, 使得同一个运算符作用于不同类型的数据时导致不同的行为

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

计算概论A B03 C++语言的基本成分 - 运算成分(2)

计算概论A B03 C++语言的基本成分 - 运算成分(2) 计算概论 A 程序设计部分 C 语言的构成成分 运算成分 李戈 北京大学信息科学技术学院软件研究所 lige@sei.pku.edu.cn C 语言中的运算符 C 语言的运算符范围很宽 求字节数运算符 : sizeof 下标运算符 [ ] 赋值运算符 = 算术运算符 + - * / % 关系运算符 < > == >= > ~

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

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

untitled

untitled 1 7 7.1 7.2 7.3 7.4 7.5 2 7.1 VFT virtual 7.1 3 1 1. 2. public protected public 3. VFT 4. this const volatile 4 2 5. ( ) ( ) 7.1 6. no-static virtual 7.2 7. inline 7.3 5 3 8. this this 9. ( ) ( ) delete

More information

Microsoft PowerPoint - 第07讲_多态1.ppt [兼容模式]

Microsoft PowerPoint - 第07讲_多态1.ppt [兼容模式] 程序设计实习 (I): C++ 程序设计 第七讲多态 上节内容回顾 基本概念 : 继承 基类 派生类 派生类的成员组成 可见性 派生类的构造 析构 派生类与基类的指针类型转换 2 回顾 : public 继承 class base { private: int m; public: int q; base(int ti=0):m(i){} }; class derived : public base

More information

Strings

Strings Polymorphism and Virtual Functions Cheng-Chin Chiang Virtual Function Basics 多 型 (Polymorphism) 賦 予 一 個 函 數 多 種 意 涵, 存 在 於 同 一 類 別 之 內 祖 先 類 別 與 後 代 類 別 間 物 件 導 向 程 式 設 計 基 本 原 理 虛 擬 函 數 (Virtual Function)

More information

Microsoft Word - 新1-12.doc

Microsoft Word - 新1-12.doc 实训 5 面向对象编程练习 实训 5 面向对象编程练习 5.1 实训目的 通过编程和上机实验理解 Java 语言是如何体现面向对象编程基本思想 以及如何创建类 和对象 了解成员变量和成员方法的特性 5.2 实训要求 编写一个体现面向对象思想的程序 编写一个创建对象和使用对象的方法的程序 5.3 实训内容 5.3.1 创建对象并使用对象 1 定义一个 Person 类 可以在应用程序中使用该类 成员属性

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

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File 51 C 51 51 C C C C C C * 2003-3-30 pnzwzw@163.com C C C C KEIL uvision2 MCS51 PLM C VC++ 51 KEIL51 KEIL51 KEIL51 KEIL 2K DEMO C KEIL KEIL51 P 1 1 1 1-1 - 1 Project New Project 1 2 Windows 1 3 N C test

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

北京大学

北京大学 1 运算符重载 基本概念 郭炜刘家瑛 北京大学程序设计实习 运算符 C++ 预定义表示对数据的运算 +, -, *, /, %, ^, &, ~,!,, =, ,!= 只能用于基本的数据类型 整型, 实型, 字符型, 逻辑型 2 自定义数据类型与运算符重载 C++ 提供了数据抽象的手段 : 用户自己定义数据类型 -- 类 调用类的成员函数 操作它的对象 类的成员函数 操作对象时, 很不方便

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

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

Strings

Strings Inheritance Cheng-Chin Chiang Relationships among Classes A 類 別 使 用 B 類 別 學 生 使 用 手 機 傳 遞 訊 息 公 司 使 用 金 庫 儲 存 重 要 文 件 人 類 使 用 交 通 工 具 旅 行 A 類 別 中 有 B 類 別 汽 車 有 輪 子 三 角 形 有 三 個 頂 點 電 腦 內 有 中 央 處 理 單 元 A

More information

C++ 程序设计 OJ2 - 参考答案 MASTER 2019 年 5 月 3 日 1

C++ 程序设计 OJ2 - 参考答案 MASTER 2019 年 5 月 3 日 1 C++ 程序设计 OJ2 - 参考答案 MASTER 2019 年 5 月 3 日 1 1 PERSON 1 Person 题目描述 编写程序, 定义一个基类 Person, 包含 name 和 age 两个数据成员 ; 再由它派生出学生类 Student 和教师类 Teacher, 其中学生类添加学号 no 数据, 教师类添加职称 title 数据 ; 要求每个类均有构造函数 析构函数和显示数据的函数

More information

Microsoft Word - 第3章.doc

Microsoft Word - 第3章.doc 第 3 章 lambda 表达式及其应用 lambda 表达式是 Java 8 提供的一种新特性, 它使得 Java 也能像 C# 和 C++ 语言一样进行简单的 函数式编程, 这不仅简化了某些通用结构的实现方式, 也大大增强了 Java 语言的表达功能 3.1 lambda 表达式简介 lambda 表达式是基于数学中的 λ 演算得名, 本质上就是一个没有方法名的匿名方法 例如, 有一个方法定义如下

More information

C++ 程序设计 实验 2 - 参考答案 MASTER 2017 年 5 月 21 日 1

C++ 程序设计 实验 2 - 参考答案 MASTER 2017 年 5 月 21 日 1 C++ 程序设计 实验 2 - 参考答案 MASTER 2017 年 5 月 21 日 1 1 CRECT 类 1 CRect 类 设计矩形类, 包含 长度和宽度信息 基本构造函数 基础属性的访问接口 ( 读 / 写, Read/Write, Get/Set) 计算周长和面积 ( 注 : 基本构造函数, 一个无参数的默认构造函数, 以及一个初始化数据成员的构造函数如果数据成员的初始化有多种形式, 就提供多个构造函数

More information

保母人員丙級應檢資料第二部份 doc

保母人員丙級應檢資料第二部份 doc 15400903018 9 09 15 95 01 10 95 11 16 ...-3...4-9... 10...11-1...13-16...17-54... 55...56-64 1 5 3 154-90301154-9030 1 1 3 1 4 60 1 180 L 5 1 6 1 7 1 8 1 9 90 70 1 10 1 11 1 1 1 13 1 14 1 15 1 16 1 17

More information

<4D F736F F F696E74202D20B5DA3031BDB25F432B2BB3CCD0F2C9E8BCC6B8C5CAF62E BBCE6C8DDC4A3CABD5D>

<4D F736F F F696E74202D20B5DA3031BDB25F432B2BB3CCD0F2C9E8BCC6B8C5CAF62E BBCE6C8DDC4A3CABD5D> 2011-2012 2012 学年第二学期 程序设计实习 刘家瑛 刘家瑛 Office: 计算机科学技术研究所 310 室 Address: 中关村北大街 128 号东门外 Tel: 82529714 Email: liujiaying@pku.edu.cn Group site: http://www.icst.pku.edu.cn/course/icb/struct.html Research

More information

OOP with Java 通知 Project 3 提交时间 3 月 29 日晚 9 点 Piazza Project 2 投票

OOP with Java 通知 Project 3 提交时间 3 月 29 日晚 9 点 Piazza Project 2 投票 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 3 提交时间 3 月 29 日晚 9 点 Piazza Project 2 投票 复习 创建对象 构造函数 函数重载 : 函数 = 函数名 + 参数列表 public class MyType { int i; double d; char c; void set(double x)

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

无类继承.key

无类继承.key 无类继承 JavaScript 面向对象的根基 周爱 民 / aimingoo aiming@gmail.com https://aimingoo.github.io https://github.com/aimingoo rand = new Person("Rand McKinnon",... https://docs.oracle.com/cd/e19957-01/816-6408-10/object.htm#1193255

More information

C

C C 2017 3 14 1. 2. 3. 4. 2/95 C 1. 3/95 C I 1 // talkback.c: 2 #include 3 #include 4 #define DENSITY 62.4 5 int main(void) 6 { 7 float weight, volume; 8 int size; 9 unsigned long letters;

More information

1 C++ 2 Bjarne Stroustrup C++ (system programming) 6 (infrastructure) C++ 7 Herb Sutter 8 C++ (efficiency) (flexibility) 9 (abstraction) (productivity

1 C++ 2 Bjarne Stroustrup C++ (system programming) 6 (infrastructure) C++ 7 Herb Sutter 8 C++ (efficiency) (flexibility) 9 (abstraction) (productivity 1 C++ 1 C++ Primer C++ (giantchen@gmail.com) 2012-7-11 Creative Commons - - 3.0 Unported (cc by-nc-nd) http://creativecommons.org/licenses/by-nc-nd/3.0/ 1 C++ 2009 Stanley Lippman C++ C++ Java/C#/Python

More information

Microsoft Word - 97.01.30軟體設計第二部份範例試題_C++_ _1_.doc

Microsoft Word - 97.01.30軟體設計第二部份範例試題_C++_ _1_.doc 電 腦 軟 體 設 計 乙 級 技 術 士 技 能 檢 定 術 科 測 試 範 例 試 題 (C++) 試 題 編 號 :11900-920201-4 審 定 日 期 : 94 年 7 月 1 日 修 訂 日 期 : 96 年 2 月 1 日 97 年 1 月 30 日 ( 第 二 部 份 ) 電 腦 軟 體 設 計 乙 級 技 術 士 技 能 檢 定 術 科 測 試 應 檢 參 考 資 料 壹 試

More information

Microsoft PowerPoint - L17_Inheritance_v4.pptx

Microsoft PowerPoint - L17_Inheritance_v4.pptx C++ Programming Lecture 17 Wei Liu ( 刘 威 ) Dept. of Electronics and Information Eng. Huazhong University of Science and Technology May. 2015 Lecture 17 Chapter 20. Object-Oriented Programming: Inheritance

More information

51 C 51 isp 10 C PCB C C C C KEIL

51 C 51 isp 10   C   PCB C C C C KEIL http://wwwispdowncom 51 C " + + " 51 AT89S51 In-System-Programming ISP 10 io 244 CPLD ATMEL PIC CPLD/FPGA ARM9 ISP http://wwwispdowncom/showoneproductasp?productid=15 51 C C C C C ispdown http://wwwispdowncom

More information

C C

C C C C 2017 3 8 1. 2. 3. 4. char 5. 2/101 C 1. 3/101 C C = 5 (F 32). 9 F C 4/101 C 1 // fal2cel.c: Convert Fah temperature to Cel temperature 2 #include 3 int main(void) 4 { 5 float fah, cel; 6 printf("please

More information

Microsoft PowerPoint - 01_Introduction.ppt

Microsoft PowerPoint - 01_Introduction.ppt Hello, World C 程序设计语言 第 1 章章观其大略 孙志岗 sun@hit.edu.cn http://sunner.cn prf("hello,, world\n"); 超级无敌考考你 : 如何把 hello 和 world 分别打印在两行? 2004-12-19 A Tutorial Introduction 2 hello.c 打印华氏温度与摄氏温度对照表 计算公式 : C=(5/9)(

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

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

Chapter 9: Objects and Classes

Chapter 9: Objects and Classes Fortran Algol Pascal Modula-2 BCPL C Simula SmallTalk C++ Ada Java C# C Fortran 5.1 message A B 5.2 1 class Vehicle subclass Car object mycar public class Vehicle extends Object{ public int WheelNum

More information

untitled

untitled ISBN 7 6924 8803 3/F 323 5.00 A B C D A (1) (2) ( ) (3) (4) (5)! (1) (2) (3) (4) (5) (6) ( 5 (7) ) (8) I (9) (10) (11)!! (1) (2) (3) ? ?? (1812 1854) 1848 (1851 ) 1853 () ( ) 1852 ? ( ) 1854 ( ? (1)

More information

Chapter12 Derived Classes

Chapter12   Derived Classes 继 承 -- 派 生 类 复 习 1. 有 下 面 类 的 说 明, 有 错 误 的 语 句 是 : class X { A) const int a; B) X(); C) X(int val) {a=2 D) ~X(); 答 案 :C 不 正 确, 应 改 成 X(int val) : a(2) { 2. 下 列 静 态 数 据 成 员 的 特 性 中, 错 误 的 是 A) 说 明 静 态 数

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 PowerPoint - C语言课件-9-结构体.pptx

Microsoft PowerPoint - C语言课件-9-结构体.pptx 第九章结构体 郎大鹏 第九章结构体 9.1 结构体类型的声明方法 9.2 结构体类型变量的定义与使用 9.3 结构体数组 9.4 编程举例 9.5 习题 9.1 结构体类型的声明方法 结构体声明的语法形式如下 : struct 结构体标识符 成员变量列表 ; }; 例如, 为了描述班级 ( 假设仅仅包括班级编号 专业 人数等信息 ), 可以声明如下的结构体类型 struct Class char Code[10];

More information

Microsoft Word - 119002_Java_術科 .doc

Microsoft Word - 119002_Java_術科 .doc 電 腦 軟 體 設 計 乙 級 技 術 士 技 能 檢 定 術 科 測 試 應 檢 人 參 考 資 料 (Java) 試 題 編 號 :11900-1000201~3 審 定 日 期 :100 年 6 月 28 日 電 腦 軟 體 設 計 乙 級 技 術 士 技 能 檢 定 術 科 測 試 應 檢 人 參 考 資 料 目 錄 ( 第 二 部 分 ) 壹 電 腦 軟 體 設 計 乙 級 技 術 士 技

More information

BOOL EnumWindows(WNDENUMPROC lparam); lpenumfunc, LPARAM (Native Interface) PowerBuilder PowerBuilder PBNI 2

BOOL EnumWindows(WNDENUMPROC lparam); lpenumfunc, LPARAM (Native Interface) PowerBuilder PowerBuilder PBNI 2 PowerBuilder 9 PowerBuilder Native Interface(PBNI) PowerBuilder 9 PowerBuilder C++ Java PowerBuilder 9 PBNI PowerBuilder Java C++ PowerBuilder NVO / PowerBuilder C/C++ PowerBuilder 9.0 PowerBuilder Native

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

Microsoft Word - 物件導向編程精要.doc

Microsoft Word - 物件導向編程精要.doc Essential Object-Oriented Programming Josh Ko 2007.03.11 object-oriented programming C++ Java OO class object OOP Ruby duck typing complexity abstraction paradigm objects objects model object-oriented

More information

C++ 程序设计 实验 3 - 参考答案 MASTER 2017 年 5 月 21 日 1

C++ 程序设计 实验 3 - 参考答案 MASTER 2017 年 5 月 21 日 1 C++ 程序设计 实验 3 - 参考答案 MASTER 2017 年 5 月 21 日 1 1 圆 1 圆 设计圆类 包含 包含基本属性和基本属性访问接口 计算面积和周长接口 2 1 圆 1 #include 2 using namespace std ; 3 c l a s s CCircle 4 { 5 p r i v a t e : 6 double r ; 7 const

More information

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课 复习 Java 包 创建包 : package 语句, 包结构与目录结构一致 使用包 : import restaurant/ - people/ - Cook.class - Waiter.class - tools/ - Fork.class

More information

第1章

第1章 C++ 程 序 设 计 1. 课 程 性 质 (1) C++ 是 面 向 过 程 ( 第 1 学 期 ) 与 面 向 对 象 ( 第 2 学 期 ) 程 序 设 计 语 言 ; (2) C++ 程 序 设 计 是 计 算 机 专 业 的 一 门 骨 干 专 业 基 础 课 程 2. 课 程 任 务 (1) 使 学 生 了 解 C++ 中 的 数 据 类 型 变 量 表 达 式 程 序 结 构 程 序

More information

untitled

untitled 1 Outline 數 料 數 數 列 亂數 練 數 數 數 來 數 數 來 數 料 利 料 來 數 A-Z a-z _ () 不 數 0-9 數 不 數 SCHOOL School school 數 讀 school_name schoolname 易 不 C# my name 7_eleven B&Q new C# (1) public protected private params override

More information

幻灯片 1

幻灯片 1 第一课 C 与 C++ 互联网新技术在线教育领航者 1 内容概述 第一部分 : C++ 综述 1. C++ 历史背景 2. Why C++ 3. 推荐书籍第二部分 : C VS C++ 1. C 语法回顾 2. 例 :C 实现动态数组 3. C++ 的 vector 第三部分 :C++ 对 C 的扩展 ( 上 ) 1. 命名空间 2. 输入输出 3. 基本类型转换 4. 声明 列表初始化 5. 指针和引用

More information

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

新・解きながら学ぶC言語 330!... 67!=... 42 "... 215 " "... 6, 77, 222 #define... 114, 194 #include... 145 %... 21 %... 21 %%... 21 %f... 26 %ld... 162 %lf... 26 %lu... 162 %o... 180 %p... 248 %s... 223, 224 %u... 162 %x... 180

More information

C++ 程序设计 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1

C++ 程序设计 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1 C++ 程序设计 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1 1 CIRCLE 1 Circle 描述 编写一个圆类 Circle, 实现半径的输入 面积的计算和输出 输入 圆的半径 (double 类型 ) 输出 圆的面积 ( 保留小数点后两位 ) 样例输入 3 样例输出 28.27 提示 圆周率的取值需要比较精确, 以保证计算结果的精度 #include

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

新・明解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

untitled

untitled 1 Outline 類别 欄 (1) 類 類 狀 更 易 類 理 若 類 利 來 利 using 來 namespace 類 ; (2) namespace IBM class Notebook namespace Compaq class Notebook 類别 類 來 類 列 欄 (field) (property) (method) (event) 類 例 立 來 車 類 類 立 車 欄 料

More information