PowerPoint Presentation

Size: px
Start display at page:

Download "PowerPoint Presentation"

Transcription

1 程序设计 II 计算机学院黄章进

2 课程内容 C 程序设计实践 C 语言回顾 简单程序设计 数制转换 日期和时间处理, 等 字符串处理 高精度计算 枚举 C++ 语言 从 C 到 C++ 类与对象 运算符重载与类型转换 继承与虚函数 编码规范 2

3 教材 李文新, 郭炜, 余华山. 程序设计导引及在线实践, 清华大学出版社, 2007 C99 参考书 : K. N. King. C Programming: A Modern Approach, 2nd Edition, 2008 C 语言程序设计 : 现代方法 ( 第 2 版 ) 3

4 考核 平时成绩 :40% 到课 实验 : 西区电 3 楼 406 室 18:00-21:00 期末考试 :60% 7 月 29 日下午 课程主页 : 4

5 程序设计 II 第 1 讲 C 语言回顾 计算机学院黄章进 zhuang@ustc.edu.cn

6 内容 C 语言概述 输入输出 位运算 函数指针 C99 的一些新特性 命令行参数 库函数 动态内存分配 6

7 C 程序 程序 = 数据结构 + 算法 C 语言概述 C 程序 = 变量 / 常量 + 函数 C 程序设计 C 标准 K&R C:Kernighan and Ritchie, The C Programming Language (1978) C89/C90:ISO/IEC 9899:1990 C99:ISO/IEC 9899:1999 C11: ISO/IEC 9899:2011 7

8 变量与数据类型 C 语言概述 变量是内存中的一块区域 变量名 变量类型 数据类型 : 内存 取值 操作 void 布尔型 _Bool 无符号整型, 取值 0 或 1,C99 bool (true/false) C99 <stdbool.h> 宏 字符型 char 整型 signed char, short, int, long, long long unsinged char/short/int/long, unsigned long long 浮点型 float, double, long double 8

9 数据类型 C 语言概述 自定义类型 指针 NULL, void * 数组 字符数组 枚举 enum 整型 结构体 struct 共用体 union 9

10 函数与语句 C 语言概述 函数 ( 或程序 ) 的基本单元是语句 (statement) 函数 自定义函数 库函数 语句 空语句 ; 和 {} 声明语句 表达式语句 分支语句 if-else 语句, switch-case 语句 循环语句 for 语句 while 语句 do-while 语句 break, continue, goto 语句 语句块 10

11 表达式与运算符 C 语言概述 将变量 常量等用运算符 (operator) 连接在一起, 就构成了表达式 (expression) 运算符 : 目数 优先级 结合性 sizeof, &, * 算术运算符 :++, --, *, /, %, +, - 位运算符 :<<, >>, ~, &, ^, 关系运算符 :<, <=, >, >=, ==,!= 逻辑运算符 :!, &&, 条件运算符 :?: 赋值运算符 :=, 复合算术 / 位运算赋值 逗号运算符 11

12 12

13 输入输出语句 C 语言通过库函数来支持输入输出 输入输出 #include <stdio.h> scanf( ) 将输入读入变量 printf( ) 将变量内容输出 13

14 scanf( ) 函数 int scanf( const char *,...); 输入输出 参数可变的函数 第一个参数是格式字符串, 后面的参数是变量的地址, 函数作用是按照第一个参数指定的格式, 将数据读入后面的变量 14

15 scanf 返回值 输入输出 >0 成功读入的数据项个数 0 没有项被赋值 EOF 第一个尝试输入的字符是 EOF( 结束 ) ( 对某些题, 返回值为 EOF 可以用来判断输入数据已全部读完 ) Number of receiving arguments successfully assigned, or EOF if read failure occurs before the first receiving argument was assigned. 15

16 printf( ) 函数 输入输出 int printf( const char *,...); 参数可变的函数 第一个参数是格式字符串, 后面的参数是待输出的变量, 函数作用是按照第一个参数指定的格式, 将后面的变量在屏幕上输出 返回值 : 成功打印的字符数 返回负值为出错 16

17 格式字符串里的格式 控制符号 输入输出 %d 读入或输出 int 变量 %c 读入或输出 char 变量 %f 读入或输出 float 变量 %s 读入或输出 char * 变量 %lf 读入或输出 double 变量 %e 以科学计数法格式输出数值 %x 以十六进制读入或输出 int 变量 %I64d 读入或输出 int64 变量 (64 位整数 ) %p 输出指针地址值 %.5lf 输出浮点数, 精确到小数点后 5 位 17

18 例子 输入输出 #include <stdio.h> int main() { int a; char b; char c[20]; double d = 0; float e = 0; int n = scanf("%d%c%s%lf%f", &a, &b, c, &d, &e); printf("%d %c %s %lf %e %f %d", a, b, c, d, e, e, n); return 0; } 18

19 结果 int n = scanf("%d%c%s%lf%f", &a, &b, c, &d, &e); printf("%d %c %s %lf %e %f %d", a, b, c, d, e, e, n); 输入输出 input: 123a teststring output: 123 a teststring e input: 123ateststring output: 123 a teststring e input: 123 a teststring output: 123 a e

20 例子 输入输出 #include <stdio.h> int main() { int a, b; char c; char s[20]; int64 n = ; scanf("%d %c,%s%x%i64d", &a, &c, s, &b, &n); printf("%d %x %u %s %p %x %d %I64d", a, a, a, s, s, b, b, n); return 0; } input: -28 K,test ffee output: -28 ffffffe test 0012FF60 ffee

21 64 位整数类型 int64 输入输出 int64 是有符号 64 位整数类型, 范围为 -2^63 (-9,223,372,036,854,775,808) 到 2^63-1 (9,223,372,036,854,775,807), 存储空间占 8 字节 用于整数值可能超过 int 数据类型支持范围的情况 int64 关键字和 %I64 标号是 Microsoft 实现专有的 要用 64 位 int 的话, 标准 C(C99) 可用 long long 和 %lld 21

22 常见错误 输入输出 #include <stdio.h> int main() { char * s; scanf( %s, s); } 错在何处? 错在 s 不知道指向何处, 往其指向的地方写入数据, 不安全 22

23 读取一行 输入输出 char * gets(char * s); 从标准输入读取一行到字符串 s 如果成功, 返回值就是 s 地址 如果失败, 返回值是 NULL 可以根据返回值是 NULL 判定输入数据已经读完 调用时要确保 s 指向的缓冲区足够大, 否则可能发生内存访问错误 23

24 例子 输入输出 #include <stdio.h> int main() { char s[200]; char * p = gets(s); printf("%s:%s", s, p); return 0; } input: Welcome to Beijing! output: Welcome to Beijing!:Welcome to Beijing! 24

25 sscanf 和 sprintf 函数 输入输出 int sscanf(const char * buffer, const char * format[, address,...]); 和 scanf 的区别在于, 它是从 buffer 里读取数据 int sprintf(char *buffer, const char *format[, argument,...]); 和 printf 的区别在于, 它是往 buffer 里输出数据 25

26 例子 输入输出 #include <stdio.h> int main() { int a,b; char c; char s[20]; char szsrc[] = "-28 K,test ffee "; char szdest[200]; int64 n = ; sscanf(szsrc, "%d %c,%s%x%i64d", &a, &c, s, &b, &n); sprintf(szdest, "%d %x %u %s %p %x %d %I64d", a, a, a, s, s, b, b, n); printf("%s", szdest); return 0; } output: -28 ffffffe test 0012FF60 ffee

