第4章 栈和队列

Size: px
Start display at page:

Download "第4章 栈和队列"

Transcription

1 第 7 讲 数组 字符串 指针及其应用 (Part II) 周水庚 2006 年 10 月 18 日 程序设计 年秋 1

2 提要 数组的基本概念 一维数组 多维数组 字符数组和字符串 指针和数组 程序设计 年秋 2

3 数组 定义形式 类型说明符数组名 [ 常量表达式 ]; 类型说明符数组名 [ 常量表达式 ][ 常量表达式 ]; 引用形式 数组名 [ 下标 ] 数组名 [ 下标 ][ 下标 ] 程序设计 年秋 3

4 提要 数组的基本概念 一维数组 多维数组 字符数组和字符串 指针和数组 程序设计 年秋 4

5 字符数组 字符数组定义形式与其他数组定义形式一样 char 字符数组名 [ 元素个数 ]; 如 : char s[5] ; 表示数组 s 有 5 个元素, 每个元素能存放一个字符, 整个数组最多可存放 5 个字符 当存于字符数组中的字符列最后有 ASCII 码值为 0( 记为 \0 ) 时, 称该数组中的字符列为字符串 并称字符 \0 为字符串结束标志符 程序设计 年秋 5

6 字符数组初始化 字符数组除可以与普通数组一样初始化外, 也可利用字符串常量给字符数组初始化 用字符串常量对字符数组初始化时, 系统会在字符列未尾添加一个字符串结束符 如 :char a_str[] = {"I am happy!"}; 或简写为 char a_str[] = "I am happy!"; 数组 a_str[] 有 12 个元素, 其中 a_str[11] 的值是字符串的结束标志符 \0 如 :char str_list[][30]={"i am happy!", "I am learning c language."}; 字符数组 str_list[0] 和字符数组 str_list[1] 各可存储 30 个字符, 现分别存储有 11 个有效字符的字符串和有 25 个有效字符的字符串 程序设计 年秋 6

7 字符串 称最后有字符串结束符的字符序列为字符串 字符数组中存储的字符序列本身并不要求最后要有字符 \0 但当字符数组内存储的内容需要作为字符串时, 就必须要有标志符 \0 当字符数组内存储的是字符串时, 可用 %s 格式输出, 若是普通的字符序列, 则它不能用格式 %s, 而只能用格式 %c char s1[]= "student"; char s2[]={ s, t, u, d, e, n, t }; 则 printf( %s, s1); 是正确的 而 printf( %s, s2); 是错误的 实际上字符数组 s1 有 8 个元素 ;s2 只有 7 个元素 程序设计 年秋 7

8 字符串与字符数组 文字信息可作为字符串来处理, 而字符串又以字符数组的形式来组织存储 字符数组需预先指定长度以保证能存放足够长的文字信息 但限定长度对使用是不方便的 例如定义的字符数组 :char str[120] 可存储 120 个字符, 如用它来接受输入或组织输出, 每次必须键入 120 个字符, 或总得输出 120 个字符 显然是不合理的, 因为通常输入输出的字符个数均小于 120 为能使存于字符数组中的字符串的实际长度可长可短, 且其长度可随时测定, 两个长度不相等的字符串能按字典顺序比较,C 语言为字符串规定了一个字符串结束标志符 \0 程序设计 年秋 8

