收藏 分销(赏)

C语言数组练习题.doc

上传人:w****g 文档编号:3052041 上传时间:2024-06-14 格式:DOC 页数:21 大小:61.54KB 下载积分:10 金币
下载 相关 举报
C语言数组练习题.doc_第1页
第1页 / 共21页
C语言数组练习题.doc_第2页
第2页 / 共21页


点击查看更多>>
资源描述
第七章 数 组 1.在C语言中引用数组元素时,下面关于数组下表数据类型的说法错误的是( ) A)整型常量 B)整型表达式 C) 整型常量或整型表达式 D) 任何类型的表达式 2.以下能正确定义一维数组a的选项是(   ) A)int a=[5]={0,1,2,3,4,5}; B) char a[ ]={0,1,2,3,4,5}; C)char a={ 'A','B','C',}; D) int a[5]= "0,1,2,3" 3.以下能正确定义一维数组a的选项是( ) A) int a(10); B) int n=10, a[n]; C) int n; D) #define SIZE 10 scanf("%d",&n); int a[SIZE]; int a[n]; 4.若有定义:int a[10];则正确引用数组a元素的是( ) A) a[10] B) a[3] C) a[5] D) a[-10] 5.以下不正确的数组定义是( ) A) double x[5]={2.0,4.0,6.0,8.0,10.0}; B) int y[5]={0,1,3,5,7,9}; C) char c1[ ]={'1','2','3','4','5'}; D) char c2[ ]={'\x10','\xa','\x8'}; 6.以下叙述中错误的是( ) A)对于double类型数组,不可以直接用数组名对数组进行整体输入或输出 B)数组名代表的是数组所占存储区的首地址,其值不可改变 C)当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息 D)可以通过赋初值的方式确定数组元素的个数 7.以下正确的二维数组定义是( ) A)int a[ ] [ ]={1,2,3,4,5,6}; B)int a[2][ ]={1,2,3,4,5,6}; C)int a[ ][3]={1,2,3,4,5,6}; D)int a[2,3]={1,2,3,4,5,6}; 8.以下对二维数组a进行初始化正确的是( ) A)int a[2][ ]={{1,0,1},{5,2,3}}; B)int a[ ][3]={{1,2,3},{4,5,6}}; C)int a[2][4]={{1,2,3},{4,5},{6}}; D)int a[ ][3]={{1,0,1},{ },{1,1}}; 9.以下不能对二维数组a进行初始化的是( ) A)int a[2][3]={0}; B)int a[ ][3]={{1,2},{0}}; C)int a[2][3]={{1,2},{3,4},{5,6}}; D)int a[ ][3]={1,2,3,4,5,6}; 10.若有定义:int a[3][4];则正确引用数组a元素的是( ) A)a[2][4] B)a[3][3] C)a[0][0] D)a[3][4] 11.若定义了int b[ ][3]={1,2,3,4,5,6,7};则b数组第一维的长度是( ) A)2 B)3 C)4 D)无确定值 12.若有定义:int a[3][4]={0};以下叙述中正确的是( ) A)只有元素a[0][0]可得到初值0 B)此说明语句不正确 C)数组a中各元素都可得到初值,但其值不一定为0 D)数组a中每个元素均可得到初值0 13.若有定义:int a[ ][4]={0,0};以下叙述中错误的是( ) A)数组a的每个元素都可得到初值0 B)二维数组a的第一维大小为1 C)因为初值个数除以a中第二维大小的值的商为0,故数组a的行数为1 D)只有元素a[0][0]和a[0][1]可得到初值0,其余元素均得不到初值0 14.若二维数组a有m列,则计算元素a[ i ][ j ]在数组中相对位置的公式为( ) A)i*m+j B)j*m+i C)i*m+j—1 D)i*m+j+1 15.设char x[ ]="12345",y[ ]={'1','2','3','4','5','\0'};以下叙述中正确的是( ) A)x数组的长度等于y数组的长度 B)x数组的长度大于y数组的长度 C)x数组的长度少于y数组的长度     D)x数组与y数组的存储区域相同 16.下面是对字符数组s进行初始化,其中不正确的是( ) A)char s[5]={"abc"}; B)char s[5]={'a','b','c'}; C)char s[5]=" "; D)char s[5]="abcde"; 17.字符数组s不能作为字符串使用的是( ) A)char s[ ]="happy"; B)char s[6]={'h','a','p','p','y','\0'}; C)char s[ ]={"happy"}; D) char s[5]={ 'h','a','p','p','y','\0'}; 18.下面有关字符数组的描述中错误的是( ) A)字符数组可以存放字符串 B)字符串可以整体输入、输出 C)可以在赋值语句中通过赋值运算对字符数组整体赋值 D)不可以用关系运算符对字符数组中的字符串进行比较 19.下面程序段执行后的输出结果是( ) int k,a[3][3]={1,2,3,4,5,6,7,8,9}; for (k=0;k<3;k++) printf("%d",a[ k ][2-k]); A)3 5 7 B)3 6 9 C)1 5 9 D)1 4 7 20.下面程序段执行后的输出结果是( ) char c[5]={'a','b','\0','c','\0'}; printf("%s",c); A)'a' 'b' B)ab C)ab c D)abc 21.有两个字符数组a、b,则以下( )是正确的输入语句 A)gets (a,b); B)scanf ("%s%s",a,b); C)scanf ("%s%s",&a,&b); D)gets ("a");gets ("b"); 22.下面程序段执行后的输出结果是( ) char a[7]="abcdef"; char b[4]="ABC"; strcpy (a,b); printf ("%c",a[5]); A)空格 B)\0 C)e D)f 23.下面程序段执行后的输出结果是( ) char c[ ]="\t\b\\\0will\n"; printf ("%d",strlen (c) ); A)14 B)3 C)9 D)6 24.判断字符串a是否大于b,应当使用( ) A)if (a>b) B)if (strcmp (a,b) ) C)if (strcmp(b,a)>0) D)if (strcmp(a,b)>0) 25.表达式strcmp("3.14","3.278")的值是( ) A)非零整数 B)浮点数 C)0 D)字符 26.以下叙述中正确的是( ) A)两个字符串所包含的字符个数相同时,才能比较字符串 B)字符个数多的字符串比字符个数少的字符串大 C)字符串"STOP︼"与"STOP"相等 D)字符串"That"小于字符串"That" 27.有以下程序: # include <stdio.h> # include <string.h> void main( ) { char p[ ]={'a','b','c'},q[10]={'a','b','c'}; printf ("%d %d",strlen(p), strlen(q)); } 以下叙述正确的是( ) A)在给p和q数组置初值时,系统会自动添加字符串结束符,故输出的长度都为3 B)由于p数组中没有字符串结束符,长度不能确定;但q数组中字符串长度为3 C)由于q数组中没有字符串结束符,长度不能确定;但p数组中字符串长度为3 D)由于p和q数组中都没有字符串结束符,故长度都不能确定 28.下面程序运行时从键盘上输入:123 456 789↙,其输出结果是( ) # include <stdio.h> void main( ) { char s[100];int c, i; scanf ("%c",&c);scanf ("%d",&i);scanf ("%s",s); printf("%c,%d,%s",c,i,s); } A)123,456,789 B)1,456,789 C)1,23,456,789 D)1,23,456 29.下面程序运行时从键盘上输入:ABC↙,其输出结果是( ) # include <stdio.h> # include <string.h> void main( ) { char ss[10]="12345"; gets (ss);strcat(ss,"6789");printf("%s",ss); } A)ABC6789 B)ABC67 C)12345ABC6 D)ABC456789 30.下面程序执行后的输出结果是( ) # include <stdio.h> #include <string.h> void main( ) { char arr[2][4]; strcpy (arr,"you");strcpy(arr[1],"me"); arr[0][3]='&'; printf("%s",arr); } A)you&me B)you C)me D)错误 31.下面程序执行后的输出结果是( ) # include <stdio.h> void main( ) { char ch[7]="12ab56";int i,s=0; for (i=0;ch[i]>'0'&&ch[i]<='9';i+=2) s=10*s+ch[i]-'0'; printf("%d",s); } A)1 B)1256 C)12ab56 D)ab 32.下面程序执行后的输出结果是( ) # include <stdio.h> void main( ) { char str[ ]="SSWLIA", c;int k; for (k=2;( c=str[k] )!='\0';k++) { switch ( c ) { case 'I':++k;break; case'L':continue; default:putchar( c );continue; } putchar( ' * ' ); } } A)SSW B)SW* C)SW*A    D)SW 33.下面程序执行后的输出结果是( ) # include <stdio.h> void main( ) { int a[3][3]={ {1,2 },{ 3,4 }.{ 5,6 } },i , j , s=0; for (i=1;i<3;i++) for (j=0;j<=i;j++) s+=a[i][j]; printf("%d",s); } A)18 B)19 C)20 D)21 34.下面程序执行后的输出结果是( ) # include <stdio.h> void main( ) { char w[ ][10]={"ABCD","EFGH","IJKL","MNOP"} , k; for (k=1;k<3;k++) printf("%s",w[k]); } A)ABCDFGHKL B)ABCDEFGIJM C)EFGJKO D)EFGHIJKL 35.下面程序执行后的输出结果是( ) # include <stdio.h> void main( ) { int aa[4][4]={ {1,2,3,4},{5,6,7,8},{3,9,10,2},{4,2,9,6} }; int i,s=0; for (i=0;i<4;i++) s+=aa[i][1]; printf("%d",s); } A)11 B)13 C)19 D)20 二、填空题 1、C语言数组的下标总是从_____开始,不可以为负数;数组各个元素具有相同的_____. 2. 在C语言中,二维数组的元素在内存中的存放顺序是_____________________. 3.在C语言中,一个二维数组可以看成若干个________________数组. 4.若定义:int a[3][4]={{1,2},{0},{4,6,8,10}};则初始化后a[1][2]的值为______,a[2][1]得到的值为_______ 5.若定义:double x[3][5];则x数组中行下标的上限为____,列下标的上限为_____ 6.字符串是以_____为结束标的一维字符数组.若有定义:char a[]=” “;则a数组的长度是_____. 7.字符串”ab\n\\012\\”的长度是________. 8.若定义:char a[]=”abcdefg”,b[10]=”abcdefg”;语句printf(“%d,%d”,sizeof(a),sizeof(b));.”执行后的输出结果是_____________. 9.若要求从键盘读入含有空格的字符串,应使用_______函数. 10.欲为字符串s1输入”hello world”,其语句是_________________ 11.欲为字符串s1复制到字符串S2中,其语句是_________________ 12,如果在程序中调用了strcat函数,则需要预处理命令__________________。如果在程序中调用了gets函数,则需要预处理命令__________________。 13.如果在程序中调用了isupper函数,则需要预处理命令__________________。 14.若定义:char a[]=”windows”,b[]=”9x”;则执行语句printf(“%s”,strcat(a,b));”后的输出结果为:____________________。 15.下面程序执行后的输出结果是 #include <stdio.h> Void main( ) {int p[8]={11,12,13,14,15,16,17,18},i=0,j=0; while (i++<7) if(p[i]%2) j+=p[i]; printf(“%d”,j); } 16.下面程序执行后的输出结果是 #include <stdio.h> void main( ) {inta[3][3]={{1,2,9},{3,4,8},{5,6,7}},I,s=0; for(i=0;i<3;i++) s+=a[i][i]+a[i][3-i-1]; printf(“%d”,s); } 17. 下面程序执行后的输出结果是 char x[]=”the teacher”;int i=0; while(x[++i]!=’\0’) if(x[i-1]= =’t’) printf(“%c”,x[i]); 18. 下面程序执行后的输出结果是 #include <stdio.h> void main( ) {char b[]=”hello,you”; b[5]=0; printf(“%s”,b); } 19. 下面程序执行后的输出结果是 char a[7]=”a0\0a0\0”;int i,j; i=sizeof(a);j=strlen(a); printf(“%d,%d”,i,j); } 20. 若定义:char a[80]=”95”,b[]=”windows”;则执行语句printf(“%s”,strcat(a,b));”后的输出结果为:____________________ 三、程序阅读题1-20 1./*写出下面程序执行后的运行结果*/ #include<stdio.h> void main() { int i,n[]={0,0,0,0,0}; for(i=1;i<=4;i++) { n[i]=n[i-1]*2+1; printf("%d",n[i]); } } 2./*写出下面程序执行后的运行结果*/ #include<stdio.h> void main() { int i,a[5]; for(i=0;i<5;i++) a[i]=9*(i-2+4*(i>2))%5; for(i=4;i>=0;i--) printf("%d",a[i]); } 3./*下面程序运行时从键盘上输入:7 4 8 9 1 5 ,写出程序的运行结果。*/ #include<stdio.h> void main() { int a[6],i,j,k,m;//int a[6]={7,4,8,9,1,5},i,j,k,m; for(i=0;i<6;i++) scanf("%d",&a[i]); for(i=5;i>=0;i--) { k=a[5]; for(j=4;j>=0;j--) a[j+1]=a[j]; a[0]=k; for(m=0;m<6;m++) printf("%d",a[m]); printf("\n"); } } 4./*下面程序运行时从键盘上输入:1 2 3 -4 ,写出程序的运行结果。*/ #include<stdio.h> void main() { int i,k=0,s=0,a[10]; while(1) { scanf("%d",&a[k]); if(a[k]<=0) break; s=s+a[k++]; } for(i=0;i<k;i++) printf("%d",a[i]); printf("%d",s); } 5./*写出下面程序执行后的运行结果*/ #include<stdio.h> void main() { int i,k=5,a[10],p[3]; for(i=0;i<10;i++) a[i]=i; for(i=0;i<3;i++) p[i]=a[i*(i+1)]; for(i=0;i<3;i++) k+=p[i]*2; printf("%d\n",k); } 6./*写出下面程序执行后的运行结果*/ #include<stdio.h> void main() { int x[]={1,3,5,7,2,4,6,0},i,j,k; for(i=0;i<3;i++) for(j=2;j>=i;j--) if(x[j+1]>x[j]) {k=x[j];x[j]=x[j+1];x[j+1]=k;} for(i=0;i<3;i++) for(j=4;j<7-i;j++) if(x[j+1]>x[j]) {k=x[j];x[j]=x[j+1];x[j+1]=k;} for(i=0;i<3;i++) for(j=4;j<7-i;j++) if(x[j]>x[j+1]) {k=x[j];x[j]=x[j+1];x[j+1]=k;} for(i=0;i<8;i++) printf("%d",x[i]); } 7./*写出下面程序执行后的运行结果*/ #include<stdio.h> void main() { int a[6][6],i,j; for(i=1;i<6;i++) for(j=1;j<6;j++) a[i][j]=(i/j)*(j/i); for(i=1;i<6;i++) { for(j=1;j<6;j++) printf("%2d",a[i][j]); printf("\n"); } } 8./*写出下面程序执行后的运行结果*/ #include<stdio.h> void main() { int a[3][3]={{1},{2},{3}}; int b[3][3]={1,2,3}; printf("%d",a[1][0]+b[0][1]); printf("%d\n",a[0][1]+b[1][0]); } 9./*写出下面程序执行后的运行结果*/ #include<stdio.h> void main( { int a[4][4]={{1,2,3,4},{5,6,7,8},{11,12,13,14},{15,16,17,18}}; int i=0;j=0;s=0; while(i++<4) { if(i==2||i==4) continue; j=0; do { s+=a[i][j];j++} while(j<4); } printf("%d",s); } 10./*写出下面程序执行后的运行结果*/ #include<stdio.h> void main() { int a[3][3]={1,4,17,3,6,19,2,5,18},i,s=0; for(i=0;i<=2;i++) s=s+a[i][2-i]; printf("s=%d",s); } 11./*写出下面程序执行后的运行结果*/ #include<stdio.h> void main() { int b[3][3]=(0,1,2,0,1,2,0,1,2},i,j,t=1; for(i=0;i<3;i++) for(j=i;j<=i;j++) t=t+b[i][b[j][j]]; printf("%d",t); } 12. /*写出下面程序执行后的运行结果*/ #include<stdio.h> void main() { int i,j,a[4][4]; for(i=0;i<4;i++) for(j=0;j<4;j++) a[i][j]=1+i-j; for(i=0;i<4;i++) { for(j=0;j<4;j++) if(a[i][j]>0) printf("%3d",a[i][j]); putchar('\n'); } } 13./*写出下面程序执行后的运行结果*/ #include<stdio.h> void main() { int a[4][3]={{1,2,3},{-2,0,2},{1,0,1},{-1,2,-3}}; int b[3][2]={{-1,3},{-2,2},{2,1}}; int c[4][2],i,j,k,s; for(i=0;i<4;i++) { for(k=0;k<2;k++) { s=0; for(j=0;j<3;j++) s+=a[i][j]*b[j][k]; c[i][k]=s; printf("%4d",s); } printf("\n"); } } 14./*写出下面程序执行后的运行结果*/ #include<stdio.h> void main() { int i,j,a[][3]={1,2,3,4,5,6,7,8,9}; for(i=0;i<3;i++) for(j=i+1;j<3;j++) a[j][i]=0; for(i=0;i<3;i++) { for(j=0;j<3;j++) printf("%d",a[i][j]); printf("\n"); } } 15. /*写出下面程序执行后的运行结果*/ #include<stdio.h> void main() { char a[8]={' '},t; int j,k; for(j=0;j<5;j++) a[j]=(char)('a'+j); for(j=0;j<4;j++) { t=a[4]; for(k=4;k>0;k--) a[k]=a[k-1]; a[0]=t; } printf("%s",a); } 16. /*写出下面程序执行后的运行结果*/ #include<stdio.h> void main() { char s[80]; int i=0; gets(s); while(s[i]!='\0') { if(s[i]<='z'&&s[i]>='a') s[i]='z'+'a'-s[i]; i++; } puts(s); } 17. /*写出下面程序执行后的运行结果*/ #include<stdio.h> void main() { int i=0; char a[]="abm",b[]="aqid",c[10]; while(a[i]!='\0'&& b[i]!='\0') { if(a[i]>=b[i]) c[i]=a[i]-32; else c[i]=b[i]-32; i++; } c[i]='\0'; puts(c); } 18./*写出下面程序执行后的运行结果*/ #include<stdio.h> void main() { int i=0; char c,s[]="SABC"; while(c=s[i]) { switch(c) { case 'A':i++;break; case 'B':++i; default:putchar(c);i++; } putchar('*'); } } 19. /*写出下面程序执行后的运行结果*/ #include<stdio.h> void main() { int i,c; char s[2][5]={"1980","9876"}; for(i=3;i>=0;i--) { c=s[0][i]=s[1][i]-2*'0'; s[0][i]=c%10; } for(i=0;i<=1;i++) puts(s[i]); } 20./*写出下面程序执行后的运行结果*/ #include<stdio.h> void main() { char ch[]="abc",x[3][4];int i; for(i=0;i<3;i++) strcpy(x[i],ch); for(i=0;i<3;i++) printf("%s",x[i][i]); } 四、程序填空题1-20 /*1.下面程序的功能是将十进制整数n转换成base进制。请填空使程序完整、正确*/ #include<stdio.h> void main() {int i=0,base,n,j,num[20]; scanf("%d",&n); scanf("%d",&base); do{ i++; num[i]=【1】; n=【2】; }while(n!=0); for(【3】) printf("%d",num[j]); } /*2.下面程序的功能是输入10个数,找出最大值和最小值所在的位置,并把两者对调,然后输出调整后的10个数。请填空使用程序完整、正确。*/ #include<stdio.h> void main() { int a[10],max,min,i,j,k; for(i=0;i<10;i++) scanf("%d",&a[i]); max=min=a[0],j=k=0; for(i=0;i<10;i++) { if(a[i]<min) {min=a[i];【1】;} if(a[i]>max) {max=a[i];【2】;} } 【3】; for(i=0;i<10;i++) printf("%d",a[i]); } /*3.下面程序的功能是将数组输入数据,逆序置换后输出。逆序置换是指数组的首元素和末元素置换,第二个元素和倒数第二个元素置换……请填空使用程序完整、正确。*/ #include<stdio.h> #define N 8 void main() { int i,j,t,a[M]; for(i=0;i<N;i++) scanf("%d",a[i]); i=0;j=N-1; while(i<j) { t=a[i],【1】,a[i]=t; i++,【2】; } for(i=0;i<N;i++) printf("%5d",a[i]); } /*4.下面程序的功能是用“两路合并法”把两个已按升序(由小到大)排列的数组合并成一个新的升序数组。请填空使程序完整、正确。*/ #include<stdio.h> void main() { int c[10],i=0,j=0,k=0; int a[3]={5,9,10};int b[5]={12,24,26,37,48}; while(i<3 && j<5) if(【1】) { c[k]=b[j];k++;j++; } else { c[k]=a[i];k++;i++; } while (【2】) { c[k=ai];i++;k++; } while(【3】) { c[k]=b[j];j++;k++; } for(i=0;i<k;i++) printf("%d",c[i]); } /*5.下面程序的功能是读入n(n<=10)个整数并放入一个数组r中,统计并输出比相邻元素小的数组元素的个数。请填空使程序完整、正确。*/ #include<stdio.h> void main() { int k,count,n,r[10]; scanf("%d",&n): for(k=0;k<n;k++) scanf("%d",&r[k]); 【1】; for(k=1;k<n-1;k++) if(【2】) count++; if(【3】) count++; if(r[n-1]<r[n-2]) count++; printf("count=%d",count); } /*6.下面程序的功能是用“顺序查找法”查找数组a中是否存在某一关键字。请填空使程序完整、正确。*/ #include<stdio.h> void main() { int a[10]={2557,48,371,123,291,18,22,44}; int i=0,x; scanf("%d",&x); 【1】; while(a[i]!=x) i++; if(【2】) printf("找到在%d",i); else printf("找不到!"); } /*7.下面程序的功能是用“插入法”对数组a进行由大到小的排序。请填空使程序完整、正确。 提示:简单插入排序算法的基本思想是将数组处理n-1,第k次处理时,前面的元素插入到目前的位置。第k次的元素是这样插入的:在第k次处理时,前面的元a[0],a[1],……a[k-1]必定已排成了升序,将a[k]与a[k-1],a[k-2],……a[0]逐个比较(由后向前),若有a[j]<a[k],则a[k]插入到a[j]之后,否则a[k]维持原位不变。*/ #include<stdio.h> void main() { int a[10]={191,3,6,4,11,7,25,13,89,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服