第4章数组练习题
一、选择题
1.在c语言中,引用数组元素时,其数组下标的数据类型允许是()。
A)整型常量 B)整型表达式C)整型常量或整型表达式 D)任何类型的表达式
2.要说明一个有10个int元素的数组,应当选择语句()。
A) int a[10]; B) int a(10); C) int a[9] D) int a[11]
3.对以下说明语句的正确理解是()。
int a[10]={6,7,8,9,10};
A)将5个初值依次赋给a[1]至a[5]
B)将5个初值依次赋给a[0]至a[4]
C)将5个初值依次赋给a[6]至a[10]
D)因为数组长度与初值的个数不相同,所以此语句不正确
4.已知:int a[10];则对a数组元素的正确引用是()。
A) a[10] B) a[3.5] C) a(5) D) a[10-10]
5.以下对一维整型数组a的正确说明是()。
A) int a(10); B)int n=10,a[n];
C) int n; D)#define SIZE 10;
scanf("%",&n); int a[SIZE];
int a[n];
6.要定义一个int型一维数组art,并使其各元素具有初值89,-23,0,0,0,不正确的定义
语句是()。
A) int art[5]={89,-23};
B) int art[ ]={89,-23};
C) int art[5]={89,-23,0,0,0};
D) int art[ ]={89,-23,0,0,0};
7.在C语言中,二维数组元素在内存中的存放顺序是()。
A)按行存放 B)按列存放 C)由用户自己定义 D)由编译器决定
8.以下对二维数组a的正确说明是()。
A)int a[3][] B) float a(3,4) C) double a[1][4] D) float a(3)(4) 9.已知:int a[3][4];则对数组元素引用正确的是()。
A)a[2][4] B)a[1,3] C) a[2][0] D) a(2)(1) 10.已知:int a[3][4]={0};则下面正确的叙述是()。
A)只有元素a[0][0]可得到初值0
B)此说明语句是错误的
C)数组a中的每个元素都可得到初值,但其值不一定为0
D)数组a中的每个元素均可得到初值0
11.以下各组选项中,均能正确说明二维实型数组a的是()。
A) float a[3][4]; B) float a(3,4);
float a[][4]; float a[3][4];
float a[3][]={{1},{0}}; float a[][]={{0},{0}};
C) f loat a[3][4]; D) float a[3][4];
float a[][4]={{0},{0}}; float a[3][];
float a[][4]={{0},{0},{0}}; float a[][4];
12.已知:int a[][3]={1,2,3,4,5,6,7};则数组a的第一维的大小是()。
A)2 B)3 C)4 D)无确定值
13.若二维数组a有m列,则在a[i][j]之前的元素个数为()。
A) j*m+i B) i*m+j C) i*m+j-1 D) i*m+j+1
14.要使字符数组str存放一个字符串"ABCDEFGH",正确的定义语句是()。
A) char str[8]={'A','B','C','D','E','F','G','H'};
B) char str[8]="ABCDEFGH";
C) char str[ ]={'A','B','C','D','E','F','G','H'};
D) char str[ ]="ABCDEFGH";
15.下面是对数组s的初始化,其中错误的是()。
A) char s[5]={"abc"} B) char s[5]={'a','b','c'};
C) char s[5]=""; D) char s[5]="abcde";
16.对两个数组a和b进行如下初始化
char a[]="ABCDEF";
char b[]={'A','B','C','D','E','F'};
则以下叙述正确的是()。
A) a与b数组完全相同 B) a与b长度相同
C) a和b中都存放字符串 D) a数组比b数组长度长
17.下面程序的运行结果是()。
char c[5]={'a','b','\0','c','\0'};
printf("%s",c);
A) 'a''b' B) ab C) ab c D) 以上三个答案均有错误
18.下面程序段运行的结果是()。
char s[]="a book!";
printf("%.4s",s);
A) a book! B) a bo
C) a boo D) 格式描述不正确,没有确定的输出
19.合法的数组定义是()。
A) int a[]="string"; B) int a[5]={0,1,2,3,4,5};
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 ("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 s[12]="string";
printf("%d",strlen(s));
A) 12 B) 7 C) 6 D) 5
25.函数调用strcat ( strcpy ( str1,str2 ), str3 )的功能是()。
A)将字符串str1复制到字符串str2中,再连接到字符串str3之后
B)将字符串str1连接到字符串str2之后,再复制到字符串str3之后
C)将字符串str2复制到字符串str1中,再将字符串str3连接到字符串str1之后
D)将字符串str2连接到字符串str1之后,再将字符串str1复制到字符串str3之中
26.有下面的程序段
char a[3],b[]="china";
printf("%s",a);
则()。
A)运行后将输出ch B)运行后将输出Ch
C)运行后将输出chi D)编译出错
27.下面描述正确的是()。
A)两个字符串所包含的字符个数相同时,才能比较字符串
B)字符个数多的字符串比字符个数少的字符串大
C)字符串"STOP"与"STOP "相等
D)字符串"hat"小于字符串"het"
28.下面程序段的运行结果是()。
char c[]="\t\b\\\0will\n";
printf ( "%d", strlen (c));
A) 14 B) 3 C) 9 D) 字符串中有非法字符,输出值不确定
29.下面程序段的运行结果是()。(其中~表示空格)
char a[7]="abcdef",b[4]="ABC";
strcpy (a,b);
printf ("%c",a[5]);
A) ~ B) \0 C) e D) f
30.以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。
#define N 10
void arrin(int x[N])
{ int i=0;
while(i scanf("%d", ); } 在下划线处应填入的是( )。 A) x+i B)&x[i+1] C)x+(i++) D)&x[++i] 二、填空题 1.构成数组的各个元素必须具有相同的数据类型。C语言中数组的下标必须是整正数、0 或整型表达式。如果一维数组的长度为n ,则数组下标的最小值为 0 ,最大值为n-1 。 2.在C语言中,一维数组的定义方式为:类型说说明符数组名 [常量表达式] 。 3.在C语言中数组名是一个地址常量,不能对其进行加、减及赋值操作。 4.已知数组T为一有10个单元的整型数组,正序输出T中的10个元素的值的语句为: for (j=0;j<10;j++) printf(“%d”,T[j]); 下面的语句试图按相反的顺序显示输出T中的10个元素的相反数;请补充完整下面的语句:for( j=9 ; j>=0 ;j- -)printf(“%d”, T[j] ); 5.字符数组是用来存放字符串的数组。字符数组中一个元素存放 1 个字符。 6.在C语言中存放字符'A'需要占用 1 个字节,存放字符串"A"需要占用 2 个字节。 7.当需要接受用户从键盘输入的含有空格的字符串时,应使用gets()函数。 8.以下语句的输出结果是 c:\winxp\time.exe 。 printf("%s\n","c:\\winxp\\time.exe"); 9.执行“ static int b[5],a[][3]={1,2,3,4,5,6} ” 后,b[4]=( 0 ),a[1][2]=( 6 )。 10.若在程序中用到“ putchar() ”函数时,应在程序开头写上包含命令 (#include 三.完善程序题。 1.下面的程序是求出数组a的两条对角线上的元素之和。 #include "stdio.h" { int a[3][3]={{1,3,6},{7,9,11},{14,15,17}},sum1=0,sum2=0,i,j; for (i=0;i<3;i++) for (j=0;j<3;j++) if (i==j) sum1=sum1+a[i][j]; for (i=0;i<3;i++) for ( j=2 ; j>=0 ; j--) if (i+j==2) sum2=sum2+a[i][j]; printf("sum1=%d,sum2=%d\n",sum1,sum2); } 2.下面的程序段的功能是产生如下形式的杨辉三角形。 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 ...... ...... #define N 11 main() { int a[N][N],i,j; for (i=1;i { a[i][1]=1; a[i][i]=1; } for ( i=1 ; i for (j=2; j a[i][j]= a[i-1][j-1] +a[i-1][j]; ...... ...... } 3.下面程序的功能是输出数组s中最大元素的下标,请填空。 main() { int k,p; int s[]={1,-9,7,2,-10,3}; for(p=0,k=p;p<6;p++) if (s[p]>s[k])( k=p; ) printf("%d\n",k); } 4.下面程序的功能是将一个字符串str的内容颠倒过来,请填空。 #include "string.h" main( ) { int i,j,( k ); char str[]={"1234567"}; for(i=0,j=strlen(str),( j=j-1 );i { k=str[i];str[i]=str[j];str[j]=k;} } 5. 以下程序的功能是将字符串s中的数字字符放入d数组中,最后输出d中的字符串。例如,输入字符串:abc123edf456gh,执行程序后输出:123456。请填空。 #include #include main() { char s[80], d[80]; int i, j; gets(s); for(i=j=0; s[i]!=…\0?; i++) if(_s[j]>=?0?&& s[j]<=?9?__) { d[j]=s[i]; j++;} d[j]=…\0?; puts(d); } 四.阅读程序题 1.以下程序执行时输入Language Programming #include main() { char str[30]; scanf("%s",str); printf("str=%s\n",str); } 2.以下程序执行时输入Language Programming main() { char str[30]; gets(str); printf("str=%s\n",str); } 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+a[i]*j;j=j*10;} printf("s=%d\n",s); } 4.以下程序执行的结果是( 123 )。 #include main() { char str[]={" 1a 2b 3c "}; int i; for(i=0;str[i]!='\0';i++) if(str[i]>='0'&&str[i]<='9') printf("%c",str[i]); printf("\n"); } 5.以下程序执行的结果是( s=15 )。 #include main() { int a[3][3]={1,2,3,4,5,6,7,8,9},i,s=0; for(i=0;i<=2;i++) s=s+a[i][i]; printf("s=%d\n",s); } 6.以下程序执行的结果是( (1,1)=-5 )。 #include main() { int i,j,row=0,col=0,m; static int a[3][3]={1,-2,0,4,-5,6,2,4}; m=a[0][0]; for(i=0;i<3;i++) for(j=0;j<3;j++) if(a[i][j] {m=a[i][j]; row=i; col=j; } printf("(%d,%d)=%d\n",row,col,m); } 7.以下程序执行的结果是( 4, some string * test )。 #include main() { static char s1[50]={"some string * "}; static char s2[]={"test"}; printf("%d,",strlen(s2)); strcat(s1,s2); printf("%s\n",s1); } 8.下列程序段的输出结果是__ Hello _______。 main() { char b[]=”Hello,you”; b[5]=0; printf(“%s \n”, b ); } 9. 若有以下程序 main() { int a[4][4]={{1,2,-3,-4},{0,-12,-13,14},{-21,23,0,-24},{-31,32,-33,0}}; int i,j,s=0; for(i=0;i<4;i++) { for(j=0;j<4;j++) { if(a[i][j]<0)continue; if(a[i][j]==0)break; s+=a[i][j]; } } printf("%d\n",s); } 执行后输出的结果是____58___。 10. 若有以下程序 void prnt(int n, int aa[ ]) { int i; for(i=1; i<=n;i++) { printf(“%6d”, aa[i]); if( !(i%5) ) printf(“\n”); } printf(“\n”); } 若变量n中的值为24,则prnt函数共输出 5 行,最后一行有 4 个数。 三、编写程序题 1.从键盘上输入5个数,输出最大、最小的元素以及它们的下标 #define N 5 #include main( ) { int i,j,k, max,min; static int a[5]; for (i=0;i<5;i++) scanf("%d",&a[i]); max=min=a[0]; /*假定第一个元素既是最大的,也是最小的*/ j=k=0; /*对分别记录最大,最小元素下标的变量j,k初始化 */ for (i=0;i<5;i++)