9 字符串常量 字符串常量的书写形式为 : " 字符序列 " 其中字符序列可由零个或多个字符组成, 如字符串常量 I am a student. 含 15 个有效字符 字符串常量 不含任何有效字符, 其长度为 0, 习惯称为空字符串 在字符串常量的书写形式中, 双引号 只充当字符串的界限符, 不是字符串的一部分 如果字符串要包含字符, 则可经过转义序列 ( 如 ( 如 \ ) 来实现, 其它转义序列 ( 如 \n,\t) 也可以作为单个字符出现在字符串常量中 如 程序设计 年秋 9

10 字符串常量串接规则 通常字符串写在一行内 如果一个字符串常量在一行内写不下时, 可用字符串常量的串接规则把字符串分成连续多行形式书写 字符串常量串接规则有两条 在键入字符 \ 之后紧接键入回车键 如 I am a st\( 回车换行符 ) ring. 就是字符串常量 "I am a string. 连续两个紧接的字符串常量相当于一个字符串常量 如 "I am ""a string. 也是字符串常量 "I am a string." 程序设计 年秋 10

11 字符串输入输出 字符串的输入输出可以有两种方式 用格式 %c, 结合循环结构逐个字符输入或输出 用格式 %s, 将字符串整体地输入或输出 例如 : char s[] = "C language"; 用第一种方法输出 for(i = 0; s[i]; ++i) printf("%c", s[i]); 用第二种方法输出 printf("%s", s); 程序设计 年秋 11

12 字符串注意点 -1 字符串与存储字符串的字符数组有区别 字符串的有效字符是指从所指位置的第一个字符开始至字符串结束标志符之前的那些字符 如 : char str[50] = "Pas\0cal Cobol Fortran C"; printf("%s\n", str); 将只输出 Pas 而实际上, 数组 str[] 在字符串结束符之后还存有其它许多字符 程序设计 年秋 12

13 字符串注意点 -2&3 用 %s 格式输出字符串时, 不包括字符串结束标志符 对应的输出项是字符串或字符串名 字符数组名可作为字符串名 在调用 scanf() 为字符数组输入字符串时, 输入项是数组名, 不要加地址运算符 & 例如, scanf("%s", str); 用 %s 格式输入字符串时, 掠过前导的空白类字符, 只能输入一串不含空白类字符的字符序列, 遇空白类字符, 或输入了格式指定的字符个数, 就结束输入 若要输入一串包括空格符在内的一行字符, 要用字符行输入函数 gets() 程序设计 年秋 13

14 字符串注意点 -4 若用 %c 格式结合循环输入字符序列, 若程序又想将输入的字符序列构成字符串, 则程序必须用赋值语句在字符列之后存入字符串结束标志符 如 : char s[20]; int k; for(k = 0; k < 5; k++) scanf( %c, &s[k]); s[k] = \0 ; /* 使输入的 k 个字符构成字符串 */ 当字符串由程序逐个字符生成时, 程序也必须在它最后接上字符串结束标志符 for(k = 0; k < 26; k++) s[k] = a +k; s[k] = \0 ; 程序设计 年秋 14

15 常用字符串处理函数 求字符串长度函数 strlen() 函数调用 strlen(str) 返回 str 中的有效字符 ( 不包括 \0 ) 个数 字符串拷贝函数 strcpy() 函数调用 strcpy(str1,str2) 将字符串 str2 复制拷贝到字符数组 str1 限定字符数组 str1 要定义得足够大, 以便能容纳被拷贝的 str2 的全部内容 限制 :str1 不能是字符串常量 程序设计 年秋 15

16 常用字符串处理函数 ( 续 ) 字符串拷贝函数 strncpy() 函数调用 strncpy(str1, str2, n) 的作用是将 str2 中的前 n 个字符拷贝到 str1( 并附加 \0 ) 其中 n 是整型表达式, 指明欲拷贝的字符个数 如果 str2 中的字符个数不多于 n, 则函数调用 strncpy(str1, str2, n) 等价于 strcpy(str1, str2) 限制 :str1 不能是字符串常量 程序设计 年秋 16

17 常用字符串处理函数 ( 续 ) 字符串连接函数 strcat() 函数调用 strcat(str1, str2) 将 str2 内容拷贝接在字符数组 str1 中的字符串的后面 限制 str1 不能是字符串常量 该函数调用返回 str1 的开始地址 注意, 字符串连接前,str1 和 str2 都各自有 \0, 连接后,str1 中原来的 \0 在拷贝时被覆盖掉, 而在新的字符串有效字符之后再保留一个 \0 例如 char str1[30] = "Beijing "; char str2[30] = "Shanghai"; strcat(str1, str2); printf("%s\n", str1); 将输出 Beijing Shanghai 程序设计 年秋 17

18 常用字符串处理函数 ( 续 ) 字符串比较函数 strcmp() 函数调用 strcmp(str1, str2) 比较两个字符串的大小, 对两个字符串自左至右逐对字符相比较 ( 按字符的 ASCII 代码值的大小 ), 直至出现不同的字符或遇到 \0 字符为止 如直至 \0 字符, 全部字符都相同, 则认为相等, 函数返回 0 值 若出现不同的字符, 则以这第一个不相同的字符比较结果为准, 若 str1 的那个不相同字符小于 str2 的相应字符, 函数返回一个负整数 ; 反之, 返回一个正整数 注意, 对字符串不允许施行相等 == 和不相等!= 运算, 必须类似于本函数那样, 通过逐个字符比较来实现 程序设计 年秋 18

19 常用字符串处理函数 ( 续 ) 字符串大写英文字符转换成小写英文字符函数 strlwr() 函数调用 strlwr(str) 将存于字符数组 str 的字符串内的大写英文字符转换成小写英文字符 限制 str 不能是字符串常量 字符串小写字母转换成大写字母函数 strupr() 函数调用 strupr(str) 将存于字符数组 str 的字符串内的小写英文字符转换成大写英文字符 同样限制 str 不能是字符串常量 程序设计 年秋 19

20 常用字符串处理函数 ( 续 ) 字符串输出函数 puts() 函数调用 puts(str) 将 str 的字符串输出到终端, 并将 str 中的 \0 字符转换成换行符 \n 即输出字符串内容后, 并换行 所以 puts(str) 相当于 printf( %s\n,str) 字符串输入函数 gets() 函数调用 gets(str) 从终端输入字符序列到字符数组 str, 字符序列以回车符作为结束, 并将输入时的回车符转换成 \0 字符存储 该函数调用返回 str 的存储开始地址 程序设计 年秋 20

21 字符数组和字符串应用样例 -1 程序示例 : 说明上述库函数的应用 #include <string.h> char s1[100], s2[100], s3[100]; void main() { printf(" 输入字符序列 s1\n"); scanf("%s", s1); while(getchar()!= '\n'); printf("s1 = %s\n", s1); strcpy(s2, s1); strncpy(s3, s1, 5); printf(" 从 s1 拷贝的 s2 = %s\n", s2); printf(" 从 s1 只拷贝 5 个字符的 s3 = %s\n", s3); strcat(s1,s3);printf(" 接上 s3 的 s1=%s\n", s1); printf(" 输入字符行到 s1\n"); gets(s1); printf("s1 = %s\n", s1); strcpy(s2, s1); strncpy(s3, s1, 5); puts(s2);puts(s3);strcat(s1,s3);puts(s1); } 程序设计 年秋 21

22 字符数组和字符串应用样例 -2 输入字符行, 统计各英文字母出现的次数 程序设计分析 程序需要一个存储字符行的数组, 还需要 52 个英文字母计数器, 统计 52 个英文字母的出现次数 顺序扫视输入的字符行中的字符, 直至遇字符串结束符结束 当程序发现当前字符是英文字母时, 对应英文字母的计数器增 1, 否则掠过当前字符 用数组 count[52] 实现 52 个计数器, 并设大写英文字符顺序对应前 26 个计数器 (count[0] count[25]), 小写英文字符顺序对应后 26 个计数器 (count[26] count[51]) 程序设计 年秋 22

23 字符数组和字符串应用样例 -2( 续 ) #include <stdio.h> void main() { char buf[120]; int i, count[52]; printf("enter letter line.\n"); gets(buf); for(i = 0; i < 52; i++) count[i] = 0; for(i = 0; buf[i]!= \0 ; i++) if (buf[i] >= A && buf[i] <= Z ) count[buf[i] - A ]++; else if (buf[i] >= a && buf[i] <= z ) count[buf[i] - a + 26]++; for(i = 0; i < 52; i++) if (count[i]) /* 未出现的字母不输出 */ printf("%c(%d)\t", i < 26? i+ A :i-26+ a, count[i]); printf("\n\n"); } 输入字符行, 统计各英文字母出现的次数 程序设计 年秋 23

24 字符数组和字符串应用样例 -3 输入字符行, 统计其中单词个数 约定单词由英文字母组成, 其它字符只是用来分隔单词 程序设计分析 { 设置单词计数器等初值 ; 输入一行字符 ( 如用 gets() 函数 ); 顺序扫视输入的字符行 ( 如用 for 语句 ) { 判定当前字符是否是字母 ; if ( 现在正在单词中 ) { if ( 当前字符不是字母 ) 设置当前状态不在单词中的标志 ; } else if ( 当前字符是字母 ) { 设置当前状态在单词中的标志 ; 单词计数器增 1;/* 状态由不是单词变为单词时, 进行统计 */ } } } 程序设计 年秋 24

25 字符数组和字符串应用样例 -3( 续 ) #include <stdio.h> void main() { char c, line[120]; int i, words, inword, letter; words = 0; inword = 0; /* 预置状态不在单词中 */ printf("input a line.\n"); gets(line); for(i = 0; line[i]; i++) { c = line[i]; letter = ((c>= a && c<= z ) (c>= A && c<= Z )); if (inword){if (!letter) inword = 0; } else if (letter){inword = 1; words++; } } printf( 字符行内有 %d 个单词 \n",words); } 输入字符行, 统计其中单词个数 约定单词由英文字母组成, 其它字符只是用来分隔单词 程序设计 年秋 25

26 字符数组和字符串应用样例 -4 #include <stdio.h> #include <string.h> #define MAXLINE 256 void main() 读入一串字符行, 以空行 ( 即只键入回车符的行 ) 结束, 输出其中最长的行 { int len, max; char line [MAXLINE], save [MAXLINE]; max = 0; for (; ;) { printf( 输入字符行 ( 回车结束 ).\n"); gets(line); if ((len = strlen(line)) == 0) break; if (len > max) { max = len; strcpy(save, line); } } if (max > 0) printf( 最长行是 :\n%s\n", save); } 程序设计 年秋 26

27 字符数组和字符串应用样例 -5 描绘图像 r(θ) = sin(2θ) 程序设计分析 用字符在显示屏上描绘 r = r(θ) 图像的一般方法 当 θ 变化时,r(θ) 描绘出一个封闭平面图, 用一个二维字符数组代表图像 r(θ) 的画面, 可定义为 char canvas [24][80]; 普通显示屏在 25mm( 一英寸 ) 见方的区域上纵向 5.5 行, 横向约 10 列 按这个比例设定 X Y 的比例 约定屏幕左上角的字符位置对应 canvas[0][0], 图像坐标系的原点位于 canvas[12][40] θ 取 0 到 360 范围内的值, 步长为 1 对于具体函数, 应充分利用函数图像对称性 :X 轴对称 Y 轴对称 关于原点中心对称等 程序设计 年秋 27

28 字符数组和字符串应用样例 -5( 续 ) 描绘图像 r(θ) = sin(2θ)( 续 ) 程序设计分析 ( 续 ) 描绘图像程序的算法结构 { 置画面数组为全空白符 ; for (seta = 0; seta < 360; seta++) { alpha = seta / * pi ; r = r(seta)*scale ; x = r*cos(alpha); y = r*sin(alpha); i = 12-(int)(0.55*y); /* 屏幕的行号递增方向与图像 Y 轴的方向相反 */ j = 40+x; canvas[i][j] = '*' ; } } 程序设计 年秋 28

29 字符数组和字符串应用样例 -5( 续 ) #include <stdio.h> #include <math.h> #define SCALE 20.0 #define MID 12 #define PI #define RATE 0.55 void main() { char canvas[2*mid][80]; double r, alpha, x, y; int i, j, seta; for(i = 0; i < 2*MID; i++) for(j = 0; j < 80; j++) canvas[i][j] = ' '; 描绘图像 r(θ) = sin(2θ)( 续 ) 对于本题,scale 可定义为 20 以下程序利用图像关于 X 轴 Y 轴及关于直线 Y = X 的对称性 for(i=0;i<2*mid;i++) canvas[i][79]='\0'; for(seta=0; seta<45; seta++) { alpha = seta/180.0*pi; r = sin(2*alpha)*scale; x = r*cos(alpha); y = r*sin(alpha); i = (int)(rate*y); j = (int)(x); 程序设计 年秋 29

30 } 字符数组和字符串应用样例 -5( 续 ) 描绘图像 r(θ) = sin(2θ)( 续 ) canvas[mid+i][40+j] = /* X 轴对称 */ 对于本题,scale 可定义为 20 canvas[mid+i][40-j] = /* 中心对称 */ 以下程序利用图像关于 X 轴 Y canvas[mid-i][40-j] = /* Y 轴对称 */ 轴及关于直线 Y = X 的对称性 canvas[mid-i][40+j] = '*';/* 本身图像点 */ i = (int)(rate*x); /* 关于直线 X = Y 对称 */ j = (int)(y); canvas[mid+i][40+j] = /* X 轴对称 */ canvas[mid+i][40-j] = /* 中心对称 */ canvas[mid-i][40-j] = /* Y 轴对称 */ canvas[mid-i][40+j] = '*'; /* 本身图像点 */ } for(i = 0; i < 2*MID; i++) puts(canvas[i]); 程序设计 年秋 30

