第4章 数组练习题答案.doc

上传人:飞****2 文档编号:78911026 上传时间:2023-03-19 格式:DOC 页数:14 大小:88.50KB
返回 下载 相关 举报
第4章 数组练习题答案.doc_第1页
第1页 / 共14页
第4章 数组练习题答案.doc_第2页
第2页 / 共14页
点击查看更多>>
资源描述

《第4章 数组练习题答案.doc》由会员分享,可在线阅读,更多相关《第4章 数组练习题答案.doc(14页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第4章 数组练习题一、选择题1. 在c语言中,引用数组元素时,其数组下标的数据类型允许是( )。A)整型常量 B)整型表达式C)整型常量或整型表达式 D)任何类型的表达式2. 要说明一个有10个int元素的数组,应当选择语句( )。A) int a10; B) int a(10); C) int a9 D) int a113. 对以下说明语句的正确理解是( )。int a10=6,7,8,9,10;A)将5个初值依次赋给a1至a5B)将5个初值依次赋给a0至a4C)将5个初值依次赋给a6至a10D)因为数组长度与初值的个数不相同,所以此语句不正确4. 已知:int a10;则对a数组元素的正确

2、引用是( )。A) a10 B) a3.5 C) a(5) D) a10-105. 以下对一维整型数组a的正确说明是( )。A) int a(10); B)int n=10,an;C) int n; D)#define SIZE 10;scanf(%,&n); int aSIZE;int an;6. 要定义一个int型一维数组art,并使其各元素具有初值89,-23,0,0,0,不正确的定义语句是( )。A) int art5=89,-23;B) int art =89,-23;C) int art5=89,-23,0,0,0;D) int art =89,-23,0,0,0;7. 在C语言中

3、,二维数组元素在内存中的存放顺序是( )。A) 按行存放 B)按列存放 C)由用户自己定义 D)由编译器决定 8. 以下对二维数组a的正确说明是 ( )。A)int a3 B) float a(3,4) C) double a14 D) float a(3)(4) 9. 已知:int a34;则对数组元素引用正确的是( )。A)a24 B)a1,3 C) a20 D) a(2)(1) 10. 已知:int a34=0;则下面正确的叙述是( )。A)只有元素a00可得到初值0B)此说明语句是错误的C)数组a中的每个元素都可得到初值,但其值不一定为0D)数组a中的每个元素均可得到初值011. 以下

4、各组选项中,均能正确说明二维实型数组a的是 ( )。A) float a34; B) float a(3,4); float a4; float a34; float a3=1,0; float a=0,0;C) float a34; D) float a34; float a4=0,0; float a3; float a4=0,0,0; float a4;12. 已知:int a3=1,2,3,4,5,6,7;则数组a的第一维的大小是 ( )。A)2 B)3 C)4 D)无确定值13. 若二维数组a有m列,则在aij之前的元素个数为 ( )。A) j*m+i B) i*m+j C) i*m

5、+j-1 D) i*m+j+114. 要使字符数组str存放一个字符串ABCDEFGH,正确的定义语句是( )。A) char str8=A,B,C,D,E,F,G,H;B) char str8=ABCDEFGH;C) char str =A,B,C,D,E,F,G,H;D) char str =ABCDEFGH;15. 下面是对数组s的初始化,其中错误的是 ( )。A) char s5=abc B) char s5=a,b,c;C) char s5=; D) char s5=abcde;16. 对两个数组a和b进行如下初始化 char a=ABCDEF; char b=A,B,C,D,E,F

6、;则以下叙述正确的是( )。 A) a与b数组完全相同 B) a与b长度相同C) a和b中都存放字符串 D) a数组比b数组长度长17. 下面程序的运行结果是 ( )。 char c5=a,b,0,c,0; printf(%s,c);A) ab B) ab C) ab c D) 以上三个答案均有错误18. 下面程序段运行的结果是 ( )。char s=a book!;printf(%.4s,s);A) a book! B) a boC) a boo D) 格式描述不正确,没有确定的输出19. 合法的数组定义是 ( )。A) int a=string; B) int a5=0,1,2,3,4,5

7、;C) char a=string; D) char a=0,1,2,3,4,5;20. 要使字符串数组STR含有ABCD,EFG和xy三个字符串,不正确的定义语句有( )。A)char STR 4=ABCD,EFG,XY;B)char STR 5= ABCD,EFG,XY;C)char STR 6= ABCD,EFG,XY;D)char STR 7=A,B,C,D,0,EFG,XY;21. 有两个字符数组a、b,则以下正确的输入格式是 ( )。A) gets (a,b); B) scanf (%s%s,a,b);C) scanf (%s%s,&a,&b); D) gets (a), gets

