您好,欢迎来到爱站旅游。
搜索
您的当前位置:首页教材课后题答案-第5章

教材课后题答案-第5章

来源:爱站旅游
第5章 数组习题参考答案

一、单项选择题

1.以下对一维整型数组a 的正确说明是【 】。

A) int a(10); B) int n=10,a[n]; C) int a[ ];

D) #define SINE 10 int a[SIZE]; 【答案】D

2.以下对二维数组a 的正确说明是【 】。

A) int a[3][ ] ; C) double a[3][4];

【答案】C

B) float a[ ][4]; D) float a(3)(4);

3.若有定义int a[10]; 则对a数组元素的正确引用是【 】。

A) a[10]

【答案】C

B) a(10)

C) a[0]

D) a[10.0]

【解析】四个选项中a[10] 下标越界;a(10) 不是数组元素的引用形式;a[10.0] 是错误的,因为下标不允许是实型常量。只有C正确,下标从0开始。

4.以下能对二维数组a进行正确初始化的语句是【 】。 A) int a[2][ ]={{1,0,1},{5,2,3}}; B) int a[ ][3]={{1,2,3},{3,2,1}};

C) int a[2][4]={1,2,3},{4,5},{6}}; 【答案】B

D) int a[ ][ ]={1,2,3,4,5,6,7}

5.若有定义int s[ ][3]={1,2,3,4,5,6,7}; 则s数组第一维的大小是________ 。

A) 2 B) 3 C) 4 D) 不确定 【答案】B 6.若有定义char array[ ]=\"Child\"; 则数组array的长度为【 】。

A) 4 B) 5 C) 6 D) 7 【答案】C

【解析】因为给array数组初始化是用字符串\"Child\",array数组中最后一个字符是 '\\0',因此,数组长度为6。

7.以下选项中,不能正确赋值的是【 】。

A) char s1[10]; s1=\"China\"; C) char s3[10]=\"China\";

【答案】A

1

B) char s2[ ]={'C','h','i','n','a'}; D) char s3[10]={\"China\

【解析】因为s1 是数组名,代表数组的首地址,是常量,常量不能被赋值。

8.若有定义:char x[ ]=\"abcdefg\"; char y[ ]={'a','b','c','d','e','f','g'};则正确的叙述为【 】。

A) 数组x和数组y等价 B) 数组x和数组y的长度相同 C) 数组x的长度大于数组y的长度 D) 数组x的长度小于数组y的长度

【答案】C

【解析】因为x数组初始化是用字符串\"abcdefg\",x数组的长度为8,y数组初始化是用7个字符,y数组的长度为7,所以,数组x的长度大于数组y的长度。 9.函数调用:strcat(strcpy(str1,str2),str3)的功能是【 】。

A) 将串str1复制到串str2中后再连接到串str3之后

B) 将串str1连接到串str2之后再复制到串str3之后

C) 将串str2复制到串str1中后再将串str3连接到串str1之后 D) 将串str2连接到串str1之后再将串str1复制到串str3中 【答案】C

10.下列程序的输出结果是___________。

#include \"stdio.h\" #include \"string.h\" void main( )

{ char st[20]=\"\\\"hello\\\"\"; printf(\"%d\\n\}

A) 6 【答案】B

B) 7

C) 11

D) 12

二、填空题

1.若有以下定义:double m[20]; 则m数组元素的最小下标是______,最大下标是______。

【答案】0和19

2.在C语言中,二维数组元素在内存中的存放顺序是按_________ 存放的。

【答案】行

3.若有以下定义:int a[3][5]={{0,1,2,3,4},{3,2,1,0},{0}}; 则初始化后a[1][[2]的值是________,a[2][1]的值是_________ 。 【答案】1和0 4.若有以下定义:char s[100],d[100];int j=0,i=0; 且s 中已赋字符串,请填空以实现字符串复制。(注意:不得使用逗号表达式) while (s[i]) { d[j]= _________ ;j++;} d[j]=0;

【答案】s[i++]

2

5.下列程序的输出结果是_____________。

#include \"stdio.h\" void main( ) { int k,a[2]; k=a[1]*10; printf(\"%d\\n\}

A) 0 【答案】D

