内容正文:
<C语言程序设计教程>清华大学出版社(第3版)
第七章 数组 章节过关卷
考试时间:90分钟 满分:100分
姓名 班级 学号
1、 选择题(共10题,每小题2分,共20分)
1下列一维数组定义中,正确的是 。
A、 int a[ ]; B、int z=3,a1[z];
C、 int a(5); D、#define Z 5; int a[z];
【答案】D
【解析】A选项,数组定义时必须指定大小。B选项,[]中间必须是整型常量或者是整型常量表达式。C选项,数组大小必须用[]。故选D。
2、下列数组初始化中,错误的是 。
A、int a[5]={1,2,3}; B、char c[ ]={‘h’,’o’,’w’};
C、char c[ ]=”how”; D、int a[ ]={1,2,3};
【答案】B
【解析】字符数组要以’\0’结尾,C选项赋值方法系统默认加’\0’,B选项逐个赋值没有加’\0’,故错误。正确赋值char [ ]={‘h’,’o’,’w’,’\0’};故选B。
3、 若有定义int a[6];下列数组元素引用中,正确的是 。
A、a={1,2,3,4,5,6} B、a[6]={1,2,3,4,5,6}
C、a[6]=10; D、a[0]=1;a[1]=a[0]+5;
【答案】D
【解析】A选项,a是地址常量,不能赋值。B、C选项,a[6]不是数组元素,越界。故选D。
4、 下列二维数组中定义正确的是 。
A、int b[ ][2]; B、int b[2][ ]={{1},{2}};
C、int b[ ][2]={1,2,3,4}; D、int b[ ][ ]={1,2,3,4};
【答案】C
【解析】A选项,在不初始化的情况下,不能省略一维的大小。B、D选项,无法确定二维的大小。故选C。
5、 若有以下定义,输出结果是 。原创精品资源学科网独家享有版权,侵权必究!
char s[ ]=”ab12\\56
\xAD” ;
printf(“%d,%d”,sizeof(s),strlen(s));
A、10,9 B、9,10 C、9,8 D、8,9
【答案】A
【解析】sizeof()是求s[]数组所占字节数包括’\0’,strlen()求s[]数组长度不包括’\0’。故选A。
6、 若有以下定义,则下列输出结果是 。
int i,j,bb[3 ][4 ]={{1,2,3}{,4,5,6},{7,8,9}};
for(i=0;i<4;i++)
printf(“%d”,bb[1][i]);
A、1234 B、4560 C、2580 D、1230
【答案】B
【解析】输出中bb[1][i],输出数组第1行的全部元素,没有初始化的默认为0。故选B
7、 若有以下定义,则能正确引用数组元素的是 。
int x[3][4];
A、 x[0][4] B、x[3][3] C、x[2+1][0] D、x[1+1][1+2]
【答案】D
【解析】数组下标从0开始,第一维数组大小不能超过3,第二维数组大小不能超过4。故选D。
8、 若有定义如下,则表达式值不为4的是 。
int x[3][3]={1,2,3,4,5,6,7,8,9};
A、x[0][1]+1 B、x[2][1]/2 C、x[1][0] D、x[1][1]-1
【答案】A
【解析】x[0][1]是x数组0行1列元素为2,2+1=3。故选A
9、若有定义如下,则执行后输出结果是 。
char str[20]=”abc”,str1[ ]=”123456”;
strncpy(str,str1,4); str[2]=’\0’;
puts(str);
A、123456 B、123 C、12 D、abc123
【答案】C原创精品资源学科网独家享有版权,侵权必究!
【解析】strncpy()函数是将str1数组中前四个字符复制到str数组中,覆盖str数组中原本字符,又将str[2]元素赋值为’\0’,puts输出时遇到’\0’结束。故选C。
10、有如下程序段,则输出结果是 。
char str[]=” abcdefgh”;
int i;
for(i=0;str[i]!=’\0’;i++)
if(i++%3==0)
printf("%2c",toupper(str[i]));}
A、A D B、a d C、B H D、b h
【答案】C
【解析】注意if条件中i++为后置加,条件成立后i的值加1,toupper将小写字符变为大写字符。故选C
二、填空题(共6空,每空2分,共12分)
1、若有定义int x[20];数组起始地址为2000,则x[11]元素地址为: 。
若定义int x[6][5];数组起始地址为2000,则x[3][4]元素地址为: 。
【答案】2044。x[11]元素地址为2000+11*4(字节数)=2044
2076。x[3][4]元素地址为2000+(3*5+4)*4=2076
2、 若有定义char s1[20]=”shang”,s2[20]=”hai”;,如何将s1放到s2后面去,请写出语句 。
【答案】strcat(s2,s1)
3、 若有语句int x[5],i;现需要将数组元素赋值为奇数数(从1开始),语句是 。
【答案】for(i=0;i<5;i++) x[i]=i*2+1;
4、 若有定义字符数组str1和str2,如何判断str1大于str2 。
【答案】if(strcmp(str1,str2)>0)
5、 若有定义char b[20];且每个元素均已赋值,如何把b数组中前8个元素均赋值为字符5: 。
【答案】memset(b,'5',8*sizeof(char));
三、程序运行题(共6题,每小题3分,共18分) 原创精品资源学科网独家享有版权,侵权必究!
1、以下程序的运行结果是 。
#include<stdio.h>
void main()
{ int a[6]={1,2},i;
for(i=2;i<6;i++)
a[i]=a[a[i-1]-a[i]]*2;
for(i=0;i<6;i++)
printf(“%d,”,a[i]); }
【答案】1,2,0,2,0,2,
2、以下程序的运行结果是 。
#include<string.h>
voiud main( )
{ char s1[]=”China”;
int n,t,i,j;
n=strlen(s1);
for(i=0,j=n-1;i<j;i++,j--)
{ t=s1[i];s1[i]=s1[j];s1[j]=t;}
printf(“s1=%s
”,s1); }
【答案】s1=anihC
3、以下程序的运行结果是 。
#include <stdio.h>
void main( )
{ char s[]=”CBEHGTT”;
int i=0;
while(s[i++]!=’E’)
{ switch(s[i])
{ printf(“%s”,”good”);
case ‘A’: printf(“morning!”);break;
case ‘A’+1: printf(“afternoon!”);
default: printf(“evening”); } }原创精品资源学科网独家享有版权,侵权必究!
}
【答案】afternoon!eveningevening
4、以下程序的运行结果是 。
#include <stdio.h>
#include<string.h>
#define N 20
void main()
{ char str[5][N]={“huaihua”,”jiangxi”,”nanchang”,”changjiang”,”huanghe”},str1[N];
int i,j,len;
len=strlen(str[0]);
for(i=1;i<5;i++)
if(len<strlen(str[i])) {strcpy(str1,str[i]); len=strlen(str[i]); }
printf(“%s,len=%d”,str1,len); }
【答案】changjiang,len=10
5、以下程序的运行结果是 。
#include<stdio.h>
void main()
{ char s[]=”12sby\018c0v54s6”;
int i,n=1;
for(i=0;s[i]!=0;i++)
if(s[i]>=’0’&&s[i]<=’9’) n++;
printf("n=%d
”,n);
}
【答案】n=8
6、以下程序的运行结果是 。
#include<stdio.h>
void main( )
{ int n,i=0,j,b[20];
scanf(“%d”,&n);
while(n!=0) 原创精品资源学科网独家享有版权,侵权必究!
{ b[i++]=n%8;
n/=8; }
for(j=i-1;j>=0;j--)
printf(“%d”,b[j]); }
从键盘输入:51<回车>
【答案】63
四、程序填空题(共6空,每空5分,共30分)
1、程序功能:矩阵的转置。
#include<stdio.h>
#define N 3
void main()
{ int a[N][N]={1,2,3,4,5,6,7,8,9} ,i,j ,t;
for(i=0;i<N;i++)
for(j=0; ;j++)
;
for(i=0;i<N;i++)
{ for(j=0;j<N;j++)
printf("%d",a[i][j]);
printf("
");}
}
【答案】 j<i t=a[i][j], a[i][j]=a[j][i],a[j][i]=t
2、程序功能:将字符串中连续的数字字符取出组成整数,存放到整型数组中。
#include<stdio.h>
void main()
{ char str[]=”s45jabv9Dyu123ba89”;
int a[10],i,j,k=0,s;
for(i=0;str[i];)
if(str[i]>=’0’&&str[i]<=’9’)
{ j=i;s=0;
while( str[j]>=’0’&&str[j]<=’9’) 原创精品资源学科网独家享有版权,侵权必究!
{s= ; j++;}
a[k++]=s; ;
}
else i++;
for(i=0;i<k;i++)
printf(“%d ”,a[i]); }
【答案】 s*10+str[j]-‘0’ i=j
3、将子串的所有字符插入到有序的母串中,使母串仍然有序。
#include<stdio.h>
#include<string.h>
void main()
{ char str[50]={“cdhkoru”},substr[]=”ajfv”,ch;
int i,j;
for(i=0;i<strlen(substr);i++)
{ ch=substr[i];
while( )
{ str[j+1]=str[j]; j--;}
str[j+1]=ch; }
printf(“%s
”,str); }
【答案】j=strlen(str)-1; j>=0&&ch<str[j]
五、程序改错题(共20分)
1、程序功能:在输入的三个字符串中,找出最小字符串。现有2处错误,请在找出错误语句,并写出完整的正确语句。(找出错误2分,改正错误3分)
L1 #include<stdio.h>
L2 #include<string.h>
L3 void main()
L4 { char minstr[20],str[3][20];
L5 int i;
L6 for(i=0;i<3;i++)原创精品资源学科网独家享有版权,侵权必究!
L7 scanf(“%s”,&str[i]);
L8 strcpy(minstr,str[0]);
L9 if(minstr>str[1]) strcpy(minstr,str[1]);
L10 if(strcmp(minstr,str[2])>0) strcpy(minstr,str[2]);
L11 printf(“最小字符串是:%s”, minstr); }
【答案】 L7 scanf(“%s”,str[i]);
L9 if(strcmp(minstr,str[1])>0) strcpy(minstr,str[1]);
2、程序功能:输入10个[10,50]范围的正整数,按升序排序。现有2处错误,请在找出错误语句,并写出完整的正确语句。(找出错误2分,改正错误3分)
L1 #include<stdio.h>
L2 #include<stdlib.h>
L3 #define N 10
L4 void main()
L5 { int a[N],t;
L6 int i,j;
L7 for(i=0;i<N;i++)
L8 a[i]=rand()%40+10;
L9 for(i=0;i<N-1;i++)
L10 for(j=N;j>=i;j--)
L11 if(a[j]<a[j-1])
L12 {t=a[j];a[j]=a[j-1];a[j-1]=t;}
L13 for(i=0;i<N;i++)
L14 printf(“%d ”,a[i]); }
【答案】L8 a[i]=rand()%41+10;
L10 for(j=N-1;j>i;j--)原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$$
<C语言程序设计教程>清华大学出版社(第3版)
第七章 数组 章节过关卷
考试时间:90分钟 满分:100分
姓名 班级 学号
1、 选择题(共10题,每小题2分,共20分)
1下列一维数组定义中,正确的是 。
A、 int a[ ]; B、int z=3,a1[z];
C、int a(5); D、#define Z 5; int a[z];
2、下列数组初始化中,错误的是 。
A、int a[5]={1,2,3}; B、char c[ ]={‘h’,’o’,’w’};
C、char c[ ]=”how”; D、int a[ ]={1,2,3};
3、 若有定义int a[6];下列数组元素引用中,正确的是 。
A、a={1,2,3,4,5,6} B、a[6]={1,2,3,4,5,6}
C、a[6]=10; D、a[0]=1;a[1]=a[0]+5;
4、 下列二维数组中定义正确的是 。
A、int b[ ][2]; B、int b[2][ ]={{1},{2}};
C、int b[ ][2]={1,2,3,4}; D、int b[ ][ ]={1,2,3,4};
5、 若有以下定义,输出结果是 。
char s[ ]=”ab12\\56
\xAD” ;
printf(“%d,%d”,sizeof(s),strlen(s));
A、10,9 B、9,10 C、9,8 D、8,9
6、 若有以下定义,则下列输出结果是 。
int i,j,bb[3 ][4 ]={{1,2,3}{,4,5,6},{7,8,9}};
for(i=0;i<4;i++)
printf(“%d”,bb[1][i]);
A、1234 B、4560 C、2580 D、1230
7、 若有以下定义,则能正确引用数组元素的是 。
int x[3][4];
A、 x[0][4] B、x[3][3] C、x[2+1][0] D、x[1+1][1+2] 原创精品资源学科网独家享有版权,侵权必究!
8、 若有定义如下,则表达式值不为4的是 。
int x[3][3]={1,2,3,4,5,6,7,8,9};
A、x[0][1]+1 B、x[2][1]/2 C、x[1][0] D、x[1][1]-1
9、若有定义如下,则执行后输出结果是 。
char str[20]=”abc”,str1[ ]=”123456”;
strncpy(str,str1,4); str[2]=’\0’;
puts(str);
A、123456 B、123 C、12 D、abc123
10、有如下程序段,则输出结果是 。
char str[]=” abcdefgh”;
int i;
for(i=0;str[i]!=’\0’;i++)
if(i++%3==0)
printf("%2c",toupper(str[i]));}
A、A D B、a d C、B H D、b h
二、填空题(共6空,每空2分,共12分)
1、若有定义int x[20];数组起始地址为2000,则x[11]元素地址为: 。
若定义int x[6][5];数组起始地址为2000,则x[3][4]元素地址为: 。
2、 若有定义char s1[20]=”shang”,s2[20]=”hai”;,如何将s1放到s2后面去,请写出语句 。
3、 若有语句int x[5],i;现需要将数组元素赋值为奇数数(从1开始),语句是 。
4、 若有定义字符数组str1和str2,如何判断str1大于str2 。
5、 若有定义char b[20];且每个元素均已赋值,如何把b数组中前8个元素均赋值为字符5: 。
三、程序运行题(共6题,每小题3分,共18分)
1、以下程序的运行结果是 。
#include<stdio.h>
void main()
{ int a[6]={1,2},i; 原创精品资源学科网独家享有版权,侵权必究!
for(i=2;i<6;i++)
a[i]=a[a[i-1]-a[i]]*2;
for(i=0;i<6;i++)
printf(“%d,”,a[i]); }
2、以下程序的运行结果是 。
#include<string.h>
voiud main( )
{ char s1[]=”China”;
int n,t,i,j;
n=strlen(s1);
for(i=0,j=n-1;i<j;i++,j--)
{ t=s1[i];s1[i]=s1[j];s1[j]=t;}
printf(“s1=%s
”,s1); }
3、以下程序的运行结果是 。
#include <stdio.h>
void main( )
{ char s[]=”CBEHGTT”;
int i=0;
while(s[i++]!=’E’)
{ switch(s[i])
{ printf(“%s”,”good”);
case ‘A’: printf(“morning!”);break;
case ‘A’+1: printf(“afternoon!”);
default: printf(“evening”); } }
}
4、以下程序的运行结果是 。
#include <stdio.h>
#include<string.h>
#define N 20
void main()原创精品资源学科网独家享有版权,侵权必究!
{ char str[5][N]={“huaihua”,”jiangxi”,”nanchang”,”changjiang”,”huanghe”},str1[N];
int i,j,len;
len=strlen(str[0]);
for(i=1;i<5;i++)
if(len<strlen(str[i])) {strcpy(str1,str[i]); len=strlen(str[i]); }
printf(“%s,len=%d”,str1,len); }
5、以下程序的运行结果是 。
#include<stdio.h>
void main()
{ char s[]=”12sby\018c0v54s6”;
int i,n=1;
for(i=0;s[i]!=0;i++)
if(s[i]>=’0’&&s[i]<=’9’) n++;
printf("n=%d
”,n);
}
6、以下程序的运行结果是 。
#include<stdio.h>
void main( )
{ int n,i=0,j,b[20];
scanf(“%d”,&n);
while(n!=0)
{ b[i++]=n%8;
n/=8; }
for(j=i-1;j>=0;j--)
printf(“%d”,b[j]); }
从键盘输入:51<回车>
四、程序填空题(共6空,每空5分,共30分)
1、程序功能:矩阵的转置。
#include<stdio.h>
#define N 3原创精品资源学科网独家享有版权,侵权必究!
void main()
{ int a[N][N]={1,2,3,4,5,6,7,8,9} ,i,j ,t;
for(i=0;i<N;i++)
for(j=0; ;j++)
;
for(i=0;i<N;i++)
{ for(j=0;j<N;j++)
printf("%d",a[i][j]);
printf("
");}
}
2、程序功能:将字符串中连续的数字字符取出组成整数,存放到整型数组中。
#include<stdio.h>
void main()
{ char str[]=”s45jabv9Dyu123ba89”;
int a[10],i,j,k=0,s;
for(i=0;str[i];)
if(str[i]>=’0’&&str[i]<=’9’)
{ j=i;s=0;
while( str[j]>=’0’&&str[j]<=’9’)
{s= ; j++;}
a[k++]=s; ;
}
else i++;
for(i=0;i<k;i++)
printf(“%d ”,a[i]); }
3、将子串的所有字符插入到有序的母串中,使母串仍然有序。
#include<stdio.h>
#include<string.h>
void main()
{ char str[50]={“cdhkoru”},substr[]=”ajfv”,ch; 原创精品资源学科网独家享有版权,侵权必究!
int i,j;
for(i=0;i<strlen(substr);i++)
{ ch=substr[i];
while( )
{ str[j+1]=str[j]; j--;}
str[j+1]=ch; }
printf(“%s
”,str); }
五、程序改错题(共20分)
1、程序功能:在输入的三个字符串中,找出最小字符串。现有2处错误,请在找出错误语句,并写出完整的正确语句。(找出错误2分,改正错误3分)
L1 #include<stdio.h>
L2 #include<string.h>
L3 void main()
L4 { char minstr[20],str[3][20];
L5 int i;
L6 for(i=0;i<3;i++)
L7 scanf(“%s”,&str[i]);
L8 strcpy(minstr,str[0]);
L9 if(minstr>str[1]) strcpy(minstr,str[1]);
L10 if(strcmp(minstr,str[2])>0) strcpy(minstr,str[2]);
L11 printf(“最小字符串是:%s”, minstr); }
2、程序功能:输入10个[10,50]范围的正整数,按升序排序。现有2处错误,请在找出错误语句,并写出完整的正确语句。(找出错误2分,改正错误3分)
L1 #include<stdio.h>
L2 #include<stdlib.h>
L3 #define N 10
L4 void main()
L5 { int a[N],t;
L6 int i,j; 原创精品资源学科网独家享有版权,侵权必究!
L7 for(i=0;i<N;i++)
L8 a[i]=rand()%40+10;
L9 for(i=0;i<N-1;i++)
L10 for(j=N;j>=i;j--)
L11 if(a[j]<a[j-1])
L12 {t=a[j];a[j]=a[j-1];a[j-1]=t;}
L13 for(i=0;i<N;i++)
L14 printf(“%d ”,a[i]); }
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$$