31 提要 数组的基本概念 一维数组 多维数组 字符数组和字符串 指针和数组 程序设计 年秋 31

32 指针和数组 指向数组元素的指针 当指针变量指向数组的元素时, 就可用指针引用数组的元素 设有以下变量定义 int a[100], *p; 赋值运算 p = &a[0] 使 p 指向 a[0] 表示 &a[0] 还有更简洁的方法, 即数组名 a 让指针指向数组元素, 不仅为引用数组元素提供了一种新的途径, 更主要的是指向数组元素的指针所具有的运算能力, 特别适宜描述对数组元素的成批处理, 比用下标引用数组元素更灵活和简洁 程序设计 年秋 32

33 指向数组元素的指针 对指向数组元素的指针允许作有限的运算 设有以下代码 int *p, *q, a[100]; p = &a[10]; q = &a[50]; 当两个指针指向同一个数组的元素时, 这两个指针可以作关系比较 (<,<=, ==,>, >=,!=) 若两指针 p 和 q 指向同一个数组的元素, 则 p==q 为真表示 p,q 指向数组的同一个元素 ; 若 p<q 为真, 表示 p 所指向的数组元素的下标小于 q 所指向的数组元素的下标 如对上述代码 p<q 为真 程序设计 年秋 33

34 指向数组元素的指针 ( 续 ) 对指向数组元素的指针允许作有限的运算 ( 续 ) 指向数组元素的指针可与整数进行加减运算 由数组元素在内存中顺序连续存放的规定, 以及地址运算规则, 表达式 a+1 为 a[1] 的地址,a+2 为 a[2] 的地址 一般地, 表达式 a+i 为 a[i] 的地址 把这个结论应用于指向数组元素的指针, 同样地成立 若 p 的值为 a[0] 的地址, 则表达式 p+i 的值为 a[i] 的地址 或者说, p+i 的值为指向 a[i] 的指针值 若 p 指向数组元素 a[10], 则 p+n 就表示指向数组元素 a[10+n], 这里 n 是任意的整数表达式 C 语言约定, 当指针变量指向数组 a 的元素时, 不论数组元素的类型是什么, 指针和整数 n 进行加减运算时, 总是根据所指元素的数据存储字节长度 sizeof a[0], 对 n 放大, 保证加减 n, 使指针值向前或向后移动 n 个元素位置 程序设计 年秋 34

35 指向数组元素的指针 ( 续 ) 对指向数组元素的指针允许作有限的运算 ( 续 ) 当两个指针指向同一个数组的元素时, 允许两个指针作减法运算 其绝对值等于两指针所指数组元素之间相差的元素个数 利用运算符 * 可引用指针所指对象,*(a+i) 表示引用 a+i 所指向的数组元素 a[i] 这样 *(a+i) 就是 a[i] 对于指向数组元素的指针变量 p, 若 p 指向 a[10],*(p+i) 表示引用 p+i 所指向的数组元素 a[10+i] 与用数组名和下标引用数组元素的标记法相一致, 指向数组元素的指针变量也可带下标引用数组的元素, 即 *(p+i) 也可写成 p[i] 若 p = &a[10], 则 p[i] 引用的是 a[10+i], p[-2] 引用的是 a[8] 程序设计 年秋 35

36 指向数组元素的指针 ( 续 ) a int a[8]; 0 int *p = a + 1; 1 p a + i i 7 p+i(=a+i+1) 指向数组元素的指针与数组元素位置之间的关系 程序设计 年秋 36

37 指向数组元素的指针 ( 续 ) 引用数组元素有以下三种形式 用数组元素的下标引用数组元素, 如 a[5] 利用数组名表达式的值是数组首元素指针的约定, 以指针表达式引用表达式所指的元素, 如 *(a+i)=a[i] 利用指向数组元素的指针变量, 用它构成指向数组元素的指针表达式, 并用该表达式引用数组元素 如 *(p+i) 或 p[i] 注 : 用数组名 a 表达数组元素指针与用指向数组元素的指针 p 来表达数组元素的指针, 在实际应用上有区别 p 是变量, 其值可改变, 如 p++; 数组名 a 只代表数组 a 的首元素的指针, 是不可改变的, 程序只能把它作为常量使用 程序设计 年秋 37

