C语言练习数组参考答案.docx
C语言练习3(数组)=参考答案C语言(数组)一、选择题1. 设有程序:main() int i,a11; printf("给数组赋值:n"); for (i=0;i<=10;i+) scanf("%d",( ); . . printf("输出数组:n"); for(i=0;i<=10;i+) printf("%d,",( ); 则在程序中的两个园括号中分别应填入:CA) &ai和&ai B) ai和&aiC) &ai和aiD) ai和ai 2. 设已定义:int a15; 则数组a占用的内存单元数是( C ).A) 15B) 16C) 30D) 32 3. 阅读程序:main() int a2=0,i,j,k=2; for(i=0;i<k;i+)for(j=0;j<k;j+) aj=ai+1; printf("%dn",ak);以上程序的输出结果是( D ).A) 1B) 3C) 2D) 不确定的值4. 阅读程序:f(int b,int n) int i,r=1; for(i=0;i<=n;i+) r=r*bi; return r;main() int x,a=2,3,4,5,6,7,8,9; x=f(a,3);printf("%dn",x);以上程序的输出结果是( D ).A) 720B) 6C)24D) 120 5. 以下定义语句中,错误的是( B ).A) int a = 6,7,8; B) int n=5, an; C) char a = "string" D) char a5 ='0','1','2','3','4'6. 以下描绘中正确的是( D ).A) 数组名后面的常量表达式用一对圆括弧括起来B) 数组下标从1开场 C) 数组下标的数据类型可以是整型或实型D) 数组名的规定与变量名一样7. 若定义数组并初始化char a10='0','1 ','2','3','4','5','6','7','8','9'指出以下错误语句( AB ).A) scanf("%c",a0);B) scanf("%s",&a);C) printf("%c",a3);D) printf("%s",a);8.若定义数组int a10 ,其最终一个数组元素为( C ).A) a0B) a1C) a9D) a109. 若定义数组并初始化int a10= 1,2,3,4,以下语句哪一个不成立( B )?A) a8 的值为0B) a1 的值为1C) a3 的值为4D) a9 的值为010. 指出以下错误语句( A ).A) int n=10,an;B) int n,a10;C) int a10=1,2,3;D) int a10=1,2,3,4,5,6,7,8,9,10;11. 请读程序:main()int n2,i,j,k; for(i=0;i<2;i+) ni=0; k=2; for(i=0;i<k;i+) for(j=0;j<k;j+) nj=ni+1; printf("%dn",nk);上面程序的输出结果是( A ).A)不确定的值 B)3 C)2 D)112. 若有以下的定义和语句:int str12=1,2,3,4,5,6,7,8,9,10,11,12;char c='e',则数值为2的表达式是( C ).A)str'g'-c B)str2 C)str'd'-'c' D)str'd'-c13. 设有数组定义:int a5;则下列给数组元素赋值错误的是( B ).A) a3=93;B) scanf("%c",a3);C) a3=getchar();D) a3='a'+3;14. 以下数组定义中错误的是( D ).A) #define N 30 int aN+30;B) #define N 30 int aN;C) int a30;D) int aN;15. 在定义一个一维数组时,不能用来表示数组长度的是( D ).A)常量 B)符号常量 C)常量表达式 D) 已被赋值的变量16. 若float型变量占用4个字节,有定义float a20=1.1,2.1,3.1;则数组a在内存中所占的字节数是( D ).A)12 B)20 C)40 D)8017. 设已定义:int x24=1,2,3,4,5,6,7,8; 则元素x11的正确初值是( A ).A) 6B) 5C) 7D) 1 18. 设有定义:int a3=1,2,3,4,5,6,7,8,9; 则a12的初值为( C ).A) 2B) 4C) 6D) 8 19. 设有:int a45; 则数组a占用的内存字节数是( C ).A) 12B) 24C) 40D) 20 20. 以下数组定义中,不正确的是( B ).A) int b34; B) int c3 =1,2,1,2,3,4,5,6,7; C) int b200100=0; D) int c 3=1,2,3,4,5,6; 21. 定义数组:int x23; 则数组x 的维数是( 2 ).A) 1 B) 2 C) 3 D) 6 22. 若定义数组并初始化int b23= 1,2,3,4,5,6,以下语句哪一个成立( C )?A) 表达式b12的值为1B) 表达式b12的值为4C) 表达式b12的值为6D) 表达式b12的值为223. 若定义数组并初始化int a23=1,2,3,4,5,6;for(i=0;i<2;i+) for(j=0;j<3;j+)printf("%d",aij);语句的结果是哪一个( C )A) 1,2,3,4,5,6B) 1 2 3 4 5 6 C) 12345624. 若定义数组并初始化int a23= 1,2, 3,4,5,6;以下语句哪一个不成立( B )?A) a数组中有6个元素B) a23是a数组的最终一个元素的引用C) a数组中每个元素都为整数D) a数组是整型数组25. 定义如下变量和数组:int i;int x33=1,2,3,4,5,6,7,8,9;则下面语句的输出结果是( C ).for(i=0;i<3;i+) printf("%d",xi2-i);A) 1 5 9 B) 1 4 7 C) 3 5 7 D) 3 6 926. 如有以下定义:double s5=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14;则数值为2的元素是( C ).A) s13 B) s03 C) s02 D) s1227. 以下程序的输出结果是( A ).main()int a33=1,2,3,4,5,6,i,j,s=0;for(i=1;i<3;i+)for(j=0;j<=i;j+)s+=aij;printf("%d",s);A) 18 B) 19 C) 20 D) 2128. 若已有char b1050;则该二维字符数组在内存所占字节数为( D ).A) 10 B)50 C)60 D)50029. 设有:char a10; 下列语句那个是正确的( D )?A) scanf("%s",a0);B) scanf("%s",&a);C) printf("%s",a0)D) printf("%s",a) 30. 阅读程序:main() char a10; int i; for(i=1;i<=5;i+)scanf("%c",&ai); printf("%c",a0);设从键盘输入字符串:abcde,则程序的输出结果是( C ).A) aB)空格C)不确定D)0 31. 合法的数组定义是( D ).A) int a = "string" B) int a5=0,1,2,3,4,5; C) char a= "string" D) char a ='0','1','2','3'32. 设有数组定义:char string ="China";则数组string所占的空间为( B ).A) 5个字节 B) 6个字节 C) 7个字节 D) 10个字节33. 定义字符数组c:char c ="c language";数组c在内存中所占字节数是( C ).A) 9 B) 10 C) 11 D) 1234. 指出以下错误语句( C ).A) char a10='0','1','2','3','4','5','6','7','8','9'B) char a10='0','1 ','2','3'C) char a2= "1","2"D) char a2= 'a,'b;35. 若定义数组并初始化char a10="hello",该数组的元素个数是( A ).A) 10B) 5C) 6D) 736. 若定义数组并初始化char a10="HELLO",该数组的元素中 a2是( A ).A) 'L'B) 'E'C) 'H'D) 'O'37. 若定义数组并初始化int b10= 1,2,3,4,以下哪几个语句成立( A C D)?A)b8的值为0B)b1的值为1C)b3的值为整数D)b10不是b数组中的元素38. 若定义数组int a10;指出下列错误语句:ABCDA) a数组共有10个元素,其引用方法是:a1,a2.a10;B) a数组是整型数组,其元素自动初始化为0;C) a数组最终一个元素的引用方法是a10;D) a数组第一个元素的引用方法是a1; 二、推断题1.数组是数目固定的若干变量的有序集合,数组中各元素的类型可以不同。 错 2.数组是C语言的一种构造数据类型,其元素的类型可以是整型、实型、字符型甚至构造类型。 对 3.设需定义一个有15个元素的数组a,并对其前5个元素赋初值,可用如下语句实现:int a=1,2,3,4,5; 错 4.数组定义时,只允许运用常量表达式定义数组的大小,其值必需是正整数,而不能用变量来定义数组长度。 对5.C语言数组的下标从0开场,下标必需是整数型的常量或变量。对6.数组是数目固定、类型一样的若干变量的有序集合。数组中的每一个数(变量)称为数组元素,数组中的全部元素都属于同一种数据类型。对7.数组元素下标的下界是固定的,总是为0。对8.一维数组在引用时下标的范围是:0 <= 下标 < 数组的长度 。对9.若有数组定义为:int a100;则该数组的下界为0,上界为100。数组元素下标范围是: 下界 <= 下标 < 上界。对10.设已定义:double a55; 则数组a在内存中的存放依次是:a00,a01,a02, . ,a43,a44 。 对 二填空题1.在C语言中,二维数组的元素在内存中的存放依次是 按行的依次依次存放 。2.若有定义:double x35,则x数组中行下标的下限为 0 ,列下标的下限为 0 。3.若有定义:int a34=1,2,0,4,6,8,10;则初始化后,a12的值为 0 ,a21得到的值为 6 。4.字符串”abn012”的长度是 8 。5.下面程序段的运行结果是 he 。 char x =”the teacher”; int i=0; while (x+i!=0) if (xi-1=t) printf(“%c”,xi);6.欲为字符串S1输入”Hello World!”,其语句是 scanf(“%s”,S1); 。7.欲将字符串S1复制到字符串S2中,其语句是 strcpy(S2,S1); 。8.假设在程序中调用了strcat函数,则须要预处理嘱咐 #include <string.h> 。假设调用了gets函数,则须要预处理嘱咐 #include <stdio.h> 。9.C语言数组的下标总是从 0 开场,不行以为负数;构成数组各个元素具有一样的 数据类型 。10.字符串是以 0 为完毕标记的一维字符数组。有定义:char a=”;则a数组的长度是 0 。三程序阅读题1.写出下面程序的运行结果。 main ( ) int a66,i,j ; for (i=1; i<6 ; i+) for (j=1 ; j<6 ; j+) aij=(i/j)*(j/i) ; for (i=1;i<6 ; i+) for (j=1 ; j<6 ; j+) printf(“%2d”,aij) ; printf(“n”); 运行结果:2.写出下面程序的运行结果。 main ( ) int i=0; char a =”abm”, b =”aqid”, c10; while (ai!=0 && bi!=0) if (ai>=bi) ci=ai-32 ; else ci=bi-32 ; i+; ci=0; puts(c); 运行结果:AQM3.当运行下面程序时,从键盘上输入AabD,则写出下面程序的运行结果。 main ( ) char s80; int i=0; gets(s); while (si!=0) if (si<=z && si>=a) si=z+a-si ; i+; puts(s); 运行结果:AzyD4.写出下面程序的运行结果。 main ( ) int i,c; char s25=“8980”,”9198”; for (i=3; i>=0 ; i-) c=s0i+s1i-2*0; s0i = c % 10 + 0 ; for (i=0; i<=1; i+) puts(si); 运行结果:注:s数组中每个字符的ASCII值为:5.当运行下面程序时,从键盘上输入7 4 8 9 1 5,则写出下面程序的运行结果。 main ( ) int a6,i,j,k,m; for (i=0 ; i<6 ; i+) scanf (“%d”,&ai); for (i=5 ; i>=0; i-) k=a5; for (j=4; j>=0; j-) aj+1=aj ; a0=k; for (m=0 ; m<6 ; m+) printf(“%d ”,am); printf(“n”); 运行结果:四程序填空题1.下面程序可求出矩阵a的主对角线上的元素之和,请填(2)空使程序完好。 main ( ) int a33=1,3,5,7,9,11,13,15,17 , sum=0, i, j ; for (i=0 ; i<3 ; i+) for (j=0 ; j<3 ; j+) if (【i=j】) sum=sum+【aij】; printf(“sum=%d”,sum);2.下面程序将十进制整数n转换成base进制,请填(3)空使程序完好。main ( ) int i,base,n,j,num20 ; scanf(“%d”,&n); scanf(“%d”,&base) ; do i+; numi=【n%base 】; n=【n/base】; while (n!=0); for (【j=i;j>0;j-】) printf(“%d ”,numj) ;3.下面程序的功能是输入10个数,找出最大值和最小值所在的位置,并把两者对调,然后输出调整后的10个数,请填(3)空使程序完好。main ( ) int a10,max,min,i,j,k ; for (i=0; i<10; i+) scanf(“%d”,&ai); max=min=a0; for (i=0; i<10; i+) if (ai<min) min=ai; 【j=i】; if (ai>max) max=ai; 【k=i】; 【max=aj;aj=ak;ak=max;】 for (i=0; i<10; i+) printf(“%d ”,ai);4.下面程序的功能是在一个字符串中查找一个指定的字符,若字符串中包含该字符则输出该字符在字符串中第一次出现的位置(下标值),否则输出1,请填(2)空使程序完好。# include <string.h>main ( ) char c=a ; /* 须要查找的字符*/ char t50 ; int i,j,k; gets(t) ; i = 【strlen(t) 】; for (k=0; k<i; k+) if (【tk=c 】) j = k ; break ; else j=-1; printf(“%d”,j);5.下面程序用“依次查找法”查找数组a中是否存在某一关键字,请填(2)空使程序完好。main ( ) int a10=25,57,48,371,123,291,18,22,44; int i=0,x ; scanf(“%d”,&x); 【a10=x】; while (ai!=x) i+ ; if (【i<10 】) printf(“found=%dn”,i); else printf(“cant found!n”);6. 以下程序是将字符串b的内容连接字符数组a的内容后面,形成新字符串a,请填(2)空使程序完好。main ( ) char a40=”Great ”, b =”Wall”; int i=0,j=0 ; while (ai!=0) i+ ; while (【bj!='0' 】) ai=bj ; i+ ; j+ ; 【ai='0'】; printf(“%sn”,a);五、编程题1 输入一行数字字符,请用数组元素作为计数器来统计每个数字字符的个数。用下标为0元素统计字符“0”的个数,下标为1的元素统计字符“1”的个数,.。#include <stdio.h>#define N 80void main() char chsN;int i,count10;printf("Input a string:");scanf("%s",chs);for(i=0;i<10;i+) counti=0;for(i=0;i<N;i+)countchsi-'0'+;for(i=0;i<10;i+)if(counti) printf("%d counts:%dn",i,counti);2 编写程序求随意方阵每行、每列、两对角线元素之和。#include <stdio.h>#define N 5#define M 5void main() int aNM=3,4,7,8,9,6,8,2,1,3,8,5,4,3,2,7,6,9,1,5, 5,6,4,1,7;int s1N;/存放每行的和int s2M;/存放每列的和int sum1=0,sum2=0;/存放两对角线的和int i=0,j=0;for(i=0;i<N;i+) s1i=0;for(i=0;i<M;i+) s2i=0;for(i=0;i<N;i+)/计算每行的和for(j=0;j<M;j+)s1i+=aij;for(j=0;j<M;j+)/计算每列的和for(i=0;i<N;i+)s2j+=aij;for(i=0;i<N;i+)/计算对角线的和sum1+=aii;for(i=0;i<N;i+)/计算每行的和sum2+=aiM-1-i;printf("每行和:");for(i=0;i<N;i+) printf("%d ",s1i);printf("n每列和:");for(i=0;i<M;i+) printf("%d ",s2i);printf("n对角线和:");printf("%d,%d ",sum1,sum2);3 编写程序求两个矩阵的和。#include <stdio.h>#define N 4#define M 5void main() int aNM=3,4,7,8,9,6,8,2,1,3,8,5,4,3,2,7,6,9,1,5 ;int bNM=2,4,7,5,9,7,8,2,5,3,9,5,4,3,2,8,6,9,1,5 ;int cNM,i,j;for(i=0;i<N;i+) /计算矩阵的和for(j=0;j<M;j+)cij=aij+bij;for(i=0;i<N;i+) for(j=0;j<M;j+)printf("%d ",cij);printf("n");4 编写程序打印出以下形式的乘法九九表。 * A MULTIPCATION TABLE * (1) (2) (3) (4) (5) (6) (7) (8) (9) (1) 1 2 3 4 5 6 7 8 9 (2) 2 4 6 8 10 12 14 16 18 (3) 3 6 9 12 15 18 21 24 27 (4) 4 8 12 16 20 24 28 32 36 (5) 5 10 15 20 25 30 35 40 45 (6) 6 12 18 24 30 36 42 48 54 (7) 7 14 21 28 35 42 49 56 64 (8) 8 16 24 32 40 48 56 64 72 (9) 9 18 27 36 45 54 63 72 81#include <stdio.h>void main() int i=0,j=0;printf(" * A MULTIPCATION TABLE *n");printf(" -n"); printf(" (1) (2) (3) (4) (5) (6) (7) (8) (9)n");for(i=1;i<10;i+)printf("(%d)",i);for(j=1;j<10;j+)printf(" %3d",i*j);printf("n");5 调用随机函数为5*4的矩阵置100以内的整数,输出该矩阵,求出每行元素之和,并把和值最大的那一行与第一行上的元素对调。若已定义x为int类型,调用随机函数步骤如下: #include "stdlib.h" . . x=rand()%100 /*产生0到100的随机数*/ #include <stdio.h>#include "stdlib.h"#define N 5#define M 4void main() int aNM;int i,j,x;int index=0,max,temp=0;int s1N;/存放每行的和for(i=0;i<N;i+) s1i=0;for(i=0;i<N;i+) /置100以内的随机整数for(j=0;j<M;j+)x=rand()%100 /*产生0到100的随机数*/;aij=x;for(i=0;i<N;i+) /输出矩阵for(j=0;j<M;j+)printf("%d ",aij);printf("n");for(i=0;i<N;i+)/计算每行的和for(j=0;j<M;j+)s1i+=aij;for(i=0;i<N;i+)/输出每行的和printf("n第%d行和:%d",i,s1i);max=s10;index=0;for(i=1;i<N;i+)/找出和值最大的行if(s1i>max)max=s1i;index=i;for(i=0;i<M;i+)/把和值最大的那一行与第一行上的元素对调temp=a0i;a0i=aindexi;aindexi=temp;printf("n");for(i=0;i<N;i+) /输出对调后的矩阵for(j=0;j<M;j+)printf("%d ",aij);printf("n");