27 位运算 有时我们需要对某个整数类型变量中的某一位 (bit) 进行操作 比如, 判断某一位是否为 1, 或只改变其中某一位, 而保持其他位都不变 六种位运算符来进行位运算操作 : & 按位与 按位或 ^ 按位异或 ~ 取反 << 左移 >> 右移 27

28 按位与 位运算 按位与运算符 & 是双目运算符 功能是将参与运算的两操作数各对应的二进制位进行与操作, 只有对应的两个二进位均为 1 时, 结果的对应二进制位才为 1, 否则为 0 按位与运算通常用来将某变量中的某些位清 0 或保留某些位不变 28

29 按位与 位运算 如果需要将 int 型变量 n 的低 8 位全置成 0, 而其余位不变, 则可以执行 n = n & 0xffffff00; 也可以写成 : n &= 0xffffff00; 如果 n 是 short 类型的, 则只需执行 : n &= 0xff00; 如何判断一个 int 型变量 n 的第 7 位 ( 从右往左, 从 0 开始数 ) 是否是 1? 只需看表达式 n & 0x80 的值是否等于 0x80 即可 29

30 按位或 按位或运算符 " " 是双目运算符 位运算 功能是将参与运算的两操作数各对应的二进制位进行或操作, 只有对应的两个二进位都为 0 时, 结果的对应二进制位才是 0, 否则为 1 例如 : 表达式 的值是 23 21: : :

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

32 按位异或 位运算 按位异或运算符 "^" 是双目运算符 功能是将参与运算的两操作数各对应的二进制位进行异或操作, 即只有对应的两个二进位不相同时, 结果的对应二进制位才是 1, 否则为 0 例如 : 表达式 21 ^ 18 的值是 7( 即二进制数 111) 21: : ^18: 异或运算的特点 : 如果 a^b=c, 那么就有 c^b = a 以及 c^a=b 此规律可以用来进行最简单的加密和解密 32

33 按位非 位运算 按位非运算符 "~" 是单目运算符 功能是将操作数中的二进制位 0 变成 1,1 变成 0 例如, 表达式 ~21 的值是无符号整型数 0xffffffea 21: ~21: 而下面的语句 : printf("%d,%u,%x",~21,~21,~21); 输出结果就是 : -22, ,ffffffea 33

34 左移运算符 左移运算符 << 是双目运算符 位运算 计算结果是将左操作数的各二进位全部左移若干位后得到的值, 右操作数指明了要左移的位数 左移时, 高位丢弃, 低位补 0 左移运算符不会改变左操作数的值 34

35 左移运算符 位运算 例如, 常数 9 有 32 位, 其二进制表示是 : 因此, 表达式 9<<4 的值, 就是将上面的二进制数左移 4 位, 得 : 即为十进制的 144 实际上, 左移 1 位, 就等于是乘以 2, 左移 n 位, 就等于是乘以 2 n 而左移操作比乘法操作快得多 35

36 例子 位运算 #include <stdio.h> int main() { int n1 = 15; short n2 = 15; unsigned short n3 = 15; unsigned char c = 15; n1 <<= 15; n2 <<= 15; n3 <<= 15; c <<= 6; printf( "n1=%x,n2=%d,n3=%d,c=%x,c<<4=%d", n1, n2, n3, c, c << 4); } 上面程序的输出结果是 : n1=78000,n2=-32768,n3=32768,c=c0,c<<4=

37 例子 n1: n2: n3: c: 位运算 n1 <<= 15: ( 变成 78000) n2 <<= 15:,( 变成 ) n3 <<= 15: ( 变成 32768) c <<= 6; ( 变成 c0) c << 4 这个表达式是先将 c 转换成整型 然后再左移 c<<4=

38 右移运算符 位运算 右移运算符 >> 是双目运算符 计算结果是把 >> 的左操作数的各二进位全部右移若干位后得到的值, 要移动的位数就是 >> 的右操作数 移出最右边的位就被丢弃 对于有符号数, 如 long,int,short,char 类型变量, 在右移时, 符号位 ( 即最高位 ) 将一起移动, 并且大多数 C 编译器规定, 如果原符号位为 1, 则右移时高位就补充 1, 原符号位为 0, 则右移时高位就补充 0 38

39 右移运算符 位运算 对于无符号数, 如 unsigned long, unsigned int, unsigned short, unsigned char 类型的变量, 则右移时, 高位总是补 0 右移运算符不会改变左操作数的值 实际上, 右移 n 位, 就相当于左操作数除以 2 n, 并且将结果往小里取整 -25 >> 4 = -2-2 >> 4 = >> 4 = 1 39

40 例子 位运算 #include <stdio.h> int main() { int n1 = 15; short n2 = -15; unsigned short n3 = 0xffe0; unsigned char c = 15; n1 = n1>>2; n2 >>= 3; n3 >>= 4; c >>= 3; printf( "n1=%x,n2=%d,n3=%x,c=%x", n1, n2, n3, c); } 上面的程序输出结果是 : n1=3,n2=-2,n3=ffe,c=1 40

41 例子 n1: n2: n3: c: 位运算 n1 >>= 2: 变成 n2 >>= 3: 变成 n3 >>= 4: 变成 ffe c >>= 3; 变成

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

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

44 定义 函数指针 函数指针定义的一般形式为 : 类型名 (* 指针变量名 )( 参数类型 1, 参数类型 2, ); 类型名 表示被指函数的返回值的类型 ( 参数类型 1, 参数类型 2, ) 中则依次列出了被指函数的所有参数的类型 int (*pf)(int, char); 表示 pf 是一个函数指针, 它所指向的函数, 返回值类型应是 int, 该函数应有两个参数, 第一个是 int 类型, 第二个是 char 类型 44

45 调用 函数指针 可以用一个原型匹配的函数的名字给一个函数指针赋值 通过函数指针可调用它所指向的函数, 写法为 : 函数指针名 ( 实参表 ); 下面的程序说明了函数指针的用法 45

46 例子 函数指针 #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 46

47 快速排序库函数 qsort 函数指针 void qsort(void *base, int nelem, unsigned int width, int (*pfcompare)( const void *, const void *)); base 是待排序数组的起始地址, nelem 是待排序数组的元素个数, width 是待排序数组的每个元素的大小 ( 以字节为单位 ) pfcompare 是一个函数指针, 它指向一个 比较函数 该比较函数应是返回值为 int, 有两个参数为 const void * 的函数 47

48 比较函数 函数指针 排序就是一个不断比较并交换位置的过程 qsort 如何在连元素的类型是什么都不知道的情况下, 比较两个元素并判断哪个应该在前呢? 答案是,qsort 函数在执行期间, 通过 pfcompare 指针调用 比较函数, 调用时将要比较的两个元素的地址传给 比较函数, 然后根据 比较函数 返回值判断两个元素哪个更应该排在前面 这个 比较函数 不是 C/C++ 的库函数, 而是由使用 qsort 的程序员编写的 在调用 qsort 时, 将 比较函数 的名字作为实参传递给 pfcompare 48

