二级C语言循环结构数组二.docx
《二级C语言循环结构数组二.docx》由会员分享,可在线阅读,更多相关《二级C语言循环结构数组二.docx(36页珍藏版)》请在冰豆网上搜索。
![二级C语言循环结构数组二.docx](https://file1.bdocx.com/fileroot1/2023-2/8/d4a27316-183f-4c41-a0ff-4ab978daf319/d4a27316-183f-4c41-a0ff-4ab978daf3191.gif)
二级C语言循环结构数组二
二级C语言-循环结构、数组
(二)
(总分:
74.00,做题时间:
90分钟)
一、{{B}}选择题{{/B}}(总题数:
34,分数:
34.00)
1.下面程序输出的结果是______。
main()
{inti;
inta[3][3]={1,2,3,4,5,6,7,8,9};
for(i=0;i
printf("%d",a[2-i][i]);
}
∙A.159
∙B.753
∙C.357
∙D.591
(分数:
1.00)
A.
B. √
C.
D.
解析:
[解析]本题用循环的方法考查对数组概念的掌握。
首先,当i=0时,数组中的位置是a[2][0]=7,当然,如果用排除法,就不用考虑后面的循环,因为在4个选项中,第1个数为7的选项只有B。
本题执行第2次循环时,i的值为1,则printf函数中的数组指向为a[1][1]=5,依次循环,可求出答案。
2.以下数组定义错误的是______。
∙A.intx[][3]={0};
∙B.intx[2][3]={{1,2},{3,4},{5,6}};
∙C.intx[][3]={{1,2,3},{4,5,6}};
∙D.intx[][3]={1,2,3,4,5,6};
(分数:
1.00)
A.
B. √
C.
D.
解析:
[解析]二维数组的初始化有以下几种形式:
①分行进行初始化;②不分行的初始化;③部分数组元素初始化;④省略第一维的定义,不省略第二维的定义。
选项B等号右边分了3行,大于等号左边数组的行数。
3.以下能正确定义数组并正确赋初值的选项是______。
∙A.intN=5,b[N][N];
∙B.inta[1][2]={{1},{3}};
∙C.intc[2][]={{1,2},{3,4}};
∙D.intd[3][2]={{1,2},{3,4}};
(分数:
1.00)
A.
B.
C.
D. √
解析:
[解析]选项A中,数组的下标应为整型变量;选项B的行下标应为2;选项C的列下标不能省略。
4.以下能对二维数组a进行正确初始化的选项是______。
∙A.inta[2][]={{1,0,1},{5,2,3}};
∙B.inta[][3]={{1,2,3},{4,5,6}};
∙C.inta[2][4]={{1,2,3},{4,5},{6}};
∙D.inta[][3]={{1,0,1},{},{1,1}};
(分数:
1.00)
A.
B. √
C.
D.
解析:
[解析]本题考查了对二维数组初始化的基本语法问题,读者需要清楚地了解初始化二维数组的基本格式。
5.已知int类型的变量占4个字节有下面的程序段:
main()
{inta[][3]={{1,2,3},{4,5},{6},(8}};
printf("%d",sizeof(9));
}
则程序段的输出结果是______。
∙A.12
∙B.24
∙C.48
∙D.64
(分数:
1.00)
A.
B.
C. √
D.
解析:
[解析]程序通过赋初值的方式定义了4行3列的数组,则大小为12,而一个int变量占4个字节,所以程序输出48。
6.有以下程序:
main()
{
intm[][3]={1,4,7,2,5,8,3,6,9};
inti,j,k=2;
for(i=0;i<3;i++)
{printf("%d",m[k][i]);}
}
执行后输出的结果是______。
∙A.456
∙B.258
∙C.369
∙D.789
(分数:
1.00)
A.
B.
C. √
D.
解析:
[解析]本题的功能是输出m[2][0],m[2][1]和m[2][2]。
7.已知字母A的ASCII码是65,则有下面的程序段:
#include<stdio.h>
main()
{charc[5]={65,66,67,68,69};
inti;
for(i=0;i<=4;i++)
printf("%c",c[i]);
}
则程序段的输出结果是______。
∙A.1234
∙B.0123
∙C.ABCD
∙D.65666768
(分数:
1.00)
A.
B.
C. √
D.
解析:
[解析]ASCII码65、66、67、68、69分别对应的字母为A、B、C、D、E,初始化到字符数组C中,所以输出结果为ABCDE。
8.下面程序输出的结果是______。
#include<stdio.h>
main()
{charc[9]={'T','h','a','/0','k','','y','o','u'};
printf("%s",c);
}
∙A.Thankyou
∙B.Thank
∙C.Tha
∙D.无输出
(分数:
1.00)
A.
B.
C. √
D.
解析:
[解析]C语言规定了一个字符串结束标识,以字符'/0'代表。
字符数组中a后面为'/0',字符串在此处结束,所以输出结果为Tha。
9.以下程序的输出结果是______。
charc[5]={'a','b','/0','c','/0'};
printf("%s",c);
∙A.a
∙B.b
∙C.ab
∙D.abc
(分数:
1.00)
A.
B.
C. √
D.
解析:
[解析]由于字符数组c的元素c[2]中保存的是字符'/0'(串结束标识),因此将数组c作为字符串处理时,遇到字符'/0'输出就会结束。
10.下面程序输出的结果是______。
#include<stdio.h>
main()
{charw[][10]={"ABCD","EFGH","IJKL","MNOP"};
for(k=1;k<3;k++)printf("%s",&w[k][k]);
}
∙A.ABCDFGHKL
∙B.ABCEFGIJM
∙C.EFGJK0
∙D.FGHKL
(分数:
1.00)
A.
B.
C.
D. √
解析:
[解析]当k=1时,引用的是w[1][1],值为字符串“FGH”;当k=2时,引用的是w[2][2],即字符串“KL”。
11.以下程序的输出结果是______。
main()
{chara[]="abcdefg",b[10]="abcdefg";
printf("%d%d/n",sizeof(a),sizeof(b));
}
∙A.77
∙B.88
∙C.810
∙D.1010
(分数:
1.00)
A.
B.
C. √
D.
解析:
[解析]字符数组a共有8个元素,b有10个元素。
12.下面程序输出的结果是______。
#include<stdio.h>
#include<string.h>
main()
{charc[20]={'T','h','a','/0','k','u','y','o','u'};
printf("%d",strlen(c));
}
∙A.20
∙B.9
∙C.3
∙D.4
(分数:
1.00)
A.
B.
C. √
D.
解析:
[解析]此函数计算出以字符数组为起始地址的字符串的长度,并作为函数值返回,这一长度不包括串尾的结束标识'/0'。
所以输出为字符串“Tha”的长度3。
13.s1和s2已正确定义并分别表示两个字符串。
若要求当s1所指字符串大于s2所指字符串时,执行语句S,则以下选项中正确的是______。
∙A.if(s1>s2)S;
∙B.if(strcmp(s1,s2))S;
∙C.if(strcmp(s2,s1)>0)S;
∙D.if(strcmp(s1,s2)>0)S;
(分数:
1.00)
A.
B.
C.
D. √
解析:
[解析]比较两个字符串时不能直接将两个字符串名进行比较,而是使用字符串处理函数strcmp(s1,s2),当s1所指字符串大于s2所指字符串时,strcmp(s1,s2)>0,所以选D。
14.调用函数strlen("abcd/0ef/0g")的返回值为______。
∙A.4
∙B.5
∙C.8
∙D.9
(分数:
1.00)
A. √
B.
C.
D.
解析:
[解析]注意字符串中的字符'/0',它在c的字符串中具有特殊的意义,字符'/0'标志字符串的结束。
计算串长时,只计算字符'/0'之前的字符数量,而不管'/0'之后是什么字符。
15.有以下程序:
#include<stdio.h>
#include<string.h>
main()
{chara[]={'a','b','c','d','e','f','g','h','/0'};
inti,j;
i=sizeof(a);j=strlen(a);
printf("%d,%d/n",i,j);
}
程序运行后的输出结果是______。
∙A.9,9
∙B.8,9
∙C.1,8
∙D.9,8
(分数:
1.00)
A.
B.
C.
D. √
解析:
16.以下程序中函数reverse()的功能是将a所指数组中的内容进行逆置存放。
#include<stdio.h>
voidreverse(inta[],intn)
{inti,t;
for(i=0;i<n/2;i++)
{t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;}
}
main()
{intb[10]={1,2,3,4,5,6,7,8,9,10};inti,s=0;
reverse(b,8);
for(i=6;i<10;i++)s+=b[i];
printf("%d/n",s);
}
则程序运行后的输出结果是______。
∙A.22
∙B.10
∙C.34
∙D.30
(分数:
1.00)
A. √
B.
C.
D.
解析:
17.有以下程序:
main(intargc,char*argv[])
{intn,i=0;
while(argv[1][i]!
='/0')
{n=fun();i++;}
printf("%d/n",n*argc);
}
intfun()
{staticints=0;
s+=1;
returns;
}
假设程序经编译、连接后生成可执行文件exam.exe,若输入以下命令行exam123<回车>
则运行结果为______。
∙A.6
∙B.8
∙C.3
∙D.4
(分数:
1.00)
A. √
B.
C.
D.
解析:
18.以下程序的输出结果是______。
#include<stdio,h>
#include<string,h>
main()
{charstr[12]={'s','t','r','i','n','g'};
printf("%d/n",strlen(str));}
∙A.6
∙B.7
∙C.11
∙D.12
(分数:
1.00)
A. √
B.
C.
D.
解析:
19.若有说明:
inta[3][4];,则对数组a元素非法引用的是______。
∙A.a[0][2*1]
∙B.a[1][3]
∙C.a[4-2][0]
∙D.a[0][4]
(分数:
1.00)
A.
B.
C.
D. √
解析:
20.若有说明:
inta[][4]={0,0};,则以下选项中,不正确的是______。
∙A.数组a的每个元素都可得到初值。
∙B.二维数组a的第一维大小为1
∙C.因为二维数组a中初值的个数不能被第二维大小的值整除,则第一维的大小等于所得商数再加1,故数组a的行数为1
∙D.只有元素a[0][0]和a[0][1]可得到初值0,其余元素均得不到初值0
(分数:
1.00)
A.
B.
C.
D. √
解析:
21.以下程序中有错误的一行是______。
(1)main()
(2){
(3)inta[3]={1};
(4)inti;
(5)scanf("%d",&a);
(6)for(i=1;i<3;i++)a[0]=a[0]+a[i];
(7)printf("%f/n",a[0]);
(8)}
∙A.3
∙B.6
∙C.7
∙D.5
(分数:
1.00)
A.
B.
C.
D. √
解析:
22.若有说明:
inta[][3]={1,2,3,4,5,6,7};,则a数组第一维的大小是______。
∙A.2
∙B.3
∙C.4
∙D.无确定值
(分数:
1.00)
A.
B. √
C.
D.
解析:
23.若有数组定义:
chararray[]="China";,则数组array所占的空间为______。
∙A.4个字节
∙B.5个字节
∙C.6个字节
∙D.7个字节
(分数:
1.00)
A.
B.
C. √
D.
解析:
24.以下程序的输出结果是______。
#include<stdio.h>
#include<string.h>
main()
{chararr[2][4];
strcpy(arr,"you");strcpy(arr[1],"me");
arr[0][3]='&';
printf("%s/n",arr);
}
∙A.you&me
∙B.you
∙C.me
∙D.err
(分数:
1.00)
A. √
B.
C.
D.
解析:
25.有以下程序:
#include<stdio.h>
main()
{intn[5]={0,0,0},i,k=2;
for(i=0;i<k;i++)n[i]=n[i]+i;
printf("%d/n",n[k]);
}
该程序的输出结果是______。
∙A.不定值
∙B.2
∙C.1
∙D.0
(分数:
1.00)
A.
B.
C.
D. √
解析:
26.以下程序的输出结果是______。
#include<stdio.h>
main()
{inta[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/n",s);
}
∙A.14
∙B.19
∙C.20
∙D.21
(分数:
1.00)
A. √
B.
C.
D.
解析:
27.当执行以下程序时,如果输入ABC,则输出结果是______。
#include<stdio.h>
#include<string.h>
main()
{charss[10]="1,2,3,4,5";
gets(ss);strcat(ss,"6789");printf("%s/n",ss);
}
∙A.ABC6789
∙B.ABC67
∙C.12345ABC6
∙D.ABCA56789
(分数:
1.00)
A. √
B.
C.
D.
解析:
28.以下程序的输出结果是______。
#include<stdio.h>
f(intb[],intm,intn)
{inti,s=0;
for(i=m;i<n;i=i+2)s=s+b[i];
returns;
}
main()
{intx,a[]={1,2,3,4,5,6,7,8,9};
x=f(a,3,7);
printf("%d/n",x);
}
∙A.10
∙B.18
∙C.8
∙D.15
(分数:
1.00)
A. √
B.
C.
D.
解析:
29.以下程序中函数sort()的功能是对数组a中的数据进行由大到小的排序。
#include<stdio.h>
voidsort(inta[],intn)
{inti,j,t;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(a[i]<a[j]){t=a[i];a[i]=a[j];a[j]=t;}
}
main()
{intaa[10]={1,2,3,4,5,6,7,8,9,10},i;
sort(&aa[3],5);
for(i=0;i<10;i++)printf("%d,",aa[i]);
printf("/n");
}
程序运行后的输出结果是______。
∙A.1,2,3,4,5,6,7,8,9,10,
∙B.10,9,8,7,6,5,4,3,2,1,
∙C.1,2,3,8,7,6,5,4,9,10,
∙D.1,2,10,9,8,7,6,5,4,3,
(分数:
1.00)
A.
B.
C. √
D.
解析:
30.对两个数组a和b进行以下初始化:
chara[]="ABCDEF";
charb[]={'A','B','C','D','E','F'};
则以下叙述正确的是______。
∙A.数组a与数组b完全相同
∙B.数组a与数组b长度相同
∙C.数组a与数组b中都存放字符串
∙D.数组a比数组b长度长
(分数:
1.00)
A.
B.
C.
D. √
解析:
31.有以下程序段:
chara[3],b[]="China";
a=b;
printf("%s",a);
则______。
∙A.运行后将输出China
∙B.运行后将输出Ch
∙C.运行后将输出Chi
∙D.编译出错
(分数:
1.00)
A.
B.
C.
D. √
解析:
32.判断字符串s1是否大于字符串s2,应当使用______。
∙A.if(s1>s2)
∙B.if(strcmp(s1,s2))
∙C.if(strcmp(s2,s1)>0)
∙D.if(strcmp(s1,s2)>0)
(分数:
1.00)
A.
B.
C.
D. √
解析:
33.以下程序的输出结果是______。
#include<stdio.h>
main()
{charch[7]={"12ab56"};
inti,s=0;
for(i=0;ch[i]>='0'&&ch[i]<='9';i+=2)
s=10*s+ch[i]-'0';
printf("%d/n",s);
}
∙A.1
∙B.1256
∙C.12ab56
∙D.1
(分数:
1.00)
A. √
B.
C.
D.
解析:
34.当运行以下程序时,从键盘输入:
AhaMA[空格]Aha<回车>,则程序的输出结果是______。
#include<stdio.h>
main()
{chars[80],c='a';
inti=0;
scanf("%s",s);
while(s[i]!
='/0')
{if(s[i]==c)s[i]=s[i]-32;
elseif(s[i]==c-32)s[i]==s[i]+32;
i++;
}
puts(s);
}
∙A.ahAMa
∙B.AbAMa
∙C.AhAMa[空格]ahA
∙D.ahAMa[空格]ahA
(分数:
1.00)
A. √
B.
C.
D.
解析:
二、{{B}}操作题{{/B}}(总题数:
15,分数:
40.00)
35.以下程序的功能是:
从键盘上输入若干学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束输入,请填空。
试题程序
#include<stdio.h>
main()
{floatx,amax,amin;
scanf("%f",&x);
amax=x;amin=x;
while(______)
{if(x>amax)amax=x;
if(______)amin=x;
scanf("%f",&x);
}
printf("/namax=%f/namin=%f/n",amax,amin);
}
(分数:
5.00)
填空项1:
__________________ (正确答案:
x>=0x<amin)
解析:
[解析]阅读以上程序可知,最高成绩放在变量amax中,最低成绩放在amin中。
while循环用于不断读入数据放入x中,并通过判断把大于amax的数放入amax中,把小于amin的数放入amin中。
因此在第二个横线处应填入x<amin。
while后的表达式用以控制读入的成绩是否为负数,若是负数,读入结束并且退出循环,因此在第一个横线处应填入x>=0,即当读入的值大于等于0时,循环继续,小于0时循环结束。
36.下列给定程序中函数fun的功能是:
计算正整数num各位上的数字之积。
例如,若输入252,则输出应该是20。
若输入202,则输出应该是0。
请改正程序中的错误,使它能得出正确的结果。
注意:
不要改动main()函数,不得增行或删行,也不得更改程序的结构。
试题程序
#include<stdio.h>
#include<conio.h>
longfunlongnum)
{/*****found*****/
longk;
do
{k*=num%10;
/*****found*****/
num/=10;
}while(num);
return(k);
}
main()
{longn;
printf("pleaseenteranumber:
");
scanf("%ld",&n);
printf("/n%ld/n",fun(n)