C语言期末模拟试题12.docx
《C语言期末模拟试题12.docx》由会员分享,可在线阅读,更多相关《C语言期末模拟试题12.docx(38页珍藏版)》请在冰豆网上搜索。
![C语言期末模拟试题12.docx](https://file1.bdocx.com/fileroot1/2023-2/10/be0b2d72-76e6-4dd6-be51-c535c2a64a3a/be0b2d72-76e6-4dd6-be51-c535c2a64a3a1.gif)
C语言期末模拟试题12
一、选择题:
(20分,每题2分)
1.以下不正确的C语言标识符是()。
A.ABCB.abcC.a_bcD.
2.C程序是由 构成的。
A.主程序与子程序
B.主函数与若干子函数
C.一个主函数与一个其它函数
D.主函数与子函数
3.以下说法中正确的是:
。
A.在C语言中,实参与其对应的形参各占独立的存储单元;
B.在C语言中,实参与其对应的形参共占同一个存储单元;
C.在C语言中,只有当实参与其对应的形参同名时,才共占同一个存储单元;
D.在C语言中,形参是虚拟的,不占存储单元。
4.设n=3;则n++的结果是()。
A.2B.3C.4D.5
5.设整型变量n=10,i=4,则赋值运算n%=i+1执行后,n的值是()。
A.0B.1C.2D.3
6.凡是函数中未指定存储类别的局部变量其隐含的存储类别是()。
A.自动(auto)B.静态(static)C.外部(extern)D.寄存器(register)
7.在while(x)语句中的x与下面条件表达式等价的是:
。
A.x==0B.x==1C.x!
=1D.x!
=0
8.若有以下说明和语句:
structworker
{
intno;
char*name;
}work,*p=&work;
则以下引用方法不正确的是()。
A.B.(*p).noC.p->noD.work->no
9.以下对二维数组进行正确初始化的是()。
a[2][3]={{1,2},{3,4},{5,6}};
a[][3]={1,2,3,4,5,6};
a[2][]={1,2,3,4,5,6};
a[2][]={{1,2},{3,4}};
10.二维数组a有m列,则在a[i][j]之前的元素个数为:
。
A)j*m+i
B)i*m+j
C)i*m+j-1
D)i*m+j+1
二、给出下列程序的运行结果:
(20分,前四题每题3分,后两题每题4分)
1.#include<>
main()
{
inti=16,j,x=6;
j=i+++1;
x*=i=j;
printf(“%d,%d\n”,j,x);
}
运行结果是:
2.#include<>
#include<>
main()
{
inta=1,b=4,c=2;
floatx=,y=,z;
z=(a+b)/c+sqrt((double)y)*c+x;
printf(“%f\n”,z);
}
运行结果是:
3.#include<>
main()
{
inta,b,c,d;
a=c=0;
b=1;
d=20;
if(a)d=d-10;
elseif(!
b)
if(!
c)d=25;
elsed=15;
printf(“d=%d\n”,d);
}
运行结果:
4.main()
{
inti=10;
switch(i){
case9:
i+=1;
case10:
i+=1;
case11:
i+=1;
default:
i+=1;
}
printf(“%d”,i);
}
运行结果:
5.#include<>
main()
{
inta[]={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);
}
运行结果:
6.func(intx)
{x=20;}
main()
{
intx=10;
func(x);
printf(“%d”,x);
}
运行结果:
三、阅读程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。
(20分,每空2分)
1.已知能被4整除而不能被100整除的或者能被400整除的年份是润年,则判断某一年是否是润年的程序如下:
main()
{
intyear,leap;
scanf(“%d”,&year);
if()
leap=1;
elseleap=0;
if()printf(“是润年”);
elseprintf(“不是润年”);
}
2.将100至200间不能被3整除的数输出:
main()
{
intn;
for(n=100;n<=200;n++)
{
if(n%3==0);
printf(“%d”,n);
}
}
3.判断m是否是素数
#include<>
main()
{
intm,i,k;
scanf(“%d”,&m);k=sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0);
if(i>=k+1)printf(“%disaprimenumber\n”,m);
elseprintf(“%disnotaprimenumber\n”,m);
}
4.给定一3*4的矩阵,求出其中值最大的元素的值,及所在的行列号。
main()
{
inti,j,row=0,colum=0,max;
staticinta[3][4]={{1,2,3,4}{9,8,7,6}{10,-10,-4,4}};
;
for(i=0;i<=2;i++)
for(j=0;j<=3;j++)
if(a[i][j]>max)
{
max=a[i][j];
;
;
}
printf(“max=%d,row=%d,colum=%d\n”,max,row,colum);
}
5.下面函数的功能是将两个字符串s和t连接起来。
char*conj(char*s,char*t)
{
char*p=s;
while(*s);
while(*t)
{
*s=;
s++;
t++;
}
*s=’\0’;
;
}
四、编程(40分)
1.计算1-1/2+1/3-1/4+…+1/99-1/100+…,直到最后一项的绝对值小于10-4为止。
(13分)
2.输入一行字符,分别统计求出其中英文字母、空格、数字和其他字符的个数并输出结果。
(13分)
3.任意从键盘输入10个整数,按从小到大的顺序排序,并输出结果。
(14分)
答案
一、选择题
1、D,2、B,3、A,4、B,5、A,6、A,7、D,8、D,9、B,10、B
二、给出下列程序的运行结果
1、17,102
2、
3、d=20
4、13
5、s=1234
6、10
三、阅读程序,在标有下滑线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。
1、(year%4==0&&year%100!
=0)||year%400==0)
leap
2、continue
3、break
4、max=a[0][0]
row=i+1
colum=j+1
5、s++
*t
return(p)
四、编程
1、
#include<>
main()
{
inti;
floatsum,sign;
i=1;
sum=0;
sign=;
while(i)>=1e-4)
{
sum+=sign/i;
i++;
sign=-sign;
}
printf("sum=%.4f",sum);
}
2、
#include<>
main()
{
charstr[81];
inti;
intletter,space,num,other;
charc;
printf("Pleaseenterastring:
");
gets(str);
letter=space=num=other=0;
for(i=0;str[i]!
='\0';i++)
{
c=str[i];
if((c>='A'&&c<='Z')||(c>='a'&&c<='z'))
letter++;
elseif(c>='0'&&c<='9')
num++;
elseif(c=='')
space++;
elseother++;
}
printf("Inthisstring:
letter=%d,space=%d,num=%d,other=%d",letter,space,num,other);
}
3、
#include<>
main()
{
intnum[10];
inti,j,k;
inttemp;
printf("Pleaseenter10numbers:
\n");
for(i=0;i<10;i++)
scanf("%d",&num[i]);
for(i=0;i<9;i++)
{
k=i;
for(j=i+1;j<10;j++)
{
if(num[k]>num[j])
k=j;
if(k!
=i)
{
temp=num[i];
num[i]=num[k];
num[k]=temp;
}
}
printf("Aftersorted:
\n");
for(i=0;i<10;i++)
printf("%5d",num[i]);
}
}
选择题(后附答案)
1.以下叙述正确的是_____。
A)在C程序中,main函数必须位于程序的最前面。
B)C语言本身没有输入输出语句。
C)C程序的每行只能写一条语句。
D)在对一个C程序进行编译的过程中,可发现注释中的拼写错误。
2.下面四个选项中,均是不合法的用户标识符的选项是。
A)AB)floatC)b-aD)_123
P_01a0gototemp
do_AintINT
3、下列四个选项中都是合法的转义字符的
A)‘\’’‘\\’‘\n’B)‘\’‘\017’‘\”’
C)‘\018’‘\f’‘xab’D)‘\\0’‘\101’‘x1f’
4、设所有变量均为整型,则表达式z=(a=2,b=5,b++,a+b)的值是:
A)7B)8C)6D)2
5、若有代数式,则不正确的C语言表达式是:
A)a/b/c*e*3B)3*a*e/b/c
C)3*a*e/b*cD)a*e/c/b*3
6、若希望当A的值为奇数时,表达式的值为”真”,A的值为偶数时,表达式的值为”假”。
则以下不能满足要求的表达式是_________。
A)A%2==1B)!
(A%2==0)
C)!
(A%2)D)A%2
7、以下程序的运行结果是:
main()
{
intm=6;
if(m++>6)printf("%d\n",m);
e1seprintf("%d\n",--m);
}
A)4B)5C)7D)6
8、当a=1,b=3,c=5,d=4,执行完下面一段程序后x的值是:
if(a
if(celse
if(aif(belsex=3;
elsex=6;
elsex=7;
A)1B)2C)3D)6
9、阅读以下程序,当输入数据的形式为25,13,10正确的输出结果为
main()
{
intx,y,z
scanf("%d%d%d",&x,&y,&z);
printf(“x+y+z=%d\n”,x+y+z);。
}
A)x+y+z=48B)x+y+z=35
C)x+y+z=35D)不确定值
10、已知各变量的类型说明如下
intk,a,b;
unsignedlongw=5;
doublex=;
则以下不符合C语言语法的表达式是:
A)x%(-3)B)w+=-2
C)k=(a=2,b=3,a+b)D)a+=a-=(b=4)*(a=3)
11、设有:
inta=1,b=2,c=3,d=4,m=2,n=2;
执行(m=a>b)&&(n=c>d)后n的值为_______。
A)1B)2C)0D)4
12、判断char型变量ch是否为大写字母的正确表达式是________。
A)'A'<=ch<='Z'B)(ch>='A')&(ch<='Z')
C)(ch>='A')&&(ch<='Z')D)('A'<=ch)AND('Z'>=ch)
13、以下描述中正确的是_________:
A)由于do一while循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句
B)在while循环体中,循环体至少要执行一次。
C)在do一while循环体中,循环体至少无条件的执行一次
D)do一while循环由do开始,用while结束,在while(表达式)后面不能写分号
14、已知intx=10,y=20,z=30;以下语句执行后x,y,z的值是_______。
if(x>y)
z=x;x=y;y=z;
A)x=10,y=20,z=30B)x=20,y=30,z=20
C)x=20,y=30,z=10D)x=20,y=30,z=30
15、若i为整型变量,则以下循环执行次数是:
for(i=2;i!
=0;)printf("%d",i--);
A)无限次B)0次C)1次D)2次
16、下面程序段:
for(t=1;t<=100;t++)
{scanf("%d",&x);
if(x<0)continue;
printf("%3d",t);
}
A)当x<0时整个循环结束
B)x>=0时什么也不输出
C)printf函数永远也不执行
D)最多允许输出100个非负整数
17、若有说明:
inta[3][4];则对a数组元素的正确引用是______。
A)a[2][4]B)a[1,3]C)a[1+1][0]D)a
(2)
(1)
18、定义如下变量和数组:
intk;
inta[3][3]={1,2,3,4,5,6,7,8,9};
则下面语句的输出结果是:
for(k=0;k<3;k++)printf("%d",a[2-k][k]);
A)369B)753C)963D)357
19、判断字符串a和b是否相等,应当使用_______.
A)if(a==b)B)if(a=b)
C)if(strcpy(a,b))D)if(strcmp(a,b))
20、对两个数组a和b进行如下初始化
chara[]="ABCDEF";
charb[]={’A’,’B’,’C’,’D’,’E’,’F’};
则以下叙述正确的是__.
A)a与b数组完全相同B)a与b长度相同
C)a和b中都存放字符串D)a数组比b数组长度长
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、下面程序段的运行结果是______
charstr[]="ABC",*p=str;
printf("%d\n",*(p+2));
(A)0(B)字符'C'的ASCII码(C)字符'C'的地址(D)字符'C'
23、下面描述正确的是_______。
A)两个字符串所包含的字符个数相同时,才能比较字符串
B)字符个数多的字符串比字符个数少的字符串大
C)字符串”STOP”(注:
有一个空格)与”STOP”相等
D)字符串”That”小于字符串”The”
24、下面判断正确的是_______。
A)char*a=“china”;等价于char*a;*a=“china”;
B)charstr[10]={“china”};等价于charstr[10];str[]={“china”};
C)char*s=“china”;等价于char*s;s=“china”;
D)charc[4]=“abc”,d[4]=“abc”;等价于charc[4]=d[4]=“abc”;
25、若用数组名作为函数调用的实参,传递给形参的是_______。
A)数组的首地址
B)数组第一个元素的值
C)数组中全部元素的值
D)数组元素的个数
26、下面函数调用语句含有实参的个数为_______。
y=func(a,b,max(d,e));
A)5B)2C)3D)4
27、C语言允许函数值类型缺省定义,此时该函数值隐含的类型是_______。
A)float型
B)int型
C)long型
D)double型
28、在C语言中,形参的缺省存储类是
A)autoB)registerC)staticD)extern
29、以下正确的函数定义形式是__________:
A)doublefun(intx,inty)
B)doublefun(intx;inty)
C)doublefun(intx,inty);
D)doublefun(intx,y);
30、在宏定义#definePI“”中,用宏名PI代替一个_______。
A)常量B)单精度数C)双精度数D)字符串
31、#defineADD(x)x+x
main()
{
intm=1,n=2,k=3;
intsum=ADD(m+n)*k;
printf(“sum=%d”,sum);
}
上面的程序运行结果是_________:
A)sum=9B)sum=10C)sum=12D)sum=18
32、以下有关宏替换和函数的调用叙述不正确的是________:
A)宏替换和函数的调用均占用运行时间。
B)宏名无类型,函数有类型
C)宏替换只是字符替换,不分配内存,但函数调用要分配内存
D)再调用宏时程序的长度要加长,而函数调用不变
33、以下程序的输出的结果是
main()
{inti;
for(i=1;i<=2;i++)incre();
}
incre()
{staticintx=1;
x*=x+1;
printf("%d",x);
}
A)33B)22C)26D)25
34、有如下定义
structperson{charname[9];intage;};
strictpersonclass[10]={"Johu",17,
"Paul",19,
"Mary",18,
"Adam”,16,};
根据上述定义,能输出字母M的语句是
A)prinft("%c\n",class[3].mane);
B)pfintf("%c\n",class[3].name[1]);
C)prinft("%c\n",class[2].name[1])
D)printf("%c\n",class[2].name[0]);
35、以下程序的输出结果是哪一项
#include<>
main()
{
inta[12]={1,2,3,4,5,6,7,8,9,10,11,12},*p[4],i;
for(i=0;i<4;i++)
p[i]=&a[i*3];
printf("%d\n",p[3][2]);
}
A.输出项不合法B.6
C.8D.12
36、以下程序的输出结果是
unionmyun
{struct
{
intx,y,z;
}u;
intk;
}a;
main()
{"%d\n",4B)5C)6D)1
37、以下关于结构体与共用体的说法,其中正确的是
A)共用体同一个内存段可以来存放几种不同类型的成员,但在某一时刻只能存放一个成员。
B)结构体变量所占的内存长度等于最长的成员的长度,共用体变量所占内存长度是各成员占的内存长度之和。
C)共用体每个成员分别占有自己的内存单元。
D)结构体类型可以出现在共用体类型的定义中,但共用体不能出现在结构体类型定义之中。
38、以下程序的输出结果是
longfun(intn)
{
longs;
if(n==1||n==2)s=2;
elses=n-fun(n-1);
returns;
}
main()
{
printf("%ld\n",fun(5));
}
A)1B)2C)3D)4
39、下列程序段的输出结果为
intarr[]={6,7,8,9,10};
int*ptr;
ptr=arr;
*(ptr+2)+=2;
printf("%d,%d\n",*ptr,*(ptr+2));
A)8,10B)6,8C)7,9D)6,10
40、设有如下定义:
int(*ptr)();
则以下叙述中正确的是
A)ptr是指向一维组数的指针变量
B)ptr是指向int型数据的指针变量
C)ptr是指向函数的指针变量,该函数返回一个int型数据
D)ptr是一个函数名,该函数的返回值是指向int型数据的指针
1-5:
BCABC6-10:
CDBDA
11-15:
BCCDD16-20:
BCBDD
21-25:
BBDBA26-30:
CBAAD
31-35:
BACDD36-40:
DABD
一单项选择题(每小题1分,共10分)
1.以下4组用户定义标识符中,全部合法的一组是()
A)_totalclu_1sum
B)if-maxturb
C)txtREAL3COM
D)intk_2_001
2.以下程序的输出结果是()
#include<>
main()
{
inta=1,b=2,c=3;
printf(“%d”,c>b>a);
}
A)2B)1C)0D)3
3.以下正确的叙述是()
A)在C语言中,main函数必须位于文件的开头
B)C语言每行中只能写一条语句
C)C语言本身没有输入、输出语句