49 比较函数 函数指针 qsort 函数的用法规定, 比较函数的原型是 int 函数名 (const void * elem1, const void * elem2); 该函数的两个参数,elem1 和 elem2, 指向待比较的两个元素 也就是说, * elem1 和 * elem2 就是待比较的两个元素 该函数必须具有以下行为 : 如果 * elem1 应该排在 * elem2 前面, 则函数返回值是负整数 ( 任何负整数都行 ) 如果 * elem1 和 * elem2 哪个排在前面都行, 那么函数返回 0 如果 * elem1 应该排在 * elem2 后面, 则函数返回值是正整数 ( 任何正整数都行 ) 49

50 例子 下面的程序, 功能是调用 qsort 库函数, 将一个 unsigned int 数组按照个位数从小到大进行排序 比如 8,23,15 三个数, 按个位数从小到大排序, 就应该是 23,15,8 函数指针 #include <stdio.h> #include <stdlib.h> int MyCompare( const void * elem1, const void * elem2 ) { unsigned int * p1, * p2; p1 = (unsigned int *) elem1; p2 = (unsigned int *) elem2; return (* p1 % 10) - (* p2 % 10 ); } 50

51 例子 函数指针 #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; } 上面程序的输出结果是 : 思考题 : 如果要将 an 数组从大到小排序, 那么 MyCompare 函数该如何编写? 51

52 C99 的一些新特性 for 语句 数组初始化 变长数组 main 函数 52

53 C99 中的 for 语句 for 语句的一般形式 : for ( expr1 ; expr2 ; expr3 ) statement 在 C99 中第一个表达式可以替换为一个声明, 用来声明一个用于循环的变量 for (int i = 0; i < n; i++) 变量 i 不需要在 for 语句之前进行声明 如果变量 i 在之前已经进行了声明, 这个语句将创建一个新的 i 且该值仅用于循环内 53

54 C99 中的 for 语句 for 语句声明的变量不可以在循环外访问 ( 在循环外不可见 ) for (int i = 0; i < n; i++) { printf("%d", i); /* legal; i is visible inside loop */ } printf("%d", i); /*** WRONG ***/ 54

55 C99 中的 for 语句 for 语句声明自己的循环控制变量使得程序可读性更强 如果在 for 循环退出之后还要使用该变量, 只能使用以前的 for 语句格式 for 语句可以声明多个变量, 只要它们的类型相同 : for (int i = 0, j = 0; i < n; i++) 55

56 C99 中的数组 数组初始化式最常见的格式是一个用大括号括起来的逗号分隔的常量表达式 int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 如果初始化式比数组短, 那么数组中剩余的元素初始化为 0 int a[10] = {1, 2, 3, 4, 5, 6}; /* initial value of a is {1, 2, 3, 4, 5, 6, 0, 0, 0, 0} */ 利用这一特性, 可以很容易把数组初始化为全 0 int a[10] = {0}; /* initial value of a is {0, 0, 0, 0, 0, 0, 0, 0, 0, 0} */ 初始化式完全为空是非法的, 所以要在大括号内放上一个 0 初始化式比数组长也是非法的 56

57 C99 中的数组 有时数组中只有较少的元素需要显式初始化, 其他元素进行默认初始化 int a[15] = {0, 0, 29, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 48}; 使用指定初始化式可以解决这个问题 int a[15] = {[2] = 29, [9] = 7, [14] = 48}; 括号中的数字称为指示符 初始化的顺序不再重要 int a[15] = {[14] = 48, [9] = 7, [2] = 29}; 对多维数组也有效, 例如创建 2x2 的单位阵 double ident[2][2] = {[0][0] = 1.0, [1][1] = 1.0}; 57

58 C99 中的数组 指示符必须是整型常量表达式 如果待初始化的数组长度是 n, 指示符的值必须在 0 和 n-1 之间 如果数组的长度是省略的, 指示符可以是任意非负整数 编译器根据最大的指示符推断出数组的长度, 下面数组有 24 个元素 int b[] = {[5] = 10, [23] = 13, [11] = 36, [15] = 29}; 初始化式中可以同时使用旧方法 ( 逐元素初始化 ) 和新方法 ( 指定初始化 ) int c[10] = {5, 1, 9, [4] = 3, 7, 2, [8] = 6}; // int c[10] = {5, 1, 9, 0, 3, 7, 2, 0, 6, 0} 58

59 对数组使用 sizeof sizeof 运算符可以确定数组的大小 ( 字节数 ) 如果数组 a 有 10 个整数, 那么 sizeof(a) 通常为 40 sizeof 可以来计算数组元素 ( 如 a[0]) 大小 用数组大小除以数组元素的大小可以得到数组的长度 sizeof(a) / sizeof(a[0]) 59

60 对数组使用 sizeof 对数组 a 清零可以写成如下形式 : for (i = 0; i < sizeof(a) / sizeof(a[0]); i++) a[i] = 0; 使用这种方法, 即使数组长度日后改变, 也不需要改变循环 有些编译器会对表达式 i < sizeof(a) / sizeof(a[0]) 给出警告消息, 这是因为 i 可能为 int 型,sizeof 返回类型为无符号的 size_t 型 for (i = 0; i < (int) (sizeof(a) / sizeof(a[0])); i++) a[i] = 0; 60

61 C99 中的变长数组 在 C89 中, 数组变量的长度必须用常量表达式进行定义 在 C99 中, 有时也可以使用非常量表达式 变长数组 (variable-length array, VLA) 的长度在程序运行时计算, 而不是在编译时 程序员不必在声明数组时给定一个长度 61

62 C99 中的变长数组 #include <stdio.h> int main(void) { int i, n; printf("how many numbers do you want to reverse? "); scanf("%d", &n); int a[n]; /* C99 only - length of array depends on n */ printf("enter %d numbers: ", n); for (i = 0; i < n; i++) scanf("%d", &a[i]); printf("in reverse order:"); for (i = n - 1; i >= 0; i--) printf(" %d", a[i]); printf("\n"); return 0; } 62

63 C99 中的变长数组 变长数组的长度可以是任意整型表达式 ( 可以包含运算符 ) int a[3*i+5]; int b[j+k]; 变长数组也可以是多维数组 : int c[m][n]; 变长数组的限制 : 没有静态存储期 没有初始化式 C99 不允许 goto 语句绕过变长数组的声明 POJ 不支持变长数组 (VC2008/GCC4.4.0) 63

64 main 函数 一般地,main 函数的返回类型是 int: int main(void) { } 旧式的 C 程序经常省略 main 的返回类型, 假定默认为 int: main() { } 在 C99 中省略 main 的返回类型是非法的 在 main 的形参列表中省略 void 仍然是合法的, 但最好加上它 64

65 程序终止 main 函数返回的值是状态码, 在某些操作系统中程序终止时可以检测到状态码 返回 0, 程序正常终止 返回非 0, 表示异常终止 尽量保证每个 C 程序都返回状态码 65

66 exit 函数 在 main 函数中执行 return 语句是终止程序的一种方法 另一种方法是调用 exit 函数, 该函数属于 <stdlib.h> 传递给 exit 函数的实参与 main 函数的返回值具有相同的含义 : 两者都说明程序终止时的状态 为了表示正常终止, 传递 0: exit(0); /* normal termination */ 66