8、 (b);22. 判断字符串a和b是否相等,应当使用( )。A) if (a=b) B) if (a=b)C) if (strcpy(a,b) D) if (strcmp(a,b)23. 下述对C语言字符数组的描述中错误的是( )。A)字符数组可以存放字符串B)字符数组的字符串可以整体输入、输出C)可以在赋值语句中通过赋值运算符=对字符数组整体赋值D)不可以用关系运算符对字符数组中的字符串进行比较24. 运行下面程序段的输出结果是( )。char s12=string;printf(%d,strlen(s);A) 12 B) 7 C) 6 D) 525. 函数调用strcat ( strcpy

9、 ( str1,str2 ), str3 )的功能是( )。)将字符串str1复制到字符串str2中,再连接到字符串str3之后)将字符串str1连接到字符串str2之后,再复制到字符串str3之后)将字符串str2复制到字符串str1中,再将字符串str3连接到字符串str1之后)将字符串str2连接到字符串str1之后,再将字符串str1复制到字符串str3之中26. 有下面的程序段char a3,b=china;a=b; printf(%s,a);则( )。A)运行后将输出ch B)运行后将输出ChC)运行后将输出chi D)编译出错27. 下面描述正确的是( )。A)两个字符串所包含的

10、字符个数相同时,才能比较字符串B)字符个数多的字符串比字符个数少的字符串大C)字符串STOP与STOP 相等D)字符串hat小于字符串het28. 下面程序段的运行结果是( )。char c=tb0willn;printf ( %d, strlen (c);A) 14 B) 3 C) 9 D) 字符串中有非法字符,输出值不确定29. 下面程序段的运行结果是( )。(其中表示空格)char a7=abcdef,b4=ABC;strcpy (a,b);printf (%c,a5);A) B) 0 C) e D) f30. 以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。#define

11、N10void arrin(intxN)inti=0;while(iN)scanf(%d, );在下划线处应填入的是( )。A) x+iB)&xi+1C)x+(i+)D)&x+i二、填空题1. 构成数组的各个元素必须具有相同的 数据类型 。C语言中数组的下标必须是整正数、0或 整型表达式 。如果一维数组的长度为n ,则数组下标的最小值为 0 ,最大值为 n-1 。 2. 在C语言中,一维数组的定义方式为:类型说说明符 数组名 常量表达式 。3. 在C语言中数组名是一个 地址常量 ,不能对其进行加、减及赋值操作。4. 已知数组T为一有10个单元的整型数组,正序输出T中的10个元素的值的语句为:

12、for (j=0;j=0 ;j- -)printf(“%d”, Tj );5. 字符数组是用来存放 字符串 的数组。字符数组中一个元素存放 1 个字符。6. 在C语言中存放字符A需要占用 1 个字节,存放字符串A需要占用 2 个字节。7. 当需要接受用户从键盘输入的含有空格的字符串时,应使用gets()函数。8. 以下语句的输出结果是 c:winxptime.exe 。printf(%sn,c:winxptime.exe);9. 执行 “ static int b5,a3=1,2,3,4,5,6 ” 后,b4=( 0 ),a12=( 6 )。 10. 若在程序中用到 “ putchar() ”

13、 函数时,应在程序开头写上包含命令(#include),若在程序中用到 “ strlen() ” 函数时,应在程序开头写上包含命令(#include )。 三完善程序题。1. 下面的程序是求出数组a的两条对角线上的元素之和。#include stdio.hmain() int a33=1,3,6,7,9,11,14,15,17,sum1=0,sum2=0,i,j; for (i=0;i3;i+) for (j=0;j3;j+) if (i=j) sum1=sum1+aij; for (i=0;i=0 ; j-) if (i+j=2) sum2=sum2+aij; printf(sum1=%d,

14、sum2=%dn,sum1,sum2);2. 下面的程序段的功能是产生如下形式的杨辉三角形。11 11 2 11 3 3 11 4 6 4 1. .#define N 11main() int aNN,i,j; for (i=1;iN;i+) ai1=1; aii=1; for ( i=1 ; iN; i+) for (j=2; ji ;j+) aij= ai-1j-1 +ai-1j;. .3. 下面程序的功能是输出数组s中最大元素的下标,请填空。 main() int k,p; int s=1,-9,7,2,-10,3; for(p=0,k=p;psk)( k=p; ) printf(%dn

