二级C语言三.docx
- 文档编号:7607368
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:19
- 大小:21.99KB
二级C语言三.docx
《二级C语言三.docx》由会员分享,可在线阅读,更多相关《二级C语言三.docx(19页珍藏版)》请在冰豆网上搜索。
二级C语言三
二级C语言-(三)
(总分:
100.00,做题时间:
90分钟)
一、{{B}}选择题{{/B}}(总题数:
34,分数:
68.00)
1.以下关于return语句的叙述中正确的是______。
∙A.没有return语句的自定义函数在执行结束时不能返回到调用处
∙B.一个自定义函数中必须有一条return语句
∙C.定义成void类型的函数中可以有带返回值的return语句
∙D.一个自定义函数中可以根据不同情况设置多条return语句
(分数:
2.00)
A.
B.
C.
D. √
解析:
2.已定义以下函数
intfun(int*p)
{return*p;}
fun函数返回值是______。
∙A.一个整数
∙B.不确定的值
∙C.形参p中存放的值
∙D.形参p的地址值
(分数:
2.00)
A. √
B.
C.
D.
解析:
3.若有以下程序
#include<stdio.h>
charf(charx)
{returnx*x+'a';}
main()
{chara,b=0;
for(a=0;a<4;a+=1)
{b=f(a);putchar(b);}
}
则程序的输出结果是______。
∙A.abej
∙B.ABEJ
∙C.abcd
∙D.ABCD
(分数:
2.00)
A. √
B.
C.
D.
解析:
4.以下叙述中正确的是______。
∙A.数组说明符的一对方括号中只能使用整型常量,而不能使用表达式
∙B.一条语句只能定义一个数组
∙C.每个数组包含一组具有同一类型的变量,这些变量在内存中占有连续的存储单元
∙D.在引用数组元素时,下标表达式可以使用浮点数
(分数:
2.00)
A.
B.
C. √
D.
解析:
5.以下叙述中正确的是______。
∙A.charc1,c2,*c3,c4[40];是合法的变量定义语句
∙B.数组下标的下限由数组中第一个非零元素的位置决定
∙C.数组下标的下限由数组中第一个被赋值元素的位置决定
∙D.数组下标的下限是1
(分数:
2.00)
A. √
B.
C.
D.
解析:
6.以下叙述中正确的是______。
∙A.语句chara[2]={"A","B"};是合法的,定义了一个包含两个字符的数组
∙B.语句inta[]={0};是不合法的,遗漏了数组的大小
∙C.语句inta[8]={0};是合法的
∙D.语句chara[3];a="AB";是合法的,因为数组有三个字符空间的容量,可以保存两个字符
(分数:
2.00)
A.
B.
C. √
D.
解析:
7.以下叙述中正确的是______。
∙A.语句inta[][3]={1,2,4,5};是错误的初始化形式
∙B.语句inta[4][3]={1,2,4,5};是错误的初始化形式
∙C.在逻辑上,可以把二维数组看成是一个具有行和列的表格或矩阵
∙D.语句inta[4][3]={{1,2},{4,5}};是错误的初始化形式
(分数:
2.00)
A.
B.
C. √
D.
解析:
8.设有定义:
intx[2][3];
则以下关于二维数组x的叙述错误的是______。
∙A.可以用x[0]=0;的形式为数组所有元素赋初值0
∙B.数组x可以看作是由x[0]和x[1]两个元素组成的一维数组
∙C.元素x[0]可看作是由3个整型元素组成的一维数组
∙D.x[0]和x[1]是数组名,分别代表一个地址常量
(分数:
2.00)
A. √
B.
C.
D.
解析:
9.以下数组定义中错误的是______。
∙A.intx[2][3]={1,2,3,4,5,6};
∙B.intx[][3]={0};
∙C.intx[][3]={{1,2,3},{4,5,6}};
∙D.intx[2][3]={{1,2},{3,4},{5,6}};
(分数:
2.00)
A.
B.
C.
D. √
解析:
10.有以下程序
#includc<stdio.h>
main()
{intb[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+=b[i][b[j][i]];
printf("%d/n",t);
程序运行后的输出结果是______。
∙A.4
∙B.3
∙C.1
∙D.9
(分数:
2.00)
A. √
B.
C.
D.
解析:
11.有以下程序
#include?
<stdio.h>
main()
{inti,t[][3]={9,8,7,6,5,4,3,2,1};
for(i=0;i<3;i++)?
?
printf("%d?
",t[2-i][i]);
程序执行后的输出结果是______。
∙A.369
∙B.753
∙C.357
∙D.751
(分数:
2.00)
A.
B.
C. √
D.
解析:
12.以下叙述中正确的是______。
∙A.语句p=NULL;执行后,指针p指向地址为0的存储单元
∙B.指针变量只能通过求地址运算符(&)来获得地址值
∙C.语句p=NULL;与p=/0;是等价的语句
∙D.int*p1;int**p2;int*p3;都是合法的定义指针变量的语句
(分数:
2.00)
A.
B.
C.
D. √
解析:
13.以下叙述中正确的是______。
∙A.如果企图通过一个空指针来访问一个存储单元,将会得到一个出错信息
∙B.即使不进行强制类型转换,在进行指针赋值运算时,指针变量的基类型也可以不同
∙C.设变量p是一个指针变量,则语句p=0;是非法的,应该使用p=NULL;
∙D.指针变量之间不能用关系运算符进行比较
(分数:
2.00)
A. √
B.
C.
D.
解析:
14.设p是指针变量,语句p=NULL;等价于______。
∙A.p='0';
∙B.p=";
∙C.p="";
∙D.p=0;
(分数:
2.00)
A.
B.
C.
D. √
解析:
15.设有定义:
intx=0,*p;
紧接着的赋值语句正确的是______。
∙A.*p=x;
∙B.*p=NULL;
∙C.p=x;
∙D.p=NULL;
(分数:
2.00)
A.
B.
C.
D. √
解析:
16.若有定义语句:
doublea,*p=&a;
以下叙述中错误的是______。
∙A.定义语句中的p只能存放double类型变量的地址
∙B.定义语句中的*号是一个说明符
∙C.定义语句中的*号是一个间址运算符
∙D.定义语句中*p=&a把变量a的地址作为初值赋给指针变量p
(分数:
2.00)
A.
B.
C. √
D.
解析:
17.有以下程序
#include<stdio.h>
main()
{intm=1,n=2,*p=&m,*q=&n,*r;
r=p;p=q;q=r;
printf("%d,%d,%d,%d/n",m,n,*p,*q);
}
程序运行后的输出结果是______。
∙A.1,2,1,2
∙B.1,2,2,1
∙C.2,1,2,1
∙D.2,1,1,2
(分数:
2.00)
A.
B. √
C.
D.
解析:
18.设有定义语句
int(*f)(int);
则以下叙述正确的是______。
∙A.f是函数名,该函数的返回值是基类型为int类型的地址
∙B.f是基类型为int的指针变量
∙C.f是指向int类型一维数组的指针变量
∙D.f是指向函数的指针变量,该函数具有一个int类型的形参
(分数:
2.00)
A.
B.
C.
D. √
解析:
19.有以下程序
#include<stdio.h>
main()
{int*p,x=100;
p=&x;x=*p+10;
printf("%d/n",x);
程序运行后的输出结果是______。
∙A.110
∙B.120
∙C.100
∙D.90
(分数:
2.00)
A. √
B.
C.
D.
解析:
20.有以下程序
#include<stdio.h>
int*f(int*s,int*t)
{if(*s<*t)
s=t;
return?
s;
}
main()
{inti=3,j=5,*p=&i,*q=&j,*r;
r=f(p,q);
printf("%d,%d,%d,%d,%d/n",i,j,*p,*q,*r);
}
程序的运行结果是______。
∙A.3,5,3,5,5
∙B.3,5,5,5,5
∙C.5,3,3,3,5
∙D.5,5,5,5,5
(分数:
2.00)
A. √
B.
C.
D.
解析:
21.若要使用C数学库中的sin函数,需要在源程序的头部加上
#include<math.h>
关于引用数学库,以下叙述正确的是______。
∙A.将数学库中sin函数的源程序插入到引用处,以便进行编译链接
∙B.将数学库中sin函数链接到编译生成的可执行文件中,以便能正确运行
∙C.通过引用math.h文件,说明sin函数的参数个数和类型,以及函数返回值类型
∙D.实际上,不引用math.h文件也能正确调用sin函数
(分数:
2.00)
A.
B.
C. √
D.
解析:
22.以下叙述中正确的是______。
∙A.在C语言中,预处理命令行都以”#”开头
∙B.预处理命令行必须位于C源程序的起始位置
∙C.#include<stdio.h>必须放在C程序的开头
∙D.C语言的预处理不能实现宏定义和条件编译的功能
(分数:
2.00)
A. √
B.
C.
D.
解析:
23.有以下程序
#include<stdio.h>
#defineS(x)4*(x)*x+1
main()
{intk=5,j=2;
printf("%d/n",S(k+j));
程序运行后的输出结果是______。
∙A.143
∙B.197
∙C.33
∙D.28
(分数:
2.00)
A. √
B.
C.
D.
解析:
24.以下叙述中错误的是______。
∙A.C程序对预处理命令行的处理是在程序执行的过程中进行的
∙B.预处理命令行的最后不能以分号表示结束
∙C.#defineMAX是合法的宏定义命令行
∙D.在程序中凡是以”#”开始的语句行都是预处理命令行
(分数:
2.00)
A. √
B.
C.
D.
解析:
25.若程序中有宏定义行:
#defineN100
则以下叙述中正确的是______。
∙A.宏定义行中定义了标识符N的值为整数100
∙B.在编译程序对C源程序进行预处理时用100替换标识符N
∙C.上述宏定义行实现将100赋给标识符N
∙D.在运行时用100替换标识符N
(分数:
2.00)
A.
B. √
C.
D.
解析:
26.若有以下程序
#include<stdio.h>
#defineS(x)x*x
#defineT(x)S(x)*S(x)
main()
{intk=5,j=2;
printf("%d,%d/n",S(k+j),T(k+j));
则程序的输出结果是______。
∙A.49,289
∙B.49,2401
∙C.17,289
∙D.17,37
(分数:
2.00)
A.
B.
C.
D. √
解析:
27.有以下程序
#include<stdio.h>
#defineS(x)x*x
main()
{intk=5,j=2;
printf("%d,%d/n",S(k+j+2),S(j+k+2));
}
程序的运行结果是______。
∙A.18,18
∙B.81,81
∙C.21,21
∙D.21,18
(分数:
2.00)
A.
B.
C.
D. √
解析:
28.以下选项中的编译预处理命令行,正确的是______。
∙A.#DEFINETRUE
∙B.##defineeps0.001
∙C.#definePI3.14
∙D.#defineintINT
(分数:
2.00)
A.
B.
C. √
D.
解析:
29.有以下程序
#include?
<stdio.h>
#defineFNA(x)x*x
#defineFNB(x)x+x
main()
{inta=2,b=4;
printf("%d,%d/n",FNA(FNB(a)),FNB(FNA(b)));
}
程序运行后的输出结果是______。
∙A.16,32
∙B.8,32
∙C.8,16
∙D.16,16
(分数:
2.00)
A.
B. √
C.
D.
解析:
30.有以下程序
#include<stdio.h>
typedefstruct{intb,p;}A;
voidf(Ac)/*注意:
c是结构变量名*/
{intj;
c.b+=1;c.p+=2;
}
main()
{inti;
Aa={1,2};
f(a);
printf("%d,%d/n",a.b,a.p);
}
程序运行后的输出结果是______。
∙A.2,4
∙B.1,2
∙C.1,4
∙D.2,3
(分数:
2.00)
A.
B. √
C.
D.
解析:
31.有以下程序
#include<stdio.h>
structS
{inta,b;}?
data[2]={10,100,20,200};
main()
{structSp=data[1];
printf("%d/n",++(p.a));
}
程序运行后的输出结果是______。
∙A.21
∙B.11
∙C.20
∙D.10
(分数:
2.00)
A. √
B.
C.
D.
解析:
32.以下叙述中正确的是______。
∙A.在一个程序中当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到第1个数据
∙B.打开一个已存在的文件并进行了写操作后,原有文件中的全部数据必定被覆盖
∙C.当对文件的读(写)操作完成之后,必须将它关闭,否则可能导致数据丢失
∙D.C语言中的文件是流式文件,因此只能顺序存取数据
(分数:
2.00)
A.
B.
C. √
D.
解析:
33.有以下程序
#include<stdio.h>
main()
{FILE*fp;inta[10]={1,2,3},i,n;
fp=fopen("d1.dat","w");
for(i=0;i<3;i++)fprintf(fp,"%d",a[i]);
fprintf(fp,"/n");
fclose(fp);
fp=fopen("d1.dat","r");
fscanf(fp,"%d",&n);
fclose(fp);
printf("%d/n",n);
}
程序的运行结果是______。
∙A.12300
∙B.123
∙C.1
∙D.321
(分数:
2.00)
A.
B. √
C.
D.
解析:
34.设文件指针fp已定义,执行语句fp=fopen("file","w");后,以下针对文本文件file操作叙述的选项中正确的是______。
∙A.只能写不能读
∙B.写操作结束后可以从头开始读
∙C.可以在原有内容后追加写
∙D.可以随意读和写
(分数:
2.00)
A. √
B.
C.
D.
解析:
二、{{B}}填空题{{/B}}(总题数:
13,分数:
32.00)
35.以下程序的功能是:
将值为三位正整数的变量x中的数值按照个位、十位、百位的顺序拆分并输出。
请填空。
#include<stdio.h>main(){intx=256;printf("%d-%d-%d/n",______,x/10%10,x/100);}
(分数:
2.00)
填空项1:
__________________ (正确答案:
x%10)
解析:
[解析]x=256,x%10=6,是取个位上的值。
36.若有语句doublex=17;inty;,当执行y=(int)(x/5)%2;之后y的值为1。
(分数:
2.00)
填空项1:
__________________ (正确答案:
1)
解析:
[解析]y=(int)(x/5)%2=(int)(3.4)%2=3%2=1。
37.若变量x、y已定义为int类型且x的值为99,y的值为9,请将输出语句printf(1,x/y);补充完整,使其输出的计算结果形式为:
x/y=11。
(分数:
2.00)
填空项1:
__________________ (正确答案:
"x/y=%d")
解析:
[解析]printf语句中,除了格式转换说明外,字符串中的其他字符(包括空格)将按原样输出。
38.在C语言中,当表达式值为0时表示逻辑值“假”,当表达式值为1时表示逻辑值“真”。
(分数:
2.00)
填空项1:
__________________ (正确答案:
非0)
解析:
[解析]本题一定要明确一个概念,即所有非0的数(并不只是“1”),在C语言中都表示逻辑值为“真”。
39.以下程序运行后的输出结果是______。
#include<stdio.h>main(){intx=10,y=20,t=0;if(x==y)t=x;x=y;y=t;printf("%d%d",x,y);}
(分数:
2.00)
填空项1:
__________________ (正确答案:
200)
解析:
[解析]在程序中if(x==y)t=x;x=y;y=t;是三条独立的语句,因为x,y的值不相等,所以if语句不执行,而执行x=y;y=t;这两条赋值语句,所以变量x的值等于20,y的值等于0。
40.以下程序的功能是:
输出a、b、c三个变量中的最小值。
请填空。
#include<stdio.h>main(){inta,b,c,t1,t2;scanf("%d%d%d",&a,&b,&c);t1=a<b?
______;t2=c<t1?
______;printf("%d/n",t2);}
(分数:
2.00)
填空项1:
__________________ (正确答案:
a:
bc:
t1)
解析:
[解析]本题考查的是条件表达式问题。
先判断a是否小于b,若小于则t1=a,否则t1=b,这样t1就是a和b中较小的值,同理再比较t1同c的大小,小的存入t2中,t2就是a、b、c中的最小值。
41.以下程序的输出结果是______。
#include<stdio.h>voidfun(intx)if(x/2>0)fun(x/2);printf("%d",x);}main(){fun(3);printf("/n");}
(分数:
2.00)
填空项1:
__________________ (正确答案:
13)
解析:
[解析]依次执行fun(6),fun(3),fun
(1),当执行fun(6)时要调用fun(3),执行fun(3)时要调用fun
(1),所以输出的结果为13。
42.有以下程序:
#include<stdio.h>#include<string.h>voidfun(char*str)chartemp;intn,i;n=strlen(str);temp=str[n-1];for(i=n-1;i>0;i--)str[i]=str[i-1];str[0]=temp;}main(){chars[50];scanf("%s",s);fun(s);printf("%s/n",s);}程序运行后输入abcdef<回车>,则输出结果是______。
(分数:
3.00)
填空项1:
__________________ (正确答案:
fabcde)
解析:
[解析]在函数fun中,先求出字符串str的长度,并将最后一个字符暂存到temp中,然后使用循环语句将所有字符向右移动一个位置,最后将temp中的字符放到字符串的第1个位置,所以结果为fabcde。
43.以下fun函数的功能是在N行M列的整型二维数组中,选出一个最大值作为函数值返回,请填空。
(设M,N已定义)intfun(inta[N][M]){inti,j,row=0,col=0;for(i=0;i<N;i++)for(j=0;j<M;j++)if(a[i][j]>a[row][col]){row=i;col=j;}return(______);}
(分数:
3.00)
填空项1:
__________________ (正确答案:
a[row][col])
解析:
[解析]通过程序可以看出,外循环是行,内循环是列。
先在行不变的情况下找一行内最大的数据进行记录。
通过语句if(a[i][j]>a[row][col]){row=i;col=j;}可知,如果变量a[i][j]大于a[row][col],将i赋给row,将j赋给col,所以a[row][col]是记录当前最大值的变量。
44.以下程序用以删除字符串中所有的空格,请填空。
#include<stdio.h>main(){chars[100]={"ourteacherteachclanguage!
"};inti,j;for(i=j=0;s[i]!
='/0';i++)if(s[i]!
=''){s[j]=s[i];j++;}s[j]=______;printf("%s/n",s);}
(分数:
3.00)
填空项1:
__________________ (正确答案:
'/0'或0)
解析:
[解析]程序使用变量i遍历字符数组s中的所有字符,使用变量j存放非空格字符。
当将所有的非空格字符重新存放到字符数组s中后,应添加字符串结束标志'/0'。
45.有以下程序:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二级 语言
![提示](https://static.bdocx.com/images/bang_tan.gif)