67 exit 函数 exit 函数 既然 0 含义有些模糊,C 语言允许使用 EXIT_SUCCESS 来代替 ( 效果是相同的 ): exit(exit_success); 传递 EXIT_FAILURE 表示异常终止 : exit(exit_failure); EXIT_SUCCESS 和 EXIT_FAILURE 是定义在 <stdlib.h> 中的宏 EXIT_SUCCESS 和 EXIT_FAILURE 的值是由实现所定义, 通常分别是 0 和 1 67

68 exit 函数 main 函数中的语句 return expression; 等价于 exit(expression); return 语句和 exit 函数之间的差异 : 不管哪个函数调用 exit 函数都会导致程序终止 return 语句仅当由 main 函数调用时才会导致程序终止 68

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

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

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

72 C 语言标准库函数 数学库函数 math.h 字符处理函数 ctype.h 字符串处理与内存操作函数 string.h 字符串转换函数 stdlib.h 72

73 数学库函数 标准库函数 数学库函数声明在 math.h 中, 主要有 : abs(x) 求整型数 x 的绝对值 cos(x) x( 弧度 ) 的余弦 fabs(x) 求浮点数 x 的绝对值 ceil(x) 求不小于 x 的最小整数 floor(x) 求不大于 x 的最小整数 log(x) 求 x 的自然对数 log10(x) 求 x 的对数 ( 底为 10) pow(x,y) 求 x 的 y 次方 sin(x) 求 x( 弧度 ) 的正弦 sqrt(x) 求 x 的平方根 73

74 字符处理函数 标准库函数 在 ctype.h 中声明, 主要有 : int isdigit(int c) 判断 c 是否是数字字符 int isalpha(int c) 判断 c 是否是一个字母 int isalnum(int c) 判断 c 是否是一个数字或字母 int islower(int c) 判断 c 是否是一个小写字母 int isupper(int c) 判断 c 是否是一个大写字母 int toupper(int c) 如果 c 是一个小写字母, 则返 回其大写字母 int tolower (int c) 如果 c 是一个大写字母, 则返 回其小写字母 74

75 字符串和内存操作函数 标准库函数 字符串和内存操作函数声明在 string.h 中, 常用的有 : char * strchr(char * s, int c) 如果 s 中包含字符 c, 则返回一个指向 s 第一次出现的该字符的指针, 否则返回 NULL char * strstr(char * s1, char * s2) 如果 s2 是 s1 的一个子串, 则返回一个指向 s1 中首次出现 s2 的位置的指针, 否则返回 NULL char * strlwr(char * s) 将 s 中的字母都变成小写 char * strupr( char * s) 将 s 中的字母都变成大写 char * strcpy( char * s1, char * s2) 将字符串 s2 的内容拷贝到 s1 中去 char * strncpy( char * s1, char * s2,int n) 将字符串 s2 的内容拷贝到 s1 中去, 但是最多拷贝 n 个字节 如果拷贝字节数达到 n, 那么就不会往 s1 中写入结尾的 \0 75

76 字符串和内存操作函数 标准库函数 char * strcat( char * s1, char * s2) 将字符串 s2 添加到 s1 末尾 int strcmp( char * s1, char * s2) 比较两个字符串, 大小写相关 如果返回值小于 0, 则说明 s1 按字典顺序在 s2 前面 ; 返回值等于 0, 则说明两个字符串一样 ; 返回值大于 0, 则说明 s1 按字典顺序在 s2 后面 int stricmp( char * s1, char * s2) 比较两个字符串, 大小写无关 其他和 strcmp 同 int strlen(const char * string) 计算字符串的长度 void * memcpy( void * s1, void * s2, int n) 将内存地址 s2 处的 n 字节内容拷贝到内存地址 s1 void * memset( void * s, int c, int n) 将内存地址 s 开始的 n 个字节全部置为 c 76

77 字符串转换函数 标准库函数 有几个函数, 可以完成将字符串转换为整数, 或将整数转换成字符串等这类功能 它们定义在 stdlib.h 中 : int atoi(char *s) 将字符串 s 里的内容转换成一个整型数返回 比如, 如果字符串 s 的内容是 "1234", 那么函数返回值就是 1234 double atof(char *s) 将字符串 s 中的内容转换成浮点数 77

78 字符串转换函数 标准库函数 char *itoa(int value, char *string, int radix); 将整型值 value 以 radix 进制表示法写入 string 比如 : char szvalue[20]; itoa( 32, szvalue, 10); 则使得 szvalue 的内容变为 32 itoa( 32, szvalue, 16); 则使得 szvalue 的内容变为 20 78

79 动态内存分配 C 语言的数据结构, 例如数组, 通常是固定大小的 因为在写程序时强制选择了大小, 所以固定大小的数据结构可能会有问题 C 语言支持动态内存分配 (dynamic storage allocation): 在程序执行期间分配内存的能力 利用动态内存分配, 可以设计根据需要扩大 ( 和缩小 ) 的数据结构 79

80 动态内存分配 动态内存分配主要用于字符串 数组和结构体 动态分配的结构体可以链接形成链表 树或其他数据结构 为了动态分配内存, 需要调用内存分配函数 80

81 内存分配函数 动态内存分配 <stdlib.h> 头文件声明了三个内存分配函数 : malloc 分配内存块, 但不进行初始化 calloc 分配内存块, 并对内存块进行清零 realloc 调整先前分配的内存块大小 这些函数返回 void *( 通用指针 ) 类型的值 81

82 空指针 动态内存分配 如果内存分配函数无法分配所需大小的内存块, 函数会返回空指针 空指针是能区别于所有有效指针的特殊值 在把函数返回值存储到指针变量后, 需要检查该指针变量是否为空指针 82

83 空指针 动态内存分配 测试 malloc 函数返回值的例子 : p = malloc(10000); if (p == NULL) { /* allocation failed; take appropriate action */ } NULL 是一个宏, 表示空指针 一些程序员把 malloc 函数的调用和 NULL 的测试组合在一起 : if ((p = malloc(10000)) == NULL) { /* allocation failed; take appropriate action */ } 83

84 空指针 动态内存分配 指针测试真假的方法和数的测试一样 : 所有非空指针都为真, 而只有空指针为假 语句 if (p == NULL) 可以写成 if (!p) 而语句 if (p!= NULL) 则可以写成 if (p) 84

85 动态分配字符串 动态内存分配 动态内存分配对字符串操作非常有用 字符串存储在字符数组中, 而且可能很难预测这些数组需要的长度 通过动态分配字符串, 可以推迟到程序运行时才作决定 85

86 用 malloc 为字符串分配内存 动态内存分配 malloc 函数具有如下原型 : void *malloc(size_t size); malloc 函数分配 size 个字节的内存块, 并返回指向该内存块的指针 size_t 是在 C 库中定义的无符号整数类型 86

87 用 malloc 为字符串分配内存 动态内存分配 为给 n 个字符的字符串分配内存空间, 可以写成 : p = malloc(n + 1); 这里,p 是一个 char * 类型变量 每个字符需要一个字节的内存,n+1 给空字符留了空间 一些程序员喜欢对 malloc 函数的返回值进行强制类型转换, 但这个转换不是必需的 : p = (char *) malloc(n + 1); 87

88 用 malloc 为字符串分配内存 动态内存分配 使用 malloc 函数分配的内存不会清零, 所以 p 指向有 n+1 个字符的未初始化数组 : 88

89 用 malloc 为字符串内存分配 动态内存分配 对该数组进行初始化的一种方法是调用 strcpy 函数 : strcpy(p, "abc"); 数组中的前 4 个字符分别是 a, b, c, 和 \0: 89