15、,k); 4. 下面程序的功能是将一个字符串str的内容颠倒过来,请填空。 #include string.h main( ) int i,j,( k ); char str=; for(i=0,j=strlen(str),( j=j-1 );ij;i+,j-) k=stri;stri=strj;strj=k; 5. 以下程序的功能是将字符串s中的数字字符放入d数组中,最后输出d中的字符串。例如,输入字符串:abc123edf456gh,执行程序后输出:。请填空。#include #include main() char s80, d80; int i, j;gets(s);for(i=j=0

16、; si!=0; i+)if(_sj=0& sj=9_) dj=si; j+;dj=0;puts(d); 四.阅读程序题1. 以下程序执行时输入Language Programming的结果是( str= Language )。 #include main() char str30; scanf(%s,str); printf(str=%sn,str); 2. 以下程序执行时输入Language Programming的结果是(str= Language Programming )。 #include main() char str30; gets(str); printf(str=%sn,s

17、tr); 3. 以下程序执行的结果是( s=1234 )。 #include main() int a=1,2,3,4,i,j,s=0; j=1; for(i=3;i=0;i-) s=s+ai*j;j=j*10; printf(s=%dn,s); 4. 以下程序执行的结果是( 123 )。 #include main() char str= 1a 2b 3c ; int i; for(i=0;stri!=0;i+) if(stri=0&stri=9) printf(%c,stri); printf(n); 5. 以下程序执行的结果是( s=15 )。 #include main() int a

18、33=1,2,3,4,5,6,7,8,9,i,s=0; for(i=0;i=2;i+) s=s+aii; printf(s=%dn,s); 6. 以下程序执行的结果是( (1,1)=-5 )。 #include main() int i,j,row=0,col=0,m; static int a33=1,-2,0,4,-5,6,2,4; m=a00; for(i=0;i3;i+) for(j=0;j3;j+) if(aijm) m=aij; row=i; col=j; printf(%d,%d)=%dn,row,col,m); 7. 以下程序执行的结果是( 4, some string * t

19、est )。 #include main() static char s150=some string * ; static char s2=test; printf(%d,strlen(s2); strcat(s1,s2); printf(%sn,s1); 8. 下列程序段的输出结果是_ Hello _。main() char b=”Hello,you”; b5=0; printf(“%s n”, b ); 9. 若有以下程序main()inta44=1,2,-3,-4,0,-12,-13,14,-21,23,0,-24,-31,32,-33,0;inti,j,s=0;for(i=0;i4;

20、i+)for(j=0;j4;j+)if(aij0)continue;if(aij=0)break;s+=aij;printf(%dn,s);执行后输出的结果是_58_。 10. 若有以下程序void prnt(int n, int aa ) int i; for(i=1; i=n;i+) printf(“%6d”, aai); if( !(i%5) ) printf(“n”); printf(“n”); 若变量n中的值为24,则prnt函数共输出 5 行,最后一行有 4 个数。三、编写程序题1. 从键盘上输入5个数,输出最大、最小的元素以及它们的下标#define N 5#include ma

21、in( ) int i,j,k, max,min; static int a5; for (i=0;i5;i+) scanf(%d,&ai); max=min=a0; /*假定第一个元素既是最大的,也是最小的*/ j=k=0; /*对分别记录最大,最小元素下标的变量j,k初始化 */ for (i=0;i5;i+) if (maxai) min=ai;k=i; printf(max:a%d=%d,min:a%d=%d,j,max,k,min);2. 在一个已经排好序(假定为升序)的 整型数组中插入一个数,使之仍然有序。【分析】本题有两个关键: 一是要找到插入位置; 二是要将插入位置及以后的元素

22、向后平移一个元素,最后才能在插入位置插入该数。 程序如下。main() int a11=3,5,8,11,15,16,19,23,26,33,i,j,x; /*定义数组预留一个插入位置*/ printf(输入1个数:); scanf(%d,&x); /*输入要插入的数 */ for(i=0;i=x) break; for(j=9;j=i;j-) aj+1=aj; /*将插入位置及以后的元素向后平移*/ ai=x; /*插入数 */ for(i=0;i0) di+=n%2; /* 整除2求余 */ n=n/2; /* 整除2求商 */for(i-;i=0;i-) printf(%1d,di);p

23、rintf(n);运行结果:874. 用选择法对10个数排序排序过程:(1)首先通过n-1次比较,从n个数中找出最小的, 将它与第一个数 交换第一趟选择排序,结果最小的数被安置在第一个元素位置上(2)再通过n-2次比较,从剩余的n-1个数中找出关键字次小的记录, 将它与第二个数交换第二趟选择排序(3)重复上述过程,共经过n-1趟排序后,排序结束#include main() int a11,i,j,k,x; printf(Input 10 numbers:n); for(i=1;i11;i+) scanf(%d,&ai); printf(n); for(i=1;i10;i+) k=i; for