38 指向数组元素的指针样例 -1 以下代码利用指针遍历数组, 输入生成一个数组和将已知数组复制到另一个数组 int a[100], b[100], *p, *q; for(p = a; p < a + 100;) scanf( %d, p++); for(p = a, q = b; p < a + 100;) *q++ = *p++; 程序设计 年秋 38

39 指向数组元素的指针样例 -2 下面是说明引用数组元素各种不同方法的示意程序 #include <stdio.h> int a[] = {1, 2, 3, 4}; void main() {int j, *p; for(j = 0; j < 4; j++) printf( a[%d]\t=%d\t,j,a[j]); printf( \n ); for(p = a; p <= &a[3]; p++) printf( *p\t=%d\t, *p); printf( \n ); for( p=a, j==0; p+j<a+4; j++) printf( *(p+%d)\t=%d\t, j, *(p+j)); printf( \n ); for( p=a+3,j=3;j>=0;j--) printf( p[-%d]\t=%d\t, j, p[-j]); printf( \n ); } 程序设计 年秋 39

40 指向字符串的指针 为字符串常量提供存储空间有两种方法 把字符串常量存放在一个字符数组中 例如, char s[] = "I am a string."; 由编译系统将字符串常量与程序中出现的其他常量一起存放在常量存储区中 例如, char *cp1, *cp2 = "I am a string"; cp1 = Another string ; 程序为了能访问存于常量存储区中的字符串常量, 可用一个字符指针指向它的第一个字符 当字符串常量出现在表达式中时, 系统将字符串常量放入常量存储区, 而把表达式转换成该字符串常量存储单元的第一个字符的字符指针 程序设计 年秋 40

41 指向字符串的指针 ( 续 ) 系统预定义许多用于字符串处理的库函数, 程序可以用字符串常量或指向某字符串的指针调用这些库函数 如调用库函数 strlen() 求一字符串常量的长度 strlen("i am a string.") 该函数调用的结果是 14, 表示此字符串常量由 14 个有效字符组成 如 s 是一个字符数组, 其中已存有字符串 ;cp 是一个字符指针变量, 它指向某个字符串的首字符, 则 代码 :printf( %s\n, s); 输出存于字符数组 s 中的字符串 代码 :printf("%s\n", cp); 输出字符指针变量 cp 所指向的字符串 程序设计 年秋 41

42 指向字符串的指针示例 -1 将一个已知字符串复制到一个字符数组, 设 from 为已知字符串的首字符指针,to 为存储复制字符串的字符数组首元素的指针 若用下标引用数组元素标记法, 完成复制的代码可写成 k = 0; while ((to[k] = from[k])!= \0 ) k++; 如采用字符指针描述有 while ((*to++ = *from++)!= \0 ); 由于字符串结束符 \0 的值为 0, 上述测试当前复制字符不是字符串结束符的代码中,!= \0 是多余的, 字符串复制更简洁写法是 while (*to++ = *from++); 程序设计 年秋 42

43 指向字符串的指针示例 -2 将字符串 s 中的某种字符去掉, 设要去掉的字符与字符变量 c 中的字符相同 采用一边考察字符一边复制 引入两个字符指针 p 和 q,p 指向当前正考察的字符,q 指向下一个用于存储复制字符的位置 若 p 所指字符与 c 不相同, 则将它复制到新字符串 否则, 该字符不被复制 每复制一个字符 q 才增 1,p 是每考察一个字符就增 1 for(p = q = s; *p; p++) if (*p!= c) *q++ = *p; /* 复制 */ *q= \0 ; /* 重新构成字符串 */ 程序设计 年秋 43

44 指向数组的指针 如果有一个二维数组, 且指针变量所指的是二维数组中的一整行, 则指针变量另有一些很有意义的性质 设二维数组为 int a[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}}; 这里, 数组 a 有 3 行 4 列 按行来看数组 a, 数组 a 有三个元素, 分别为 a[0],a[1],a[2] 它们又分别是一个一维数组, 各有 4 个元素 例如,a[0] 所代表的一维数组为 a[0][0] a[0][1] a[0][2] a[0][3] 程序设计 年秋 44

45 指向数组的指针 ( 续 ) 指针变量指的是二维数组中一整行 ( 性质续 ) 与一维数组名可看作数组的第一个元素 ( 下标为 0) 的地址的约定相一致, 二维数组名 a 可以看作 a 的首元素 a[0] 的地址, 即表示二维数组第一行的首地址 一般地,a+i 可以看作数组 a 的元素 a[i] 的地址, 即二维数组第 i+1 行的首地址 因二维数组 a 能用 a[0],a[1],a[2] 分别表示其中的一维数组, 所以 a[0] 能表示用 a[0] 表示的一维数组的首元素 a[0][0] 的地址 ;a[1] 能表示用 a[1] 表示的一维数组的首元素 a[1][0] 的地址 一般地,a[i] 能表示用 a[i] 表示的一维数组的首元素 a[i][0] 的地址 程序设计 年秋 45

46 指向数组的指针 ( 续 ) 指针变量指的是二维数组中一整行 ( 性质续 ) 由于数组的开始地址与数组首元素的地址相同,a+i 与 a[i] 应有相同的值, 但它们的意义不同,a+i 表示用 a[i] 表示的一维数组的首地址,a[i] 表示用 a[i] 表示的一维数组的首元素 a[i][0] 的地址 另外, 因 a[i] 可写成 *(a+i), 所以 a+i 与 *(a+i) 也有不同意义, 而值相等 a[i] 或 *(a+i) 表示二维数组 a 的元素 a[i][0] 的地址, 即 &a[i][0] 根据地址运算规则,a[i]+j 即代表数组 a 的元素 a[i][j] 的地址, 即 &a[i][j] 因 a[i] 与 *(a+i) 等价, 所以 *(a+i)+j 也与 &a[i][j] 等价 程序设计 年秋 46

47 指向数组的指针 ( 续 ) 指针变量指的是二维数组中一整行 ( 性质续 ) 数组元素 a[i][j] 有以下三种等价表示形式 : *(a[i]+j) *(*(a+i)+j) (*(a+i))[j] a[0][0], 等价表示形式有 : *a[0] 和 **a 数组元素 a[i][j] 的地址也有三种等价表示形式 a[i]+j *(a+i)+j &a[i][j] 也可定义指向数组的指针变量, 如 :int (*p)[4]; 定义指针变量 p 能指向一个由四个 int 型元素组成的数组 以上定义中, 圆括号是必需的, 否则 int *p[4]; 定义为一个指针数组 p, 即 p 有四个元素, 每个元素是一个指向整型变量的指针 程序设计 年秋 47