90 在字符串函数中使用动态内存分配 动态内存分配 动态内存分配使编写返回指向 新 字符串的指针的函数成为可能 考虑编写函数把两个字符串连接起来而不改变其中任何一个字符串 度量待连接的两个字符串的长度, 然后调用 malloc 函数为结果分配适当大小的内存空间 把第一个字符串复制到新的内存空间中 调用 strcat 函数来拼接第二个字符串 90

91 在字符串函数中使用动态内存分配 动态内存分配 char *concat(const char *s1, const char *s2) { char *result; } result = malloc(strlen(s1) + strlen(s2) + 1); if (result == NULL) { printf("error: malloc failed in concat\n"); exit(exit_failure); } strcpy(result, s1); strcat(result, s2); return result; 91

92 在字符串函数中使用动态内存分配 动态内存分配 concat 函数可能的调用方式 : p = concat("abc", "def"); 调用后,p 将指向字符串 abcdef, 此字符串存储在动态分配数组中 像 concat 这样的动态分配内存的函数必须小心使用 当不在需要 concat 函数返回的字符串是, 需要调用 free 函数来释放它占用的空间 如果不这样做, 程序最终会耗光内存 92

93 动态分配数组 动态内存分配 动态分配数组有和动态分配字符串相同的好处 数组和指针间的紧密联系是的动态分配数组用起来像普通数组一样简单 尽管 malloc 函数可以为数组分配内存空间, 但有时会用 calloc 函数代替, 因为 calloc 函数会初始化分配的内存 realloc 函数允许根据需要对数组进行扩展或缩减 93

94 用 malloc 为数组分配内存 动态内存分配 假定程序需要一个由 n 个整数构成的数组, 这里 n 可以在程序运行时计算出来 首先声明指针变量 : int *a; 一旦 n 的值已知了, 程序调用 malloc 函数为数组分配存储空间 : a = malloc(n * sizeof(int)); 始终使用 sizeof 运算符来计算每个数组元素所需的空间大小 94

95 用 malloc 为数组分配内存 动态内存分配 可以忽略 a 是指针的事实, 把它当作数组名来使用 例如, 可以使用下列循环对 a 指向的数组进行初始化 : for (i = 0; i < n; i++) a[i] = 0; 当然用指针算术运算代替下标操作来访问数组元素也是可行的 95

96 calloc 函数 动态内存分配 calloc 函数也可以用来为数组分配内存 calloc 函数的原型为 : void *calloc(size_t nmemb, size_t size); calloc 函数的性质 : 为 nmemb 个元素的数组分配内存, 每个元素有 size 个字节长 如果请求的空间不足, 返回空指针 通过把所有位设置为 0 的方式进行初始化 96

97 calloc 函数 动态内存分配 下列 calloc 函数调用为 n 个整数的数组分配存储空间 : a = calloc(n, sizeof(int)); 通过调用以 1 为第一个实参的 calloc 函数, 可以为任何类型的数据项来分配空间 : struct point { int x, y; } *p; p = calloc(1, sizeof(struct point)); 97

98 realloc 函数 动态内存分配 realloc 函数可以调整动态分配数组的大小 realloc 函数的原型为 : void *realloc(void *ptr, size_t size); ptr 必须指向先前通过调用 malloc calloc 或 realloc 函数获得的内存块 size 表示内存块的新尺寸, 新尺寸可能大于或小于原有尺寸 98

99 realloc 函数 动态内存分配 realloc 函数的性质 : 当扩展内存块时,realloc 函数不会对添加进内存块的字节进行初始化 如果 recalloc 函数不能按要求扩大内存块, 那么返回空指针, 且原有内存块中数据不变 如果 realloc 函数被调用时, 以空指针作为第一个实参, 则行为类似于 malloc 函数 如果 realloc 函数被调用时, 以 0 作为第二个实参, 那么它会释放掉内存块 99

100 realloc 函数 动态内存分配 希望 realloc 函数非常高效 : 在要求减小内存块大小时,realloc 函数应该在原先的内存块上就地进行缩减 同理, 扩大内存块时也不应该对其进行移动 如果无法就地扩大内存块,realloc 函数会在别处分配新的内存块, 然后把旧块中内容复制到新块中 一旦 realloc 函数返回, 一定要对指向内存块的所有指针进行更新, 因为内存块可能被移动了 100

101 释放内存 动态内存分配 malloc 和其他内存分配函数所获得的内存块来自一个称为堆 (heap) 的存储池 过于频繁地调用这些函数 ( 或让这些函数申请大内存块 ) 可能会耗尽堆, 导致这些函数返回空指针 更糟的是, 程序可能分配了内存块, 然后又丢失了对这些块的记录, 从而浪费了空间 101

102 释放内存 动态内存分配 例如 : p = malloc( ); q = malloc( ); p = q; 在执行完前两条语句后,p 和 q 分别指向一个内存块 : 102

103 释放内存 动态内存分配 在把 q 赋值给 p 后, 两个指针都指向了第二个内存块 : 没有指针指向第一个内存块, 因此再也不能使用此内存块了 103

104 释放内存 动态内存分配 对程序而言, 不可再访问到的内存块被称为垃圾 (garbage) 留有垃圾的程序存在内存泄漏 (memory leak) 一些语言提供垃圾收集器, 用于垃圾的自动定位和回收, 但 C 语言不提供 相反, 每个 C 程序负责回收各自的垃圾, 方法是调用 free 函数来释放不需要的内存 104

105 free 函数 动态内存分配 free 函数在 <stdlib.h> 中有如下原型 : void free(void *ptr); 把指向不再需要的内存块的指针传递给 free 函数 : p = malloc( ); q = malloc( ); free(p); p = q; 调用 free 函数会释放 p 所指向的内存块 105

106 悬空指针问题 动态内存分配 使用 free 函数会导致一个新问题 : 悬空指针 (dangling pointer) free(p) 释放 p 指向的内存块, 但不会改变 p 自身 如果忘记了 p 不再指向有效内存块, 可能导致问题 : char *p = malloc(4); free(p); strcpy(p, "abc"); /*** WRONG ***/ 修改 p 指向的内存可能导致严重的错误 106

107 悬空指针问题 动态内存分配 一种解决方案 :free 后, 把指针置为空 free(p); p = NULL; 悬空指针有时很难被发现, 因为几个指针可能指向相同的内存块 在释放内存块后, 所有的指针都悬空了 107

108 编程题 3718: 给定两个 unsigned short 类型整数, 判断一个是否能由另一个经过循环左移若干位得到 3719: 将输入的学生信息按姓名排序后输出 2677: 肿瘤检测 109

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

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

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

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

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

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

More information

附錄C.doc

