教材课后题答案第5章.docx
- 文档编号:8028900
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:15
- 大小:75.08KB
教材课后题答案第5章.docx
《教材课后题答案第5章.docx》由会员分享,可在线阅读,更多相关《教材课后题答案第5章.docx(15页珍藏版)》请在冰豆网上搜索。
教材课后题答案第5章
第5章数组习题参考答案
一、单项选择题
1.以下对一维整型数组a的正确说明是【】。
A)inta(10);
B)intn=10,a[n];
C)inta[];
D)#defineSINE10
inta[SIZE];
【答案】D
2.以下对二维数组a的正确说明是【】。
A)inta[3][];B)floata[][4];
C)doublea[3][4];D)floata(3)(4);
【答案】C
3.若有定义inta[10];则对a数组元素的正确引用是【】。
A)a[10]B)a(10)C)a[0]D)a[10.0]
【答案】C
【解析】四个选项中a[10]下标越界;a(10)不是数组元素的引用形式;a[10.0]是错误的,因为下标不允许是实型常量。
只有C正确,下标从0开始。
4.以下能对二维数组a进行正确初始化的语句是【】。
A)inta[2][]={{1,0,1},{5,2,3}};B)inta[][3]={{1,2,3},{3,2,1}};
C)inta[2][4]={1,2,3},{4,5},{6}};D)inta[][]={1,2,3,4,5,6,7}
【答案】B
5.若有定义ints[][3]={1,2,3,4,5,6,7};则s数组第一维的大小是________。
A)2B)3C)4D)不确定
【答案】B
6.若有定义chararray[]="Child";则数组array的长度为【】。
A)4B)5C)6D)7
【答案】C
【解析】因为给array数组初始化是用字符串"Child",array数组中最后一个字符是'\0',因此,数组长度为6。
7.以下选项中,不能正确赋值的是【】。
A)chars1[10];s1="China";B)chars2[]={'C','h','i','n','a'};
C)chars3[10]="China";D)chars3[10]={"China"};
【答案】A
【解析】因为s1是数组名,代表数组的首地址,是常量,常量不能被赋值。
8.若有定义:
charx[]="abcdefg";chary[]={'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"
voidmain()
{charst[20]="\"hello\"";
printf("%d\n",strlen(st));
}
A)6B)7C)11D)12
【答案】B
二、填空题
1.若有以下定义:
doublem[20];则m数组元素的最小下标是______,最大下标是______。
【答案】0和19
2.在C语言中,二维数组元素在内存中的存放顺序是按_________存放的。
【答案】行
3.若有以下定义:
inta[3][5]={{0,1,2,3,4},{3,2,1,0},{0}};则初始化后a[1][[2]的值是________,a[2][1]的值是_________。
【答案】1和0
4.若有以下定义:
chars[100],d[100];intj=0,i=0;且s中已赋字符串,请填空以实现字符串复制。
(注意:
不得使用逗号表达式)
while(s[i]){d[j]=_________;j++;}
d[j]=0;
【答案】s[i++]
5.下列程序的输出结果是_____________。
#include"stdio.h"
voidmain()
{intk,a[2];
k=a[1]*10;
printf("%d\n",k);
}
A)0B)1C)10D)不定值
【答案】D
【解析】定义a数组时没有赋初值,初值不定,因此,a[1]*10是个不定值。
6.下列程序的输出结果是____________。
#include"stdio.h"
voidmain()
{inti,a[10];
for(i=9;i>=0;i--)
a[i]=10-i;
printf("%d%d%d\n",a[2],a[5],a[8]);
}
A)258B)741C)852D)369
【答案】C
7.下面程序的功能是:
从键盘上输入若干个学生的成绩,当输入负数时表示输入结束,计算每位学生的平均成绩,并输出低于平均分的学生成绩。
请填空。
#include"stdio.h"
voidmain()
{floatx[1000],sum=0,ave,a;
intn=0,i;
printf("Entermark:
\n");
scanf("%f",&a);
while(a>=0&&n<=100)
{sum+=【1】_________;
x[n]=【2】_________;
n++;
scanf("%f",&a);
}
ave=【3】_________;
printf("Output:
\n");
printf("ave=%f\n",ave);
for(i=0;i if(x[i] printf("%f\n",x[i]); } 【答案】【1】a【2】a【3】sum/n 8.输入一个字符串,判断其是否回文,是输出“Yes! ”,不是输出“No! ”。 请填空。 (所谓回文就是正着读反着读相同。 例如: ABCDCBA、madam是回文;ABCDE、China不是回文) #include"stdio.h" voidmain() {chars[100];inti,j,k; printf("\nPleaseenterstring: \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"); elseprintf("No! \n"); } 【答案】【1】s【2】i = 9.下面程序的功能是求二维数组周边元素之和。 请填空。 例如: 二维数组中的数据如下所示,输出结果: sum=63 12345 23456 34567 45678 #defineM4 #defineN5 #include"stdio.h" #include"string.h" voidmain() {inta[M][N],i,j,sum=0; for(i=0;i for(j=0;j scanf("%d",【1】_________); for(i=0;i {sum+=a[0][i]; sum+=【2】_________; } for(i=1;i {sum+=a[i][0]; sum+=【3】_________; } printf("sum=%d\n",sum); } 【答案】【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" voidmain() {charstr1[80],str2[80],c;inti=0,s; gets(str1); gets(【1】_________); while((str1[i]==str2[i])&&(str1[i]! =【2】_________)) i++; s=【3】_________; printf("%d\n",s); } 【答案】【1】str2【2】'\0'【3】str1[i]-str2[i] 三、阅读下面的程序,写出程序输出结果 1.#include"stdio.h" voidmain() {intn[3],i,j,k; for(i=0;i<3;i++)n[i]=0; k=2; for(i=0;i for(j=0;j printf("%d\n",n[1]); } 【答案】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" voidmain() {inta[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",a[i][j]); printf("\n"); } } 【答案】123 456 3.#include"stdio.h" voidmain() {charch[7]={"652ab31"}; inti,s=0; for(i=0;ch[i]>='0'&&ch[i]<='9';i+=2) s=10*s+ch[i]-'0'; printf("%d\n",s); } 【答案】62 4.#include"stdio.h" #include"string.h" voidmain() {charss[10]="12345"; strcat(ss,"6789"); gets(ss);printf("%s\n",ss); } 运行时输入: ABC,写出输出结果。 【答案】ABC 5. (1)程序的功能是什么? (2)写出程序运行的输出结果。 #defineN8 #include"stdio.h" voidmain() {inti,j,t,min,a[N]={60,67,90,84,40,70,57,78}; for(j=0;j for(i=j+1;i if(a[j]>a[i]) {t=a[j];a[j]=a[i];a[i]=t;} for(i=0;i printf("%4d",a[i]); } 【答案】 (1)用选择法将N个数从小到大排序 (2)输出结果是: 4057606770788490 四、编程题 1.编程序求Fibonacci数列的前20项,Fibonacci数列的定义为: 要求将数列存放在数组中,并按每行5个数的格式输出该数列。 程序: #include"stdio.h" voidmain() {inti; longf[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",f[i]); } printf("\n"); } 输出结果: 11235 813213455 89144233377610 9871597258441816765 1094617711286574636875025 121393196418317811514229832040 2.用“冒泡法”将输入的10个字符按从小到大顺序排序并输出结果。 程序: #include"stdio.h" voidmain() {inti,j,t;charstr[10]; for(i=0;i<10;i++) scanf("%c",&str[i]); 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",str[i]); 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" voidmain() {inta[11]={2,4,5,6,8,10,23,36,47,68},n,i,j; printf("arraya: \n"); for(i=0;i<10;i++) printf("%5d",a[i]); printf("\nInsertdata: "); scanf("%d",&n); if(n>a[9])a[10]=n; else {for(i=0;i<10;i++) if(a[i]>n) {for(j=9;j>=i;j--) a[j+1]=a[j]; a[i]=n; break; } } printf("Now,arraya: \n"); for(i=0;i<11;i++) printf("%5d",a[i]); printf("\n"); } 运行结果: arraya: 245681023364768 Insertdata: 7 Now,arraya: 2456781023364768 方法2算法如图5-2所示。 程序: #include"stdio.h" voidmain() {inta[11]={2,4,5,6,8,10,23,36,47,68}; intt1,t2,n,i,j; printf("\narraya: \n"); for(i=0;i<10;i++) printf("%5d",a[i]); printf("\nInsertdata: "); scanf("%d",&n); 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; } } } printf("Now,arraya: \n"); for(i=0;i<11;i++) printf("%5d",a[i]); 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+3+6=10,右对角线上元素之和是3+3+2=8。 程序: #include"stdio.h" voidmain() {inta[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=%dsum2=%d\n",sum1,sum2); } 运行结果: sum1=10sum2=8 5.打印出以下的杨辉三角形(要求打印出6行)。 1 11 121 1331 14641 15101051 算法: 如图5-3所示 程序: #defineN7 #include"stdio.h" voidmain() {inta[N][N],i,j; for(i=1;i {a[i][i]=1;a[i][1]=1;} for(i=3;i for(j=2;j a[i][j]=a[i-1][j-1]+a[i-1][j]; for(i=1;i {for(j=1;j<=i;j++) printf("%5d",a[i][j]); printf("\n"); } printf("\n"); } 6.输入一行英文字母,统计其中有多少个单词,单词之间用空格分隔。 思路: 设: 变量word作为标志变量,初值为0;当读到非空格时,word置1,读到空格时,word置0;变量num作为单词记数变量,读到第一个非空格时,num加1。 因此,当读到非空格字符时首先判断是否是新单词开始,如果word为0即为新单词开始,单词记数变量num加1,单词标志变量word置1,接下来若还是非空格字符,只要word为1就不是新单词开始,接着判断下一字符,当读到空格时,将word置0。 算法: 如图5-4所示。 程序: #include"stdio.h" voidmain() {inti,num=0,word=0; charstr[80]; gets(str); for(i=0;str[i]! ='\0';i++) if(str[i]=='')word=0; elseif(word==0) {word=1; num++; } printf("%d\n",num); } 运行情况如下: ChineseMaterialsResearchSociety 4
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教材 课后 答案
![提示](https://static.bdocx.com/images/bang_tan.gif)