48 指向数组的指针 ( 续 ) 指针变量指的是二维数组中一整行 ( 性质续 ) 定义 :int (*p)[4]; 中的 p 不同于指向整型变量的指针 指向整型变量的指针变量指向整型数组的某个元素时, 指针增减 1 运算, 表示指针指向数组的下一个或前一个元素 p 是一个指向由四个整型元素组成的数组, 对 p 作增减 1 运算, 就表示向前进或向后退四个整型元素 如有变量定义 : int a[3][4], (*p)[4]; p = a ; 使 p 指向二维数组 a 的第 1 行 p+1 的指针值为指向二维数组 a 的第二行 若 p = a, 则 p+i 指向二维数组 a 的第 i+1 行, 与 a+i 一样 同二维数组元素的地址计算规则相对应,*p+j 指向 a[0][j]; *(p+i)+j, 或者 p[i]+j 指向数组 a 的元素 a[i][j] 程序设计 年秋 48

49 指向数组的指针示例 说明指向数组元素的指针和指向数组的指针区别的示意程序 #include <stdio.h> void main() { int a[3][4] = { { 1, 3, 5, 7}, { 9, 11, 13, 15}, {17, 19, 21, 23}}; int i, *ip, (*p)[4]; p = a+1; ip = p[0]; for(i = 1; i <= 4; ip += 2, i++) printf("%d\t", *ip); printf("\n"); } p = a; for (i = 0; i < 2; p++, i++) printf("%d\t", *(*(p+i)+1)); printf("\n"); 程序运行后, 将输出 程序设计 年秋 49

50 指向数组的指针 a p-1 a+0 a[0] a+1 a[1] int (*p)[4]=a+1 p+1 a+2 a[2] int a[3][4]; p[1] 或 *(p+1) 二维数组名和指向数组的指针与数组元素位置之间的关系 程序设计 年秋 50

51 指针数组 当数组元素类型为某种指针类型时, 该数组就称为指针数组 指针数组的定义形式为类型说明符 * 数组名 [ 常量表达式 ]; 其中常量表达式是一个整型的, 是数组的长度说明, 用于指明数组元素的个数 ; 类型说明符指明指针数组的元素指针能指向的对象的类型 数组名之前的 * 是必需的, 由于它出现在数组名之前, 使该数组成为指针数组 例如, int *p[10]; 定义指针数组 p 的每个元素都能指向 int 型数据的指针变量, 有十个元素 :p[0] p[1] p[9] 和一般的数组定义一样, 数组名 p 也可作为 p[0] 的地址 程序设计 年秋 51

52 指针数组 ( 续 ) 在指针数组的定义形式中, 由于 [] 比 * 的优先级高, 使数组名先与 [] 结合, 形成数组, 然后再与数组名之前的 * 结合, 表示数组元素是指针类型的 注意, 在 * 与数组名之外不能加上圆括号, 否则变成指向数组的指针变量 如,int (*q)[10]; 是定义指向由 10 个 int 型元素组成的数组的指针 引入指针数组的主要目的是便于统一管理同类的指针 如利用指针数组能实现对一组独立的变量以数组的形式对它们作统一处理 程序设计 年秋 52

53 指针数组 ( 续 ) 如有以下定义 int a, b, c, d, e, f; int *apt[] = {&a, &b, &c, &d, &e, &f}; 下面循环语句能顺序访问独立变量 a b c d e f for(k = 0; k < 6; k++) printf( %d\t, *apt[k]); /* 其中 *apt[k] 可写成 **(apt+k) */ 下面的两个程序实现将一组独立的变量输入它们的值, 排序后输出 前一个程序排序时交换变量的值, 后一个程序排序时交换它们的指针 程序设计 年秋 53

54 指针数组示例 -1 排序时交换变量值 #include <stdio.h> #define N sizeof ap/sizeof ap[0] int a, b, c, d, e, f; void main() { int *ap[] = {&a, &b, &c, &d, &e, &f}; int k, j, t; printf( Enter a, b, c, d, e, f.\n ); for(k = 0; k < N; k++) scanf( %d,ap[k]); /*scanf( %d,*(ap+k))*/ for(k = 1; k < N; k++) for(j = 0; j < N-k; j++) if (*ap[j] > *ap[j+1]) { t =*ap[j]; /* 交换变量的值 */ *ap[j] = *ap[j+1]; *ap[j+1] = t; } for(k = 0; k < N; k++) printf( %d\t, *ap[k]); printf( \n\n ); } 程序设计 年秋 54

55 指针数组示例 -2 排序时不交换变量的值, 而是交换它们的指针 #include <stdio.h> #define N sizeof ap/sizeof ap[0] int a, b, c, d, e, f; void main() { int *ap[] = {&a, &b, &c, &d, &e, &f}; int k, j, *t; printf( Enter a, b, c, d, e, f.\n ); for(k = 0; k < N; k++) scanf( %d, ap[k]); for(k = 1; k < N; k++) for(j = 0; j < N-k; j++) if (*ap[j] > *ap[j+1]) { t = ap[j];/* 交换变量的指针 */ ap[j] = ap[j+1]; ap[j+1] = t; } for(k = 0; k < N; k++) printf( %d\t, *ap[k]); printf( \n\n ); } 程序设计 年秋 55

56 指针数组示例 -3 从文件输入字符行, 对输入的字符行排序后输出到另一文件中 设文件字符行的行数不超过 500 行, 每行字符不超过 80 个字符 #include <stdio.h> #include <string.h> #define LINES 500 #define Nline 80 FILE *fp; char rfname[40], wfname[40]; char lines[lines][nline+1]; char *lptr[lines]; void main() { int n, i, j; char *t; printf(" 输入文件名?\n "); scanf(" %s%*c ", rfname); if ((fp = fopen(rfname, " r ")) == NULL) { printf(" 不能打开输入文件 %s\n ", rfname); return ; } 程序设计 年秋 56

57 指针数组示例 -3( 续 ) 从文件输入字符行, 对输入字符行排序后输出到另一文件 ( 续 ) n = 0; while(n<lines && fgets(lines[n], Nline, fp)!= NULL) n++; /* fgets 从文件输入字符行, 存储到数组中 */ fclose(fp); /* 将输入的诸字符串的首字符指针置入指针数组 */ for(i = 0; i < n; i++) lptr[i] = *(lines + i); /* &lines[i][0] */ for(j = 1; j < n; j++) for(i = 0; i < n-j; i++) if (strcmp(lptr[i], lptr[i+1]) > 0) { t = lptr[i]; lptr[i] = lptr[i+1]; lptr[i+1] = t; } printf(" 输出文件名?\n "); scanf(" %s%*c ", wfname); fp = fopen(wfname, w ); for(i = 0; i < n; i++) fprintf(fp, " %s ", lptr[i]); fclose(fp); printf("\n\n\n"); for(i = 0; i < n; i++) printf("%s ", lptr[i]); printf("\n\n\n"); } 程序设计 年秋 57

58 指针数组 ( 续 ) 当指针数组的元素分别指向两维数组各行首元素时, 也可用指针数组引用两维数组的元素 以下代码说明指针数组引用两维数组元素的方法 int a[10][20], i; int *b[10]; for(i = 0; i < 10; i++) b[i] = &a[i][0]; /* b[i] 指向数组元素 a[i][0] */ 则表达式 a[i][j] 与表达式 b[i][j] 引用同一个元素, 即从指针数组方向来看, 因 b[i] 指向元素 a[i][0],*(b[i]+j) 用元素 a[i][j] 程序设计 年秋 58