24、(j=i+1;j=10;j+) if(ajak) k=j; if(i!=k) x=ai; ai=ak; ak=x; printf(The sorted numbers:n); for(i=1;i11;i+)printf(%d ,ai);5. 输出扬辉三角形。扬辉三角形是(a+b)n展开后各项的系数。如:(a+b)4展开后各项的系数为 1, 4, 6, 4, 1 。输出的扬辉三角形为:11 11 2 11 3 3 11 4 6 4 1它的特点是:0列和对角线元素都是1。其它元素均为上一行的同列元素与前一列元素之和。按此规律编写程序如下:# define N 6main()int i, j, yN

25、N;for(i=0;iN;i+) yi0=1; /* 0列元素置1 */ yii=1; /* 对角线元素置1 */for(i=0;iN;i+)for(j=1;ji;j+) /* 0,1两行不用计算,j循环不执行 */yij= yi-1j+ yi-1j-1; /*上一行的同列元素与前一列元素之和*/for(j=0;j=i;j+) printf(%5d, yij);printf(n);为了节省存储单元,也可以改用一维数组来实现,各行共同使用一个一维数组。先将0号元素置1,其它元素置0,一维数组中存储的是首行的值,输出该行。再以此行的值为基础,从后向前计算下一行的每个元素值,它等于此元素原值与前一元

26、素值之和,一直计算到1号元素,这样整行元数都成为就下一行的新值,输出此行。然后,再在新行的基础上再计算和输出下一行,如此反复,直到所有行输出完为止。程序如下:# define N 6main()int i, j, a6=1; /* 定义数组,0号元素置1其它元素置0*/for(i=0;i0;j-) /* 从后向前 */aj= aj+ aj-1; /*此元素与前一元素之和*/for(j=0;j=i;j+) printf(%5d, aj);printf(n);运行结果: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 16. 从键盘输入8个学生三门课程的成绩求每

27、个学生各门课的平均分,并按平均分从高到低的顺序输出每个学生各门课程的成绩和平均成绩。(1) 定义数组 int sN3; 存储三门课程的成绩。 数组 float aN; 存储平均成绩。(2) 用for循环从键盘按行输入每个学生各门课的成绩,计算出平均成绩并存入数组a对应下标的数组元素。(3) 用选择排序对平均成绩排序,交换时应整行交换。(4) 按要求输出。程序如下:# define N 8main( ) int i,j,k,m,sN3; /* 定义数组和变量 */ float t,aN; printf( Input 10 students scores:n); for (i=0; iN; i+)

28、 /* 输入成绩 */ scanf(%d%d%d,&si0,&si1,&si2); for (i=0; iN; i+) /* 求平均分 */ ai=(si0+si1+si2)/3.0; for (i=0; iN-1; i+) for (j=i+1; jai) /* 成绩高者交换到i */ for (k=0; k3; k+) m=sik; sik=sjk; sjk=m; t=ai; ai=aj; aj=t; printf(the sorted scores: n); for (i=0; iN; i+) /* 输出每个学生的成绩 */ printf(%8d%8d%8d,si0,si1,si2);

29、printf(%8.1fn, ai); 为了减少交换次数,可以用变量k存储第i趟成绩最高者的下标,这样,每趟最多交换一次。可将排序部分的程序改为:for (i=0; iN-1; i+) k=i; /* 用k存储第i趟成绩最高者的下标 */ for (j=i+1; j ak) k=j; if (k!=i) /* 将第i趟成绩最高者交换到i行 */ for (j=0; j3; j+) m=sij; sij=skj; skj=m; t=ai; ai=ak; ak=t; 运行结果:(略)7. 由键盘任意输入一字符串和一个字符,要求从该串中删除所指定的字符。程序如下:main() char x,s20;

30、 int i,j; gets(s); printf(deldte ? n); scanf(%c,&x); for(i=j=0;si!=0;i+) if(si!=x) sj+=si; sj=0; puts(s);程序运行时若由键盘输入:how do you do?显示屏幕显示:deldte ? 由键盘又输入:o则运行结果为:hw d yu d?8. 从键盘上输入两个字符串,不用字符串函数strcmp()比较两者的大小分析:(1)输入两个字符串,分别存放在str1与str2中;(2)设计函数compstr()比较两字符,返回ASCII 码之差,赋给主函数的变量flag;(3)用dowhile循环依次比较两个字符串的对应字符,结束的条件是两字符串至少有一个结束,或者比较字符不相等。(4)当循环结束时flag 的值为0或为第一个不相等的字符的ASCII码值之差,由此可以判断出字符串的大小 。#include main( )int i,flag; int compstr(char, char ); cha

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com