B) 1

C) 10

D)不定值

【解析】定义a数组时没有赋初值,初值不定,因此,a[1]*10是个不定值。 6.下列程序的输出结果是____________。

#include \"stdio.h\"

void main( ) { int i,a[10];

for (i=9; i>=0; i--) a[i]=10-i;

printf(\"%d%d%d\\n\}

A) 258 【答案】C

B) 741

C) 852

D) 369

7.下面程序的功能是:从键盘上输入若干个学生的成绩,当输入负数时表示输入结束,计算每位学生的平均成绩,并输出低于平均分的学生成绩。请填空。

#include \"stdio.h\" void main( )

{ float x[1000],sum=0,ave,a; int n=0,i;

printf(\"Enter mark:\\n\"); scanf(\"%f\

while (a>=0 && n<=100) { sum+=【1】_________; x[n]=【2】_________; n++;

scanf(\"%f\ }

ave=【3】_________; printf(\"Output:\\n\"); printf(\"ave=%f\\n\ for (i=0; i3

if (x[i]printf(\"%f\\n\}

【答案】【1】a 【2】a 【3】sum/n

8.输入一个字符串,判断其是否回文,是输出“Yes!”,不是输出“No!”。 请填空。(所谓回文就是正着读反着读相同。例如:ABCDCBA、madam是回文;ABCDE、China不是回文)

#include \"stdio.h\" void main( )

{ char s[100];int i,j,k;

printf(\"\\nPlease enter string:\\n\"); gets(【1】_________);

k=strlen(s)-1;

for (i=0,j=k; 【2】_________; i++,j--) if(s[i]【3】_________s[j]) break; if (i>=j) printf(\"Yes!\\n\");

else printf(\"No!\\n\"); }

【答案】【1】s 【2】i#define M 4 #define N 5 #include \"stdio.h\" #include \"string.h\" void main( )

{ int a[M][N],i,j,sum=0; for (i=0; ifor (j=0; jscanf(\"%d\【1】_________); for (i=0; isum+=【2】_________;

4

}

for (i=1; isum+=【3】_________; }

printf(\"sum=%d\\n\}

【答案】【1】&a[i][j]

【2】a[M-1][i] 或a[3][i] 【3】a[i][N-1] 或a[i][4]

10.以下程序用来对从键盘上输入的两个字符串进行比较,然后输出两个字符串中第一个不相同字符的ASCII码值之差。例如:输入的两个字符串分别为abcdefg和abceef,则输出为-1。请填空。 #include \"stdio.h\" #include \"string.h\"

void main( )

{ char str1[80], str2[80],c; int i=0,s; gets (str1);

gets (【1】_________);

while ((str1[i]==str2[i]) && (str1[i]!= 【2】_________)) i++;

s=【3】_________; printf(\"%d\\n\

}

【答案】【1】str2 【2】'\\0'

【3】str1[i]-str2[i]

三、阅读下面的程序,写出程序输出结果

1. #include \"stdio.h\"

void main( ) { int n[3],i,j,k;

for (i=0; i<3; i++) n[i]=0; k=2;

for (i=0; ifor (j=0; j}

【答案】3

【解析】第一个for循环给n数组中各元素赋0值,第二个for循环是循环嵌套,当i等于0时,j等于0求出n[0]等于1,j等于1时求得n[1]等于2,因为此时n[0]=1而不是0了。当i等于1时,j等于0求出n[0]等于3,j等于1时求得n[1]等于3。 2. #include \"stdio.h\"

5

void main( )

{ int a[2][3],i,j,n=1; for (i=0; i<2; i++) for (j=0; j<3; j++) a[i][j]=n++; for (i=0; i<2; i++) { for (j=0; j<3; j++) printf(\"%4d\ printf(\"\\n\"); }

}

【答案】1 2 3 4 5 6 3.#include \"stdio.h\"

void main( )

{ char ch[7]={\"652ab31\ int i,s=0;

for (i=0; ch[i]>='0' && ch[i]<='9'; i+=2) s=10*s+ch[i]-'0'; printf(\"%d\\n\}

【答案】62 4. #include \"stdio.h\"

#include \"string.h\" void main( )

{ char ss[10]=\"12345\"; strcat(ss,\"6789\"); gets(ss); printf(\"%s\\n\

}

运行时输入:ABC,写出输出结果。 【答案】ABC

5.(1)程序的功能是什么?(2)写出程序运行的输出结果。

#define N 8

#include \"stdio.h\"

void main()

{ int i,j,t,min,a[N]={60,67,90,84,40,70,57,78}; for (j=0; j6

if (a[j]>a[i])

{ t=a[j];a[j]=a[i];a[i]=t; } for(i=0;iprintf(\"%4d\

}

【答案】(1)用选择法将N个数从小到大排序

(2)输出结果是: 40 57 60 67 70 78 84 90

四、编程题

1.编程序求Fibonacci数列的前20项,Fibonacci数列的定义为:

fn= 1 (n=1)

1 (n=2) fn-1+fn-2 (n>2)

要求将数列存放在数组中,并按每行5个数的格式输出该数列。 程序:

#include \"stdio.h\" void main( ) { int i;

long f[30]={1,1}; for (i=2; i<30; i++) f[i]=f[i-2]+f[i-1]; for (i=0; i<30; i++) { if(i%5==0) printf(\"\\n\"); printf(\"%12ld\ }

printf(\"\\n\"); }

输出结果:

1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 2.用“冒泡法”将输入的10个字符按从小到大顺序排序并输出结果。

程序:

#include \"stdio.h\"

7

void main( )

{ int i,j,t; char str[10]; for (i=0; i<10; i++) scanf(\"%c\ for (j=1; j<10; j++) for (i=0; i<10-j; i++) if (str[i]>str[i+1])

{ t=str[i]; str[i]=str[i+1]; str[i+1]=t; } for (i=0; i<10; i++) printf(\"%c\ printf(\"\\n\"); }

运行情况如下: eifjsacrop acefijoprs

3.已知a数组中的数据已按升序排序,要求从键盘输入一个数后将其插入a数组中,并使该数组中的数据仍然有序。

思路:

这是一个“插入法排序”问题。若a数组中的数已经按由小到大排好序,现在要将输入的数n按顺序插入到a数组中。从a[0]开始,将a数组中的每个数与n比较大小,当找到第一个比n大的数时,该位置i就是n要插入的位置,然后将a[i]开始的所有数依次后移一个位置,最后将n插入到a[i]中。

方法1算法如图5-1所示。 程序:

#include \"stdio.h\" void main( )

{ int a[11]={2,4,5,6,8,10,23,36,47,68}, n,i,j; printf(\"array a:\\n\"); for (i=0; i<10; i++) printf(\"%5d\ printf(\"\\nInsert data:\"); scanf(\"%d\ if (n>a[9]) a[10]=n; else

{ for (i=0; i<10; i++) if (a[i]>n)

{ for (j=9; j>=i; j--)

8

输入待插入的数n n>末尾元素 T F 将n插在 for (i=0; i<10; i++) 数组尾 a[i]>n T F 从a[9]~a[i]依次 后移一个位置 将n插入到a[i]处 输出结果 图5-1 插入法排序方法1

a[j+1]=a[j]; a[i]=n; break; } }

printf(\"Now,array a:\\n\"); for (i=0; i<11; i++) printf(\"%5d\ printf(\"\\n\"); }

运行结果: array a:

2 4 5 6 8 10 23 Insert data:7 Now,array a:

2 4 5 6 7 8 10 方法2算法如图5-2所示。 程序:

#include \"stdio.h\" void main( )

{ int a[11]={2,4,5,6,8,10,23,36,47,68}; int t1,t2,n,i,j;

printf(\"\\narray a:\\n\"); for (i=0; i<10; i++) printf(\"%5d\ printf(\"\\nInsert data:\"); scanf(\"%d\ if (n>a[9]) a[10]=n; else

{ for (i=0; i<10; i++) { if (a[i]>n) { t1=a[i];

a[i]=n;

for (j=i+1; j<11; j++) { t2=a[j]; a[j]=t1; t1=t2; } break; }

36 47 68 23 36 47 68 输入待插入的数n n>末尾元素 T F 将n插在 for(i=0;i<10;i++) 数组尾 a[i]>n T F 将n插入到a[i]处 从a[i]~a[9]依次 后移一个位置 输出结果 图5-2插入法排序方法2

9

}

}

printf(\"Now,array a:\\n\"); for (i=0; i<11; i++) printf(\"%5d\ printf(\"\\n\"); }

4.分别求N阶方阵的两条对角线上元素之和。

思路:

N阶方阵就是N行N列的矩阵,矩阵左对角线上的元素是a[i][i](i=0~N-1),右对角线上的元素是a[i][j](其中:i=0~N-1,j=N-1-i)。由于j的值取决于i,因此只要一个for循环即可。例如三阶方阵

1 2 3 1 3 5 2 4 6

a= 左对角线元素之和是:1+3+6=10,右对角线上元素之和是3+3+2=8。 程序:

#include \"stdio.h\"

void main( )

{ int a[3][3]={1,2,3,1,3,5,2,4,6},sum1,sum2,i; sum1=sum2=0;

for (i=0; i<3; i++)

{ sum1=sum1+a[i][i];

sum2=sum2+a[i][3-1-i]; }

printf(\"sum1=%d sum2=%d\\n\}

运行结果: sum1=10 sum2=8

5.打印出以下的杨辉三角形(要求打印出6行)。

1 1 1

1 2 1

1 3 3 1

1 4 6 4 1

1 5 10 10 5 1

10

算法:如图5-3所示 程序:

#define N 7

#include \"stdio.h\" void main( ) { int a[N][N],i,j; for (i=1; ia[i][j]=a[i-1][j-1]+a[i-1][j]; for (i=1; i6.输入一行英文字母,统计其中有多少个单词,单词之间用空格分隔。

思路:

设:变量word作为标志变量,初值为0;当读到非空格时,word置1,读到空格时,word置0;变量num作为单词记数变量,读到第一个非空格时,num加1。

因此,当读到非空格字符时首先判断是否是新单词开始,如果word为0即为新单词开始,单词记数变量num加1,单词标志变量word置1,接下来若还是非空格字符,只要word为1就不是新单词开始,接着判断下一字符,当读到空格时,将word置0。

算法:如图5-4所示。 程序:

#include \"stdio.h\" void main( )

{ int i,num=0,word=0; char str[80]; gets(str);

for (i=0; str[i]!='\\0'; i++) if (str[i]==' ') word=0; else if (word==0) { word=1; num++;

11

使数组第一列和对角线元素值为1 其他各元素:a[i][j]=a[i-1][j-1]+a[i-1][j] (用双重for循环控制i和j的变化) 输出结果 图5-3 输出杨辉三角形 输入一字符串给str数组 i=0,num=0,word=0 当 str[i]≠'\\0' str[i]= ' ' T F word=0 word=0 T F word=1 num=num+1 i=i+1 输出:num 图5-4 统计单词

}

printf(\"%d\\n\}

运行情况如下:

Chinese Materials Research Society 4

12

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- azee.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务