59 指针数组 ( 续 ) 当指针数组的元素指向不同的一维指针数组的元素时, 也可通过指针数组, 把它们当作两维数组那样来引用 如以下代码所示 char w0[ ] = Sunday, w1[ ] = Monday, w2[ ] = Tuesday, w3[ ] = Wednesday, w4[ ] = Thursday, w5[ ] = Friday, w6[ ] = Saturday ; char *wname[] = {w0,w1, w2, w3, w4, w5, w6}; 则语句 for(i = 0; i <= 6; i++ ) printf( %s\n, wname[i]); 输出星期英文名称 wname[2][4] 引用字符 w2[4], 其值为 d 程序设计 年秋 59

60 指针数组程序例 以下例子程序把一维数组分割成不等长的段, 从指针数组方向来看, 把它当作两维数组来处理 #include <stdio.h> #define N 8 int p[n*(n+1)/2], i, j, *pt[n]; void main() { for(pt[0] = p, i = 1; i < N; i++) pt[i] = pt[i-1] + i; for(i = 0; i < N; i++) { pt[i][0] = pt[i][i] = 1; for(j = 1; j < i; j++) pt[i][j] = pt[i-1][j-1] + pt[i-1][j]; } for(i = 0; i < N; i++) { printf("%*c", 40-2*i, ); for(j = 0; j <= i; j++) printf("%4d", pt[i][j]); printf("\n"); } } 程序产生如下形式的二项式的系数三角形 程序设计 年秋 60

61 多级指针 当指针变量 pp 所指变量 ip 又是一种指针时,pp 是一种指向指针的指针, 称指针变量 pp 是一种多级指针 定义指向指针变量的指针变量的一般形式为类型说明符 ** 变量名 ; 首先定义变量为指针变量, 其次是该变量能指向一种指针对象, 最后是被指向的指针对象能指向的对象的类型 例如,int **pp, *ip, i; ip = &i; pp = &ip; 定义说明 pp 是指向指针的指针变量 ; 它能指向的是这样一种指针对象, 该指针对象是能指向 int 型的指针变量 如上述代码让 pp 指向指针变量 ip,ip 指向整型变量 i 程序设计 年秋 61

62 多级指针 ( 续 ) 多级指针与指针数组有密切的关系 若有指针数组 char *lines[ ] = { ADA, ALGOL, C, C++, FORTRAN, PASCAL }; 则 lines 指针数组的每个元素分别指向以上字符串常量的首字符 在这里数组名 lines 可以作为它的首元素 lines[0] 的指针,lines+k 是元素 lines[k] 的指针 lines[k] 也是指针, 表达式 lines+k 的值是一种指针的指针 如有必要还可引入指针变量 cp, 让它指向数组 lines 的某元素, 如 cp = &lines[k] 这样,cp 就是指向指针型数据 的指针变量 在这里,cp 是指向字符指针的指针变量, 它应被定义成 char **cp; 程序设计 年秋 62

63 多级指针 ( 续 ) 对于指向字符指针的指针变量的定义 char **cp; 为了定义这样的 cp, 它的前面有两个 * 号 由于 * 自右向左结合, 首先是 *cp 表示 cp 是指针变量, 再有 **cp 表示 cp 能指向的是某种指针类型, 最后 char **cp 表示指针变量 cp 能指向字符指针数据对象 如果有赋值 cp = &lines[1], 让它指向数组元素 lines[1], 则 *cp 的表示引用 lines[1], 它也是一个指针, 指向字符串 ALGOL 的首字符 如再引用指针 *cp 所指内容, 有 **cp 表示引用 lines[1][0], 其值是字符 A 程序设计 年秋 63

64 多级指针示例 下面代码实现顺序输出指针数组 lines 各元素所指字符串 for(cp = lines; cp < lines+6; cp++) printf( %s\n, *cp); 下面代码是采用 %c 格式, 逐一输出字符串字符, 实现顺序输出指针数组 lines 各元素所指的字符串 for(i = 0; i < 6; i++) { /* 设 i 和 j 是 int 类型 */ for(j = 0; lines[i][j]!= \0 ; j++) printf( %c, lines[i][j]); printf( \n ); } 程序设计 年秋 64

65 多级指针示例 ( 续 ) 设有数组 a[] 和指针数组 pt[] 有以下代码所示的关系 int a[ ] = { 2, 4, 6, 8, 10}; int *pt[ ] = { &a[3], &a[2], &a[4], &a[0], &a[1]}; int **p; 下面的代码利用指针数组 pt[] 和指针的指针 p, 遍历数组 a[] for(p = pt; p < pt + 5; p++) printf( %d\t, **p); 上例说明指针的指针与指针数组有密切关系, 指向指针数组元素的指针即为指针的指针, 如以上程序中的指针变量 p 上述代码首先让它指向指针数组的首元素, 然后循环让它顺序遍历指向指针数组的各元素, 表记 *p 能引用 p 所指的数组元素,**p 能引用 p 所指数组元素所指的变量 程序中用 **p 访问数组 a[] 的元素 程序设计 年秋 65

66 本讲小结 字符数组和字符串 字符数组 字符串 字符串处理函数 指针和数组 指向数组元素的指针 指向字符串的指针 指向数组的指针 指针数组 多级指针 程序设计 年秋 66

67 第四章小结 数组的基本概念 一维数组 多维数组 字符数组和字符串 指针和数组 程序设计 年秋 67

68 第四章作业 思考题与习题 第 7,9,15,17,19 题 程序设计 年秋 68

Monthly Report 2010_12

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

More information

第4章 栈和队列

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

More information

没有幻灯片标题

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

More information

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

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

More information

《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

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++ 程序设计 告别 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

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

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

More information

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

《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

期中考试试题讲解

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

More information

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

C/C++ - 字符串与字符串函数 C/C++ Table of contents 1. 2. 3. 4. 1 char C 2 char greeting [50] = " How " " are " " you?"; char greeting [50] = " How are you?"; 3 printf ("\" Ready, go!\" exclaimed John."); " Ready, go!" exclaimed

More information

untitled