附錄C.doc C C C-1 C -2 C -3 C -4 C -5 / C -6 2 C/C++ C-1 FILE* fopen(const char* filename, const char* mode) filename NULL FILE* freopen(const

More information

FY.DOC

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

More information

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

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

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

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

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

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

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

int *p int a 0x00C7 0x00C7 0x00C int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++; Memory & Pointer trio@seu.edu.cn 2.1 2.1.1 1 int *p int a 0x00C7 0x00C7 0x00C7 2.1.2 2 int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++; 2.1.3 1. 2. 3. 3 int A,

More information

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

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

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

( 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

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

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

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

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

PowerPoint Presentation

PowerPoint Presentation 程序设计 II 第 4 讲字符串处理 计算机学院黄章进 zhuang@ustc.edu.cn 内容 字符串处理函数 例题 :Caesar 密码 2767 例题 : 单词排序 例题 : 子串 2744 例题 :All in All 2976 2 字符串 每个字符串是一个特殊的数组, 满足两个条件 元素的类型为 char 最后一个元素的值为 '\0',Ascii 码就是 0 以字符型数组存储 从 0 号元素开始存储

More information

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

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

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

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

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

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

PowerPoint 演示文稿

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

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

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

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

文件

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

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

第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

一 关于内存 数据存储 变量分类 局部变量 全局变量 静态变量 请看下面代码, 分析变量类型? 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

Searching and Sorting

Searching and Sorting Introduction to Programming ( 數 ) Lecture 11 Spring 2005 May 27, 2004 NCCU C prog. 1 Topics Review More on Structures Unions Dynamic Memory Allocation Linked list, Queue NCCU C prog. 2 Structure in 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

全国计算机技术与软件专业技术资格(水平)考试

全国计算机技术与软件专业技术资格(水平)考试 全 国 计 算 机 技 术 与 软 件 专 业 技 术 资 格 ( 水 平 ) 考 试 2008 年 上 半 年 程 序 员 下 午 试 卷 ( 考 试 时 间 14:00~16:30 共 150 分 钟 ) 试 题 一 ( 共 15 分 ) 阅 读 以 下 说 明 和 流 程 图, 填 补 流 程 图 中 的 空 缺 (1)~(9), 将 解 答 填 入 答 题 纸 的 对 应 栏 内 [ 说 明

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

程序设计导引及在线实践

程序设计导引及在线实践 程序设计导引及在线 实 践 李文新郭炜余华山 北京大学信息科学技术学院二零零七年一月 目录序...5 前言...7 致谢...9 第一章 C/C++ 语言概述...10 1.1 程序的基本框架...10 1.2 变量...11 1.2.1 变量的定义...11 1.2.2 变量的赋值...11 1.2.3 变量的引用...12 1.3 C/C++ 语言的数据类型...12 1.4 常量...14

More information

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

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

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

内 容 提 要 指 针 持 久 动 态 内 存 分 配 字 符 串 ( 字 符 数 组 ) 2

内 容 提 要 指 针 持 久 动 态 内 存 分 配 字 符 串 ( 字 符 数 组 ) 2 第 六 讲 指 针 与 字 符 串 1 内 容 提 要 指 针 持 久 动 态 内 存 分 配 字 符 串 ( 字 符 数 组 ) 2 指 针 什 么 是 指 针 指 针 的 定 义 与 运 算 指 针 与 一 维 数 组 指 针 数 组 行 指 针 与 二 维 数 组 指 针 与 引 用 指 针 与 函 数 3 指 针 定 义 什 么 是 指 针 指 针 变 量, 简 称 指 针, 用 来 存 放

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

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

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

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc References (Section 5.2) Hsuan-Tien Lin Deptartment of CSIE, NTU OOP Class, March 15-16, 2010 H.-T. Lin (NTU CSIE) References OOP 03/15-16/2010 0 / 22 Fun Time (1) What happens in memory? 1 i n t i ; 2

More information

PTR89 应用程序编程接口 V1.00

PTR89 应用程序编程接口 V1.00 PTR89 便携式热敏打印机 应用程序编程接口 V1.00 如有任何更改, 恕不另行通知 目录 1.0. 简介... 3 1.1. 文档范围和限制... 3 1.2. 参考... 3 2.0. 数据结构... 4 2.1. PRT_PAGE_MODE_PARAM... 4 3.0. API 函数... 5 3.1. Printer_Open... 5 3.2. Printer_Close... 5

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

c语言面试题总结.doc

c语言面试题总结.doc 参考 : C/C++ 程序员面试指南 杨国祥等编著电子工业出版社 编程规范 1 头文件内有时会定义一些类, 结构体等, 如果被包含多次, 将会出现类型重定义的错误, 所以通常使用预处理指令来解决这个问题 #ifndef 标识 #define 标识. #endif 标识在理论上是可以自由命名的, 但每个头文件的这个标识都应该是唯一的, 标识的命名的规则一般是头文件名全大写, 前后加下划线, 并把头文件中的.

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

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

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

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

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

Microsoft Word - 01.DOC

Microsoft Word - 01.DOC 第 1 章 JavaScript 简 介 JavaScript 是 NetScape 公 司 为 Navigator 浏 览 器 开 发 的, 是 写 在 HTML 文 件 中 的 一 种 脚 本 语 言, 能 实 现 网 页 内 容 的 交 互 显 示 当 用 户 在 客 户 端 显 示 该 网 页 时, 浏 览 器 就 会 执 行 JavaScript 程 序, 用 户 通 过 交 互 式 的

More information

没有幻灯片标题

没有幻灯片标题 第 2 章 C 语言的基本数据类型与表达 式 2. 1 C 语言的语法基础 2. 2 C 语言的基本数据类型 2. 3 常量和变量 2. 4 运算符与表达式 2. 5 数据类型转换 用 第 2 章 C 语言的基本数据类型与表达 2.1 C 语言的语法基础 2. 1. 1 C 语言字符集 式 C 语言的基本符号可分 4 个类, 归纳如下 : (1) 英文字母 : 大小写各 26 个, 共计 52 个

More information

C/C++ System Program Documentation

C/C++ System Program Documentation C/C++ System Program Documentation 发布 1.0.0 HappyAnony 2018 年 06 月 22 日 Contents 1 目录 1 1.1 概述简介............................................... 1 1.2 语法基础...............................................

More information

untitled

untitled 1 5 IBM Intel 1. IBM 第 1/175 页 第 2/175 页 第 3/175 页 80 第 4/175 页 2. IBM 第 5/175 页 3. (1) 第 6/175 页 第 7/175 页 第 8/175 页 = = 第 9/175 页 = = = = = 第 10/175 页 = = = = = = = = 3. (2) 第 11/175 页 第 12/175 页 第 13/175

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

ch02_Basic

ch02_Basic 主要内容 C++ 语言概述 C++ 的发展 C++ 源程序结构与书写规范 C++ 编译器和集成开发环境 C++ 编程基础 数据的简单输入输出 2 C++ 语言概述 C++ 语言概述 C++ 的发展 - C++ 是从 C 语言发展演变而来, 可以看成是 C 的超集 - 1980 年由 Bjarne Stroustrup 开发创建 - 1983 年正式取名为 C++,1989 年开始 C++ 的标准化工作

More information

C PICC C++ C++ C C #include<pic.h> C static volatile unsigned char 0x01; static volatile unsigned char 0x02; static volatile unsigned cha

C PICC C++ C++ C C #include<pic.h> C static volatile unsigned char 0x01; static volatile unsigned char 0x02; static volatile unsigned cha CYPOK CYPOK 1 UltraEdit Project-->Install Language Tool: Language Suite----->hi-tech picc Tool Name ---->PICC Compiler Executable ---->c:hi-picinpicc.exe ( Command-line Project-->New Project-->File Name--->myc

More information

3.1 num = 3 ch = 'C' 2

3.1 num = 3 ch = 'C' 2 Java 1 3.1 num = 3 ch = 'C' 2 final 3.1 final : final final double PI=3.1415926; 3 3.2 4 int 3.2 (long int) (int) (short int) (byte) short sum; // sum 5 3.2 Java int long num=32967359818l; C:\java\app3_2.java:6:

More information

<4D F736F F D20CBB6CABFD1D0BEBFC9FAC8EBD1A7BFBCCAD4B4F3B8D92D383835B3CCD0F2C9E8BCC62E646F63>

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

More information

关于编写硕士研究生入学考试自命题初试科目

关于编写硕士研究生入学考试自命题初试科目 华北水利水电大学 2019 年硕士研究生入学考试初试科目考试大纲 农业综合知识三 ( 科目代码 :341) 考试大纲 考试形式和试卷结构一 试卷分值及考试时间考试时间 180 分钟 (3 个小时 ), 满分 150 分二 考试基本要求本考试大纲适用于报考华北水利水电大学农业工程与信息技术专业硕士研究生入学考试, 该科目包括 : 数据库 c 语言程序设计 计算机网络三部分内容 三 试卷内容及结构数据库部分占

More information

Microsoft PowerPoint - 20-string-s.pptx

Microsoft PowerPoint - 20-string-s.pptx String 1 String/ 1.: char s1[10]; char *s2; char s3[] = "Chan Tai Man"; char s4[20] = "Chan Siu Ming"; char s5[]={'h','e','l','l','o','\0'; 0 1 2 3 4 5 6 7 8 9 10 11 12 s3 C h a n T a i \0 M a n \0 printf

More information

1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10

1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10 Java V1.0.1 2007 4 10 1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10 6.2.10 6.3..10 6.4 11 7.12 7.1

More information

Microsoft Word - MAN2023A_CH_APPONE.doc

Microsoft Word - MAN2023A_CH_APPONE.doc AT91 softpack 1.5 代码解读 基于 SAM7X EK 综合应用代码解读 文档编号 文档版本 Rev. A 文档摘要 基于 AT91SAM7X EK 开发板的代码解读,GPIO H161T01 代码解读 关键词 AT91SAM7X256 系统板 创建日期 2010 07 14 创建人员 Cust126 审核人员 Robin 文档类型 公开发布 / 开发板配套文件 版权信息 Mcuzone

More information

第4章 栈和队列

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

More information

第一章 绪论

第一章 绪论 C++ 语言程序设计 第二章 C++ 简单程序设计 中国科大 黄章进 本章主要内容 C++ 语言概述 基本数据类型和表达式 数据的输入与输出 算法的基本控制结构 自定义数据类型 深度探索 2 C++ 语言的产生 C++ 语言概述 C++ 是从 C 语言发展演变而来的, 首先是一个更好的 C 引入了类的机制, 最初的 C++ 被称为 带类的 C 1983 年正式取名为 C++ 从 1989 年开始 C++

More information

Microsoft Word - 09.數學136-281.docx

Microsoft Word - 09.數學136-281.docx 136. 計 算 梯 型 面 積 (1 分 ) 請 以 JAVA 運 算 式 計 算 下 面 梯 形 面 積, 並 輸 出 面 積 結 果 梯 形 面 積 公 式 為 :( 上 底 + 下 底 ) 高 2 每 一 組 依 序 分 別 輸 入 梯 形 的 上 底 下 底 及 高 的 整 數 輸 出 梯 形 面 積 輸 入 輸 出 94 190 120 99 54 47 137. 計 算 三 角 形 面

More information

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

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

More information

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

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.07.doc 2 5 8 11 0 1. 13 2. 15 3. 18 1 1. 22 2. 25 3. 27 2 1. 35 2. 38 3. 41 4. 43 5. 48 6. 50 3 1. 56 2. 59 3. 63 4. 65 5. 69 13 22 35 56 6. 74 7. 82 8. 84 9. 87 10. 97 11. 102 12. 107 13. 111 4 114 1. 114 2.

More information

Historical Fund Prices_TC_mt_2017.pdf

Historical Fund Prices_TC_mt_2017.pdf 1. (i) (ii) 2. 5 1 3. 4. 5. 65 65 / 6. 7. / 8. 03/04/2017 19.1857 17.7658 16.8445 13.6299 11.6134 15.8544 20.1994 15.5516 7.3412 19.6477 9.6339 12.8183 11.3199 10.0279 12.8949 13.6338 10.0000 10.0000 05/04/2017

More information

设计模式 Design Patterns

设计模式 Design Patterns 丁勇 Email:18442056@QQ.com 学习目标 描述 JSP 表达式语言的语法 认识使用 JSP 表达式的优点 在 JSP 中使用表达式语言 表达式语言简介 5 1 EL 为表达式语言 由两个组开发 JSP 标准标签库专家组 JSP 2.0 专家组 JSP 表达式语言的语法 ${EL Expression} JSP EL 表达式用于以下情形 静态文本 标准标签和自定义标签 表达式语言简介

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

第二章 C++简单程序设计

第二章 C++简单程序设计 第二章 C++ 语言 本章主要内容 C++ 语言概述 基本数据类型 运算表达式 算法的基本控制结构 自定义数据类型 2 C++ 语言的产生 C++ 语言概述 C++ 是从 C 语言发展演变而来的, 首先是一个更好的 C 引入了类的机制, 最初的 C++ 被称为 带类的 C 1983 年正式取名为 C++ 从 1989 年开始 C++ 语言的标准化工作 于 1994 年制定了 ANSI 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

static struct file_operations gpio_ctl_fops={ ioctl: gpio_ctl_ioctl, open : gpio_open, release: gpio_release, ; #defineled1_on() (GPBDAT &= ~0x1) #def

static struct file_operations gpio_ctl_fops={ ioctl: gpio_ctl_ioctl, open : gpio_open, release: gpio_release, ; #defineled1_on() (GPBDAT &= ~0x1) #def Kaise s 2410 Board setting [1]. Device Driver Device Driver Linux s Kernel ARM s kernel s3c2410_kernel2.4.18_r1.1_change.tar.bz2 /usr/src (1) #cd /usr/src (2) #tar xfj s3c2410_kernel2.4.18_r1.1_change.tar.bz2

More information

ebook39-5

ebook39-5 5 3 last-in-first-out, LIFO 3-1 L i n e a r L i s t 3-8 C h a i n 3 3. 8. 3 C + + 5.1 [ ] s t a c k t o p b o t t o m 5-1a 5-1a E D 5-1b 5-1b E E 5-1a 5-1b 5-1c E t o p D t o p D C C B B B t o p A b o

More information

第3章 Java语言基础

第3章 Java语言基础 第 3 章 Java 语言基础 第 1/55 页 习题 3 3. 8. 9. 13. 18. 实验 : 1. 实验 4( 实 P11~12) 2. 实验任务 : 1 例 3.1( 教 P30) 2 变量赋值 ( 教 P29) 3 编写两个缓冲区对应同一个输入流对象, 并键盘输入整型 a 和双精度 b, 求和 第 2/55 页 习题 3 3. 实验任务 : 1 实验 5( 实 P12~13) 2 实验

More information

C, Win-TC Turbo C,, C, C,,,, C C, : Win-TC C, 23,,, 15,, C Turbo C Win-TC Turbo C,,,, 2005 1 W in -TC 1 Win-TC 1 1. Win-TC 1 2. Win-TC 1 3. Win-TC 1 2 Win-TC 3 1. 3 2. 3 3. 4 4. 4 5. 4 6. 4 7. 5 8. 5 9.

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

第5章修改稿

第5章修改稿 (Programming Language), ok,, if then else,(), ()() 5.0 5.0.0, (Variable Declaration) var x : T x, T, x,,,, var x : T P = x, x' : T P P, () var x:t P,,, yz, var x : int x:=2. y := x+z = x, x' : int x' =2

More information

STRUCT Tag OptTag ID Tag ID 7..4 Declarators VarDec ID VarDec LB INT RB FunDec ID LP VarList RP ID LP RP VarList ParamDec COMMA VarList ParamDec Param

STRUCT Tag OptTag ID Tag ID 7..4 Declarators VarDec ID VarDec LB INT RB FunDec ID LP VarList RP ID LP RP VarList ParamDec COMMA VarList ParamDec Param 7. 附录 A:C 语言文法 在本附录中, 我们给出 C 语言的文法定义和补充说明 7. 文法定义 7.. Tokens INT /* A sequence of digits without spaces */ FLOAT /* A real number consisting of digits and one decimal point. The decimal point must be surrounded

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

<4D F736F F F696E74202D20B5DA32D5C220B5A5C6ACBBFA433531D3EFD1D4BBF9B4A1>

<4D F736F F F696E74202D20B5DA32D5C220B5A5C6ACBBFA433531D3EFD1D4BBF9B4A1> 第 2 章 单片机 C51 语言基础 2.1 C51 语言的基本知识 2.2 运算符与表达式 2.3 指针与绝对地址访问 2.4 本章小结 2.5 实训二发光二极管流水广告灯 返回首页 教学提示 随着单片机开发技术的不断发展, 目前已有越来越多 的人从普遍使用汇编语言逐渐过渡到使用高级语言开发, 其中又以 C 语言为主, 市场上几种常见的单片机均有其 C 语言开发环境 应用于 51 系列单片机开发的

More information

Chinese Translation of the C FAQ

Chinese Translation of the C FAQ C Steve Summit, 0.9.3, 2005 5 18 c 2005 C FAQ (2004 7 3 ) Steve Summit The English version of this FAQ list is Copyright 1990-2004 by Steve Summit. Content from the book C Programming FAQs: Frequently

More information

Microsoft Word - 第3章.doc

Microsoft Word - 第3章.doc 第 3 章流程控制和数组 3.1 实验目的 (1) 熟练掌握控制台应用程序的代码编写和调试, 以及运行方法 (2) 掌握选择结构的一般语法格式和应用 (3) 掌握 switch 语句的用法 (4) 掌握选择结构的嵌套的用法, 能灵活使用选择结构解决实际问题 (5) 掌握 while 循环语句的一般语法格式 (6) 掌握 for 循环语句的一般语法格式 (7) 掌握循环嵌套的语法格式 (8) 掌握一维数组的定义

More information

Microsoft Word - 文前.doc

Microsoft Word - 文前.doc 普通高等教育 十二五 规划教材中国科学院教材建设专家委员会规划教材 C 语言程序设计 何丽余平主编 胡勇刘云杰陈勇副主编 北京 内容简介 本书根据教育部计算机基础课程教学指导分委员会制定的 高级语言程序设计 课程的教学基本要求和全国高等学校非计算机专业学生计算机等级考试教学大纲要求, 以 C 语言为主要内容, 介绍了结构化程序设计的方法 本书主要内容有 C 语言概述 C 语言程序基础 结构化程序设计

More information

学习MSP430单片机推荐参考书

学习MSP430单片机推荐参考书 MSP430 16 MSP430 C MSP430 C MSP430 FLASH 16 1 CPU 16 ALU 16 PC SP SR R4~R15 2 3 00-FFH 100-1FFH 4 5 1 2 51 24 27 6 1 2 3 4 5 6 4 12 SR SP SR CPU SR CPU C Z N GIE CPUOff CPU OscOff SCG0 SCG1 CPU EXIT SP

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

PowerPoint Presentation

PowerPoint Presentation USTC Chapter 27 The C Programming Language 王子磊 (Zilei Wang) Email: zlwang@ustc.edu.cn http://vim.ustc.edu.cn Overview 本章从 C++ 的角度对 C 进行最简单的介绍 如果要使用 C, 请阅读 K&R 或其它书籍 C 是 C++ 最相关的, 在很多领域是兼容的, 因此, 已有的 C++

More information

在挑选合适的 SDK 的时候需要注意, 标准 windows 平台应用选择 FBX SDK VS2015,windows 应用商店和全平台通用的不用考虑 windows 全平台通用的应用是 windows10 新推出的功能, 可以打通 windows phone windows s

在挑选合适的 SDK 的时候需要注意, 标准 windows 平台应用选择 FBX SDK VS2015,windows 应用商店和全平台通用的不用考虑 windows 全平台通用的应用是 windows10 新推出的功能, 可以打通 windows phone windows s FBX SDK 安装配置 访问 FBX 网址 :http://www.autodesk.com/products/fbx/overview, 如下 : 点击 GET FBX SDK 进入 SDK 下载页面 ( 网址为 : http://usa.autodesk.com/adsk/servlet/pc/item?siteid=123112&id=25408427): 在挑选合适的 SDK 的时候需要注意,

More information

迅速在两个含有大量数据的文件中寻找相同的数据

迅速在两个含有大量数据的文件中寻找相同的数据 迅速在两个含有大量数据的文件中寻找相同的数据 求解问题如下 : 在本地磁盘里面有 file1 和 file2 两个文件, 每一个文件包含 500 万条随机整数 ( 可以重复 ), 最大不超过 2147483648 也就是一个 int 表示范围 要求写程序将两个文件中都含有的整数输出到一个新文件中 要求 : 1. 程序的运行时间不超过 5 秒钟 2. 没有内存泄漏 3. 代码规范, 能要考虑到出错情况

More information

Important Notice SUNPLUS TECHNOLOGY CO. reserves the right to change this documentation without prior notice. Information provided by SUNPLUS TECHNOLO

Important Notice SUNPLUS TECHNOLOGY CO. reserves the right to change this documentation without prior notice. Information provided by SUNPLUS TECHNOLO Car DVD New GUI IR Flow User Manual V0.1 Jan 25, 2008 19, Innovation First Road Science Park Hsin-Chu Taiwan 300 R.O.C. Tel: 886-3-578-6005 Fax: 886-3-578-4418 Web: www.sunplus.com Important Notice SUNPLUS

More information

chap12.ppt

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

More information

<4D F736F F F696E74202D20B5DA3135BDB25FB8DFBEABB6C8BCC6CBE32E BBCE6C8DDC4A3CABD5D>

<4D F736F F F696E74202D20B5DA3135BDB25FB8DFBEABB6C8BCC6CBE32E BBCE6C8DDC4A3CABD5D> 程序设计实习 (II): 算法设计 第十五讲高精度计算 通知 ACM 校内赛推迟 1 小时开赛 每周上机练习 (2 小时限时 ) 大作业 四色图 3 人一组, 不允许单人参加 http://www.botzone.org 1 次练习 +4 次比赛 Name Game Start Time 第四次比赛 ( 权重 40) fourcolours(no.4) 2012-06-02 06 02 22:00

More information