好文档 - 专业文书写作范文服务资料分享网站

C语言程序设计教程 清华大学出版社 陈明主编 第5章答案

天下 分享 时间: 加入收藏 我要投稿 点赞

第5章 习题解答

一、选择题

1.以下叙述中错误的是 。

A)对于double类型数组,不可以直接用数组名对数组进行整体输入或输出 B)数组名代表的是数组所占存储区的首地址,其值不可改变

C)在程序执行中,当数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息

D)可以通过赋初值的方式确定数组元素的个数

解析:对于double类型数组,不能直接用数组名对数组进行整体输入或输出。所以选项A的说法是正确的。数组名代表数组所占内存区的首地址,是一个固定指针,其值不可改变,因此选项B也是正确的。在C语言一维数组定义时可以不指定数组长度,由赋初值的初值个数决定数组的长度。因此选项D也是正确的。C语言程序在执行时,不检查数组元素的下标是否越界,如果出现越界,可能会引起系统死机,因此选项C不正确。

答案:C

2.有以下程序:

/* 文件路径名:ex5_1_2\\main.c */ #include int main(void) { char s[] = \ s += 2; printf(\ return 0; }

/* 标准输入/出头文件 */ /* 主函数main() */

/* 定义字符数组 */ /* s自加2 */ /* 输出s[0] */

/* 返回值0, 返回操作系统 */

执行后的结果是 。 A)输出字符a的ASCII码 B)输出字符c的ASCII码 C)输出字符c D)程序出错

解析:数组s[]的首地址值s是不可改变的,故该程序编译时会出错。 答案:D

3.有以下程序:

/* 文件路径名:ex5_1_3\\main.c */ #include /* 标准输入/出头文件 */ int main(void) /* 主函数main() */ { int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, *p = &a[3], *q = p + 2; /* 定义数组及变量 */

可编辑范本

}

printf(\ return 0; /* 输出*p + *q之值 */

/* 返回值0, 返回操作系统 */

程序运行后的输出结果是 。 A)16 B)10 C)8 D)6

解析:数组a各元素a[0]-a[9]的值依次为1~10,语句“*p=&a[3]”把指针变量p初始化为&a[3],即*p的值为4,指针变量q初始化为“*q=p+2”,所以*q的值为6,从而*p+*q=l0。

答案:B

4.有以下程序:

/* 文件路径名:ex5_1_4\\main.c */ #include /* 标准输入/出头文件 */ void Sort(int a[], int n) /* 将a中元素从大到小进行排序 */ { int i, j, t; /* 定义变量 */ for (i = 0; i < n - 1; i++) for (j = i + 1; j < n; j++) if (a[i] < a[j]) { t = a[i]; a[i] = a[j]; a[j] = t; } }

int main(void) /* 主函数main() */ { int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, i; /* 定义数组及变量 */ Sort(a + 2, 5); for (i = 0; i < 10; i++) printf(\ /* 输出a[i] */ printf(\ /* 换行 */ return 0; /* 返回值0, 返回操作系统 */ }

程序运行后的输出结果是 。 A)1,2,3,4,5,6,7,8,9,10 B)1,2,7,6,3,4,5,8,9, 10, C)1,2,7,6,5,4,3,8,9,10 D)1,2,9,8,7,6,5,4,3, 10,

解析:函数Sort()的功能是将数组a中的元素按照从大到小的顺序排列。但主函数调用Sort()时,实参是a+2和5,即是将数组a中a[2]-a[6]共5个元素进行从大到小的排序。所以得到的输出结果应该是1,2,7,6,5,4,3,8,9,10。

答案:C

5.以下数组定义中错误的是 。 A)int x[][3] = {0}; B)int x[2][3] = {{1, 2}, {3, 4}, {5, 6}}; C)int x[][3] = {1, 2, 3}, {4, 5, 6}}; D)int x[2][3] = {1, 2, 3, 4, 5, 6};

解析:二维数组赋初值时,第一个维数,即行数可以省略,但是列数不能省略。因此选项A, C正确。选项D是按数据在二维数组中的顺序初始化。在选项B中,行维数的初始化格式跟定义的维数不一致,为错误选项。

可编辑范本

答案:B

6.有以下程序:

/* 文件路径名:ex5_1_6\\main.c */ #include /* 标准输入/出头文件 */ int main(void) /* 主函数main() */ { int i, t[][3] = {9, 8, 7, 6, 5, 4, 3, 2, 1}; /* 定义变量及数组 */ for (i = 0; i < 3; i++) printf(\ /* 输出元素值 */ printf(\ /* 换行 */ return 0; /* 返回值0, 返回操作系统 */ }

程序的执行后的输出结果是 。 A)753 B)357 C)369 D)751 解析:定义二维数组时第一维的长度可以不指定,该程序中t[][3]通过赋初值等价于t[3][3],并且其数组按行进行赋值,通过for循环输出的分别是t[2][0]、t[1][1]和t[0][2]。

答案:B

7.若有语句“char *line[5];”,以下叙述中正确的是 。

A)定义line是一个数组,每个数组元素是一个基类型为char的指针变量 B)定义line是一个指针变量,该变量可以指向一个长度为5的字符型数组 C)定义line是一个指针数组,语句中的*号称为取址运算符 D)定义line是一个指向字符型函数的指针