untitled CHAPTER 02 2 CHAPTER 2-1 2-4 2-2 2-5 2-3 2-6 2-1 2-1-1 2-2 02 int A[3] = {10, 20, 30; A[0] 10 A[1] 20 A[2] 30 int *pa[3], A[3]; C 3 pa pa[0]pa[1]pa[2] 3 A A[0]A[1]A[2] 3 A A[0] A + i A[i] A + i &A[i]*(A

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

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

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

More information

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

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

More information

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

CC213

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

More information

C/C++ - 文件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

文件

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

More information

Microsoft PowerPoint - plan06.ppt

Microsoft PowerPoint - plan06.ppt 程 序 设 计 语 言 原 理 Principle of Programming Languages 裘 宗 燕 北 京 大 学 数 学 学 院 2012.2~2012.6 6. 基 本 控 制 抽 象 子 程 序 抽 象 子 程 序 活 动 和 局 部 环 境 静 态 实 现 模 型 一 般 实 现 模 型 调 用 序 列 和 在 线 展 开 参 数 机 制 泛 型 子 程 序 异 常 处 理 其

More information

プログラムの設計と実現II

プログラムの設計と実現II UNIX C ls mkdir man http://www.tj.chiba-u.jp/lecture/prog2/ Ctrl+x, Ctrl+s ( )..[4]% gcc Wall o hoge hoge.c..[5]%./hoge 1 : 1 2 : 2 3 : 3 4 : 0 6..[6]% (! )..[4]% gcc Wall o hoge hoge.c..[5]%!g gcc Wall

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

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

JAVA 单元 2.1 四则运算机 ( 一 ) 单元教学进度设计 教学环节 教学内容 教师学生活动活动 反馈 反馈课前作业完成情况 反馈加分 1. 下面哪些是合法的变量名? ( ) A.2variable 答案 :DEG B..variable2 解答 : C.._whatavariable A:/

JAVA 单元 2.1 四则运算机 ( 一 ) 单元教学进度设计 教学环节 教学内容 教师学生活动活动 反馈 反馈课前作业完成情况 反馈加分 1. 下面哪些是合法的变量名? ( ) A.2variable 答案 :DEG B..variable2 解答 : C.._whatavariable A:/ 单元 2.1 四则运算机 ( 一 ) 单元教学进度设计 教学环节 教学内容 教师学生活动活动 反馈 反馈课前作业完成情况 反馈加分 1. 下面哪些是合法的变量名? ( ) A.2variable 答案 :DEG B..variable2 解答 : C.._whatavariable A:// 不能以数字开头 D._3_ B:// 不能用点和空格 提问 抢答 E.$anothervar C: // 不能用点和空格

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++程序设计 - 字符串与格式化输入/输出

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

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

<4D F736F F D205A572D2D A1AAA1AAD4ACE7F42D43D3EFD1D4CAB5D1B5BDCCB3CC2E646F6378>

<4D F736F F D205A572D2D A1AAA1AAD4ACE7F42D43D3EFD1D4CAB5D1B5BDCCB3CC2E646F6378> 第 1 部分 Visual Studio 6.0 开发环境介绍 本书以 Visual C++ 6.0 作为 C 源程序的实践开发环境, 本章将首先介绍 Visual C++ 6.0 环境的基本操作, 包括 Visual C++ 6.0 的安装和启动,C 源程序的编辑 运行与调试 1.1 安装与启动 Visual C++ 6.0 MSDN Visual C++ 6.0 1.1 Microsoft Visual

More information

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

2015年计算机二级(C语言)模拟试题及答案(四) 2015 年计算机二级 (C 语言 ) 模拟试题及答案 (4) 一 填空题 1 C 语言中基本的数据类型有 : 2 C 语言中普通整型变量的类型说明符为, 在内存中占 字节, 有符号普通整型的数据范围是 3 整数-35 在机内的补码表示为 4 执行下列语句 int a=8;a+=a-=a*a; 后,a 的值是 5 有如下语句:charA[ ]={ I am a student }; 该字符串的长度是,A[3]=

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

C/C++ 语言 - 循环

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

More information

第5章 递归 (Recurve)

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

More information

PowerPoint 演示文稿

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

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

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

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

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

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

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

C

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

More information

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

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

More information

chap12.ppt

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

More information

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

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

More information

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

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

More information

( 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

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

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

More information

Guava学习之Resources

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

More information

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++ 程序设计 OJ4 - 参考答案 MASTER 2019 年 5 月 30 日 1

C++ 程序设计 OJ4 - 参考答案 MASTER 2019 年 5 月 30 日 1 C++ 程序设计 OJ4 - 参考答案 MASTER 2019 年 月 30 日 1 1 STRINGSORT 1 StringSort 题目描述 编写程序, 利用 string 类完成一个字符串中字符的排序 ( 降序 ) 并输出 输入描述 输入仅一行, 是一个仅由大小写字母和数字组成的字符串 输出描述 输出排序后的字符串 样例输入 abcde 样例输出 edcba 提示 使用 std::sort

More information

epub 33-8

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

More information

技能竞赛C试题

技能竞赛C试题 C 语言程序设计单元测验四 ( 数组 ) 一 单项选择题 ( 每题 1 分, 共 60 分 ) 1 若有以下说明语句 : int a[12]={1,2,3,4,5,6,7,8,9,10,11,12; char c= a,d,g; 则数值为 4 的表达式是 :( ) A a[g-c] B a[4] C a[ d - c ] D a[ d -c] 2 假设 int 型变量占两个字节的存储单元, 若有定义

More information

SP_ SP_03 JAVA...6 SP_10 SQL...8 SP_ SP_ SP_ SP_ SP_ SP_ SP_ SP_04.NET...33 SP_02 C...37 SP_05

SP_ SP_03 JAVA...6 SP_10 SQL...8 SP_ SP_ SP_ SP_ SP_ SP_ SP_ SP_04.NET...33 SP_02 C...37 SP_05 1 SP_01...3 SP_03 JAVA...6 SP_10 SQL...8 SP_51...12 SP_32...15 SP_53...18 SP_20...21 SP_22...24 SP_21...27 SP_23...30 SP_04.NET...33 SP_02 C...37 SP_05 FLASH...39 SP_06...42 2 SP_01 1. 8. Excel 2. 9. PowerPoint

More information

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

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

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 Python 入门 孙栩 xusun@pku.edu.cn 1 课程的整体介绍 目录 contents 2 Python 的介绍及如何安装 Python 3 使用 Python 编写简单小程序 1 课程的整体介绍 课程的整体介绍 Python 入门 1. Python 的介绍与安装 2. 变量与表达式 3. 一些简单的小程序 数据结构 1. 字符串 2. 列表 3. 元组 4. 字典 5. 集合 分支与循环

More information

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

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

More information

C

C C 14 2017 5 31 1. 2. 3. 4. 5. 2/101 C 1. ( ) 4/101 C C ASCII ASCII ASCII 5/101 C 10000 00100111 00010000 ASCII 10000 31H 30H 30H 30H 30H 1 0 0 0 0 0 ASCII 6/101 C 7/101 C ( ) ( ) 8/101 C UNIX ANSI C 9/101

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

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

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

More information

C/C++ - 数组与指针

C/C++ - 数组与指针 C/C++ Table of contents 1. 2. 3. 4. 5. 6. 7. 8. 1 float candy [ 365]; char code [12]; int states [50]; 2 int array [6] = {1, 2, 4, 6, 8, 10}; 3 // day_mon1.c: # include # define MONTHS 12 int

More information

Microsoft PowerPoint - ds-1.ppt [兼容模式]

Microsoft PowerPoint - ds-1.ppt [兼容模式] http://jwc..edu.cn/jxgl/ HomePage/Default.asp 2 说 明 总 学 时 : 72( 学 时 )= 56( 课 时 )+ 16( 实 验 ) 行 课 时 间 : 第 1 ~14 周 周 学 时 : 平 均 每 周 4 学 时 上 机 安 排 待 定 考 试 时 间 : 课 程 束 第 8 11 12 章 的 内 容 为 自 学 内 容 ; 目 录 中 标 有

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

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

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

More information

<4D F736F F D20B5DA33D5C220CAFDBEDDB5C4CAE4C8EBCAE4B3F62E646F63>

<4D F736F F D20B5DA33D5C220CAFDBEDDB5C4CAE4C8EBCAE4B3F62E646F63> 嵌入式 Linux C 语言程序 设计基础教程作者 : 华清远见 第 3 章数据的输入输出 本章目标 在上一章中, 读者了解了嵌入式 Linux C 语言的数据相关的知识, 包括数据类型 变量和常量等 本 章继续介绍 C 语言中与数据有关的知识, 数据的输入输出 通过本章的学习, 读者将会掌握如下内容 : 字符输出函数 putchar 格式化输出函数 printf 字符输入函数 getchar 格式化输入函数

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

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

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 49 [P.51] C/C++ [P.52] [P.53] [P.55] (int) [P.57] (float/double) [P.58] printf scanf [P.59] [P.61] ( / ) [P.62] (char) [P.65] : +-*/% [P.67] : = [P.68] : ,

More information

Microsoft Word - chap13.doc

Microsoft Word - chap13.doc ï FILE dã Ä o rô qî ô Ö ƒù å o ô ÃÓ FILE Ã Ù Ö o v-> ª w ï FILE d wã +1 ~ c:\temp w Õx test.dat Ã Û vä à n ïw à test.dat 13-2a /* File name: ex13-2a.c */ #include char ch; fptr = fopen("c:\\temp\\test.dat",

More information

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

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

More information

FY.DOC

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

More information

C/C++基礎程式設計班

C/C++基礎程式設計班 C/C++ 基礎程式設計 字元與字串 講師 : 張傑帆 CSIE, NTU 人的出身並不重要, 你拿時間來做什麼才重要 It s not who you were at birth that matters, but what you do with the time you are given.-steve Jobs 課程大綱 字元 字串 作業 字元 在電腦的世界裡, 所有的一切都是以 0 與 1

More information

c语言面试题总结.doc

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

More information

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

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

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

untitled

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

More information

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

Microsoft Word - 第3章.doc

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

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

Mx* Language Reference Manual 2016 年 4 月 7 日 1 用词说明 未定义 指中央还没有表态指语言定义中不涉及的部分, 编译器和运行时环境如何表现是未知的 主要是为了给学生实现语言留下足够的空间, 标准测试集里不会出现涉及未定义部分的内容 例如 : 术语 : 源程

Mx* Language Reference Manual 2016 年 4 月 7 日 1 用词说明 未定义 指中央还没有表态指语言定义中不涉及的部分, 编译器和运行时环境如何表现是未知的 主要是为了给学生实现语言留下足够的空间, 标准测试集里不会出现涉及未定义部分的内容 例如 : 术语 : 源程 Mx* Language Reference Manual 2016 年 4 月 7 日 1 用词说明 未定义 指中央还没有表态指语言定义中不涉及的部分, 编译器和运行时环境如何表现是未知的 主要是为了给学生实现语言留下足够的空间, 标准测试集里不会出现涉及未定义部分的内容 例如 : 术语 : 源程序大小超过 256M 是未定义的 解释 : 我们测试用的源程序大小不会超过 256M 2 程序结构 Mx*

More information

<4D F736F F D20CBB6CABFD1D0BEBFC9FAC8EBD1A7BFBCCAD4B4F3B8D92D383835B3CCD0F2C9E8BCC62E646F63>

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

More information

C/C++基礎程式設計班

C/C++基礎程式設計班 C/C++ 基礎程式設計 字元與字串 講師 : 張傑帆 CSIE, NTU 人的出身並不重要, 你拿時間來做什麼才重要 It s not who you were at birth that matters, but what you do with the time you are given.-steve Jobs 課程大綱 字元 字串 作業 字元 在電腦的世界裡, 所有的一切都是以 0 與 1

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

第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

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

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

More information

Microsoft PowerPoint - 03.Fortran程序设计基础1

Microsoft PowerPoint - 03.Fortran程序设计基础1 简单 Fortran 90 程序的构造形式 : 第二讲 Fortran 程序设计基础 (2) [PROGRAM 程序名 ] [ 声明语句 ] [ 执行语句 ] END [PROGRAM [ 程序名 ]] 程序的书写 (P5) PROGRAM MONEY!calculate balance after interest compounded! 根据利息计算余额 REAL BALANCE, INTEREST,

More information

林子雨《C语言程序设计》讲义PPT

林子雨《C语言程序设计》讲义PPT C 语言程序设计 厦门大学计算机科学系 2012-02-26 林子雨 ziyulin@xmu.edu.cn 2012-02-26 厦门大学非计算机专业本科生公共课 (2011-2012 第 2 学期 ) C 语言程序设计 林子雨厦门大学计算机科学系 E-mail: ziyulin@xmu.edu.cn 个人主页 :http://www.cs.xmu.edu.cn/linziyu 课程提要 第一章绪论

More information

Microsoft Word - 综合试题2.doc

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

More information

碩命題橫式

碩命題橫式 一 解釋名詞 :(50%) 1. Two s complement of an integer in binary 2. Arithmetic right shift of a signed integer 3. Pipelining in instruction execution 4. Highest and lowest layers in the TCP/IP protocol suite

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

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

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

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

全国计算机等级考试笔试模拟试卷(1)

全国计算机等级考试笔试模拟试卷(1) 2009 年 9 月全国计算机等级考试笔试试卷 二级公共基础知识和 C 语言程序设计 ( 考试时间 90 分钟, 满分 100 分 ) 一 选择题 ((1)~(10) (21)~(40) 每题 2 分,(11)~(20) 每题 1 分,70 分 ) (1) 下列数据结构中, 属于非线性结构的是 ( ) A) 循环队列 B) 带链队列 C) 二叉树 D) 带链栈 (2) 下列数据结构中, 能够按照 先进后出

More information

3. 給 定 一 整 數 陣 列 a[0] a[1] a[99] 且 a[k]=3k+1, 以 value=100 呼 叫 以 下 兩 函 式, 假 設 函 式 f1 及 f2 之 while 迴 圈 主 體 分 別 執 行 n1 與 n2 次 (i.e, 計 算 if 敘 述 執 行 次 數, 不

3. 給 定 一 整 數 陣 列 a[0] a[1] a[99] 且 a[k]=3k+1, 以 value=100 呼 叫 以 下 兩 函 式, 假 設 函 式 f1 及 f2 之 while 迴 圈 主 體 分 別 執 行 n1 與 n2 次 (i.e, 計 算 if 敘 述 執 行 次 數, 不 1. 右 側 程 式 正 確 的 輸 出 應 該 如 下 : * *** ***** ******* ********* 在 不 修 改 右 側 程 式 之 第 4 行 及 第 7 行 程 式 碼 的 前 提 下, 最 少 需 修 改 幾 行 程 式 碼 以 得 到 正 確 輸 出? (A) 1 (B) 2 (C) 3 (D) 4 1 int k = 4; 2 int m = 1; 3 for (int

More information

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

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

More information

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

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

More information

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

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