解析:在语句“char *line[5];”中,遵照运算符的优先级,[]的优先级高于*号,因此line先与[]结合,构成一个数组,数组的基类型为“char *”,所以line为指针数组,它的每个元素都是基类型为char的指针。所以选项A叙述正确。

答案:A

8.有以下程序:

/* 文件路径名:ex5_1_8\\main.c */ #include int main(void) { int a[3][3], *p, i; p = &a[0][0]; for (i = 0; i < 9; i++) p[i] = i; for (i = 0; i < 3; i++) printf(\ printf(\ return 0; }

/* 标准输入/出头文件 */ /* 主函数main() */ /* 定义数组及变量 */

/* p指向数组a的首元素 */ /* 为p[i]赋值 */

/* 输出a[1][i] */ /* 换行 */

/* 返回值0, 返回操作系统 */

可编辑范本

程序运行后的输出结果是 。 A)0 1 2 B)1 2 3 C)2 3 4 D)3 4 5

解析: p指向二维数组a的首元素,而二维数组是按行存放的。因此“for(i=0;i<9;i++) p[i]=i;”的结果是等价于a[3][3]={0,1,2,3,4,5,6,7,8},也就是a[3][3]={{10,1,2},{3,4,5},{16.7,8}}。因此a[1][i](i=0,1,2)的结果是3, 4, 5。

答案:D

9.若有定义语句“int a[2][3], *p[3];”,则以下语句中正确的是 。 A)p[0]=a; B)p[0]=a; C)p[0]=&a[1][2]; D)p[1]=&a

解析:因为*p[3]定义成指针数组,指针数组中的任何元素都是基类型为int的指针,只有选项B是正确的。

答案:B

10.设已有定义“float x;”,则以下对指针变量p进行定义且赋初值的语句中正确的是 。

A)float *p=1024; B)int *p=(float)x; C)float p=&x; D)float *p=&x;

解析:指针的值是变量的地址而不能是数值常量,所以选项A错;选项B同样是将float类型的值赋给指针而不是地址,所以选项B也错。定义指针变量前面必须有星号(*),所以选项C不正确。

答案:D

11.若有定义“short int a[]={10,20,30}, *p=&a;”,当执行“p++;”后,下列说法错误的是 。

A)p向高地址移了一个字节 B)p向高地址移了一个存储单元 C)p向高地址移了两个字节 D)p与a+l等价 解析:“*p=&a”将数组a[]的首地址赋给指针p,通过对指针变量加上一个整数可以移动指针,移动的单位为存储单元,short int型变量在存储器中占两个字节。

答案:A

12.有以下程序:

/* 文件路径名:e5_1_12\\main.c */ #include int main(void) { int a = 1, b = 3, c = 5; int *p1 = &a, *p2 = &b, *p = &c; *p = *p1 * (*p2); printf(\ return 0; }

/* 标准输入/输出头文件 */ /* 主函数main() */

/* 定义变量 */

/* 为指针变量赋值 */

/* 修改p2指向的变量的值 */ /* 输出c */

/* 返回值0, 返回操作系统 */

执行后的输出结果是 。 A)1 B)2 C)3

D)4

可编辑范本

解析:指针p1指向变量a,指针p2指向变量b,指针p指向变量c,“*p = *p1 * (*p2);”等价于“c=a*b”,故正确选项为C。

答案:C

13.己定义以下函数:

int f(int *p) { return *p; }

f()函数返回值是 。 A)不确定的值 B)一个整数 C)形参p中存放的值 D)形参p的地址值

解析:p中存放的是地址值,*p间接引用了p指向的整数值。因此返回一个整数。 答案:B

14.己有定义“char a[] = \”,以下叙述中正确的是 。 A)数组a和b的长度相同 B)a数组长度小于b数组长度 C)a数组长度大于b数组长度 D)上述说法都不对 解析:对于定义“char a[] = \”,由于字符串\串长为3,连同隐含的结束符'\\0 ',占4个字节,所以a数组的长度为4。而b数组由单个字符赋初值,个数是3,因此b数组长度为3。

答案:C

15.有以下程序:

/* 文件路径名:ex5_1_15\\main.c */ #include int main(void) { char ch[] = \ pc = ch; printf(\ return 0; }

/* 标准输入/输出头文件 */ /* 主函数main() */

/* 定义字符数组与字符指针 */ /* pc指向字符数组ch的首字符 */ /* 输出*(pc+5) */

/* 返回值0, 返回操作系统 */

程序运行后的输出结果是 。 A)z B)0 C)元素ch[5]地址 D)字符y的地址 解析:字符指针pc指向字符串数组ch的的首字符,*(pc+5)就是pcI5l的值。 答案:A

16.有以下程序:

/* 文件路径名:ex5_1_16\\main.c */ #include int main(void) { char s[] = \

/* 标准输入/输出头文件 */

/* 主函数main() */ /* 定义数组与指针 */

可编辑范本

C语言程序设计教程 清华大学出版社 陈明主编 第5章答案

第5章习题解答一、选择题1.以下叙述中错误的是。A)对于double类型数组,不可以直接用数组名对数组进行整体输入或输出B)数组名代表的是数组所占存储区的首地址,其值不可改变C)在程序执行中,当数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息D)可以通过赋初值的方式确定数
推荐度:
点击下载文档文档为doc格式
6fpqi3msih6rgfk15sw18xzko02xoc00fxm
领取福利

微信扫码领取福利

微信扫码分享