北航C语言期末模拟试题20.docx
《北航C语言期末模拟试题20.docx》由会员分享,可在线阅读,更多相关《北航C语言期末模拟试题20.docx(15页珍藏版)》请在冰点文库上搜索。
北航C语言期末模拟试题20
单选题
下列关于单目运算符++、--的叙述中正确的是(D)。
A、它们的运算对象可以是int型变量,但不能是double型变量和float型变量
B、它们的运算对象可以是任何变量和常量
C、它们的运算对象可以是char型变量和int型变量,但不能是float型变量
D、它们的运算对象可以是char型变量、int型变量和float型变量
执行下列程序后,其输出结果是(D)。
main()
{inta=9;
a+=a-=a+a;
printf("%d\n",a);
}
A、18
B、-9
C、9
D、-18
打印语句printf("sTUDEND\bT\rS");在屏幕上正确的输出形式是(C).
A、sTUDENDS
B、TUDENTS
C、STUDENT
D、sTUDENTS
已知键盘输入a=4,b=3,下面程序输出的结果是(C).
main()
{inta,b,s;
scanf("%d%d",&a,&b);
s=a;
if(a
s=s*s;
printf("%d\n",s);
}
A、9
B、13
C、16
D、15
若给定条件表达式(m)?
(a++):
(a--),则其中表达式m(B)。
A、和(m==0)等价
B、和(m!
=0)等价
C、和(m==1)等价
D、和(m!
=1)等价
执行语句for(i=1;i++<4;);后变量i的值是(B)。
A、3
B、5
C、4
D、不定
以下描述中正确的是(C)。
A、由于do-while循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句
B、do-while循环中,根据情况可以省略while
C、在do-while循环体中,必须有能使循环退出的操作。
D、do-while循环由do开始,用while结束,在while(表达式)后面不能写分号
inta[10];合法的数组元素的最小下标值为(D)。
A、10
B、9
C、1
D、0
以下正确的函数定义是(C).
A、doublefun(intx,inty){z=x+y;returnz;}
B、fun(x,y){intx,y;doublez;z=x/y;returnz;}
C、floatf(intx,inty){floatz;z=x/y;returnz;}
D、fun(intx,y){intz;returnz;}
chara1[]="abc",a2[80]="1234";将a1串连接到a2串后面的语句是(A)。
A、strcat(a2,a1);
B、strcat(a1,a2);
C、strcpy(a1,a2);
D、strcpy(a2,a1);
若有chars1[]="abc",s2[20],*t=s2;gets(t);则下列语句中能够实现当字符串s1大于字符串s2时,输出s2的语句是(C)。
A、if(strcmp(s2,s1)>0)puts(s2);
B、if(strcmp(s2,t)>0)puts(s2);
C、if(strcmp(s1,t)>0)puts(s2);
D、if(strcmp(s1,s1)>0)puts(s2);
已知有宏定义#defineSQR(a)2*a*a,则SQR(3+4)的值为(A).
A、22
B、32
C、98
D、18
若有说明:
int*p,m=5,n;以下正确的程序段是(D)。
A、scanf("%d",&n);*p=n;
B、p=&n;scanf("%d",*p)
C、p=&n;scanf("%d",&p);
D、p=&n;scanf("%d",p);
charh,*s=&h;可将字符H通过指针存入变量h中的语句是(A)。
A、*s='H';
B、s='H'
C、*s=H;
D、s=H;
定义结构体的关键字是(A)。
A、struct
B、typedef
C、enum
D、union
判断题
若a=3,b=2,c=1则关系表达式"(a>b)==c"的值为"真"。
T
a=(b=4)+(c=6)是一个合法的赋值表达式。
T
C语言程序中输入一个中间带有空格的字符串时,可以用scanf函数.F
格式字符%e以指数形式输出实数数字部分小数位数7位.F
设g=1,h=2,k=3,则逻辑表达式k+g||!
h&&k-h的值为0。
F
求解表达式max=(a>b)?
a:
b的步骤是,先求解条件表达式(a>b),再根据它的值将a或b赋给max.T
语句if(a>b)printf("%d",a);elseprintf("%d",b);可以用条件表达式a>b?
a:
b取代.F
break语句能够终止当前进行的多层循环.F
for循环的三个表达式都可以省略.T
for语句的循环体至少执行一次.F
字符串"Dalian"在内存中的存储长度是7.F
定义intx[5],n;则x=x+n;或x++;都是正确的.F
若有定义inta[10];则for(i=0;i<=10;i++)a[i]=i;编译时无语法错误.T
数组名作为函数调用时的实参,实际上传递给形参的是数组第一个元素的值.F
当变量的存储类型定义缺省时,系统默认为变量的存储类型为auto类型,分配在动态区.F
两个字符串中的字符个数相同时才能进行字符串大小的比较.F
如果被包含文件中有全局静态变量,它们在用#include命令的源文件中有效.T
假设有inta[10],*p;则p=&a[0]与p=a等价.T
共用体变量中起作用的成员是最后一次存放的成员.T
下面的定义和语句是合法的:
file*fp;fp=fopen("a.txt","r");F
填空题
若有定义:
inta=10,b=9,c=8;接着顺序执行下列语句后,变量c中的值是_____.
c=(a-=(b-5));c=(a%11)+(b=3);9
下列语句输出的结果是_____,inta=-1;printf("%x",a);(在vc环境下)ffffffff
设a=3,b=4,c=4,则表达式a+b>c&&b==c&&a||b+c&&b==c的值为_____.1
以下程序段要求从键盘输入字符,当输入字母为'Y'时,执行循环体,则下划线处应填写_____.
ch=getchar();
while(ch____'Y')
ch=getchar();==
staticinta[3][3]={{1,2,3},{4,5,6},{7,8,9}};其中a[1][2]的值为_____.6
静态变量和外部变量的初始化是在_____阶段完成的,而自动变量的赋初值是在_____时进行的.(编译),(运行/函数调用/调用)1752
将函数func的入口XXX赋给指针变量p的语句是_____.p=func;
设有以下结构类型说明和变量定义,则变量b在内存所占字节数是_____。
21
structstud{shortintage;charnum[3];floats[2];doubleave;}b,*p;
程序设计题
/*------------------------------------------------
【程序设计】1685
--------------------------------------------------
功能:
能计算从1开始到n的自然数的和,n由键盘输入,
并在main()函数中输出。
------------------------------------------------*/
#include"stdio.h"
intfun(intn)
{
/*********Begin**********/
intsum=0,i;
for(i=1;i<=n;i++)
sum=sum+i;
return(sum);
/**********End**********/
}
main()
{
intm;
voidTestFunc();
printf("Enterm:
");
scanf("%d",&m);
printf("\nTheresultis%d\n",fun(m));
TestFunc();
}
voidTestFunc()
{
FILE*IN,*OUT;
intt;
into;
intc;
IN=fopen("in.dat","r");
if(IN==NULL)
{
printf("ReadFileError");
}
OUT=fopen("out.dat","w");
if(OUT==NULL)
{
printf("WriteFileError");
}
for(c=1;c<=5;c++)
{
fscanf(IN,"%d",&t);
o=fun(t);
fprintf(OUT,"%d\n",o);
}
fclose(IN);
fclose(OUT);
}
/*------------------------------------------------
【程序设计】1599
--------------------------------------------------
功能:
调用函数fun判断一个三位数是否"水仙花数"。
在main函数中从键盘输入一个三位数,并输
出判断结果。
请编写fun函数。
说明:
所谓"水仙花数"是指一3位数,其各位数字立方和
等于该数本身。
例如:
153是一个水仙花数,因为153=1+125+27。
------------------------------------------------*/
#include"stdio.h"
intfun(intn)
{
/*********Begin**********/
intbw,sw,gw;
bw=n/100;sw=(n-bw*100)/10;gw=n%10;
if(n==bw*bw*bw+sw*sw*sw+gw*gw*gw)return1;
elsereturn0;
/**********End**********/
}
TestFunc()
{
FILE*IN,*OUT;
intiIN,i;
intiOUT;
IN=fopen("in.dat","r");
if(IN==NULL)
{
printf("PleaseVerifyTheCurrerntDir..ItMayBeChanged");
}
OUT=fopen("out.dat","w");
if(OUT==NULL)
{
printf("PleaseVerifyTheCurrentDir..ItMayBeChanged");
}
for(i=0;i<10;i++)
{
fscanf(IN,"%d",&iIN);
iOUT=fun(iIN);
fprintf(OUT,"%d\n",iOUT);
}
fclose(IN);
fclose(OUT);
}
main()
{
intn,flag;
scanf("%d",&n);
flag=fun(n);
if(flag)
printf("%d是水仙花数\n",n);
else
printf("%d不是水仙花数\n",n);
TestFunc();
}
程序改错题
/*------------------------------------------------------
【程序改错】1246
--------------------------------------------------------
功能:
有一数组内放10个整数,要求找出最小数和它的下标,然后
把它和数组中最前面的元素即第一个数对换位置.
------------------------------------------------------*/
#include"stdio.h"
main()
{
inti,a[10],min,k=0;
printf("\npleaseinputarray10elements\n");
for(i=0;i<10;i++)
/***********ERROR***********/
scanf("%d",a[i]);//scanf("%d",&a[i]);
for(i=0;i<10;i++)
printf("%d",a[i]);
min=a[0];
/***********ERROR***********/
for(i=3;i<10;i++)//for(i=1;i<10;i++)for(i=0;i<10;i++)
//for(i=1;i<=9;i++)for(i=0;i<=9;i++)
/***********ERROR***********/
if(a[i]>min)//if(a[i]{
min=a[i];
k=i;
}
/***********ERROR***********/
a[k]=a[i];//a[k]=a[0];
a[0]=min;
printf("\naftereschange:
\n");
for(i=0;i<10;i++)
printf("%d",a[i]);
printf("\nk=%d\nmin=%d\n",k,min);
}
/*------------------------------------------------------
【程序改错】1906
--------------------------------------------------------
功能:
以下程序把两个数按由大到小的顺序输出来.
------------------------------------------------------*/
#include"stdio.h"
/***********ERROR***********/
voidswap(int*p1,*p2)//swap(int*p1,int*p2)voidswap(int*p1,int*p2)
{
intp;
p=*p1;
*p1=*p2;
*p2=p;
}
main()
{
inta,b,*p,*q;
printf("inputa,b:
");
/***********ERROR***********/
scanf("%d%d",a,b);//scanf("%d%d",&a,&b);
p=&a;
q=&b;
if(a
swap(p,q);
printf("a=%d,b=%d\n",a,b);
/***********ERROR***********/
printf("max=%d,min=%d\n",p,q);//printf("max=%d,min=%d\n",*p,*q);
//printf("max=%d,min=%d\n",a,b);
}
程序填空题
/*-------------------------------------------------------
【程序填空】1324
---------------------------------------------------------
题目:
本程序的功能是输入一段数字后,将输出的数字颠倒输出。
请填空。
-------------------------------------------------------*/
#include"stdio.h"
main()
{
intnumb,rdigit;
scanf("%d",&numb);
/***********FILL***********/
while(_____)//numb!
=0numb
{
rdigit=numb%10;
/***********FILL***********/
printf("%d",_____);//rdigit
numb/=10;
}
printf("\n");
}
/*-------------------------------------------------------
【程序填空】1573
---------------------------------------------------------
题目:
本程序用printf函数输出字符串"Iamstudent",完善程序。
-------------------------------------------------------*/
#include"stdio.h"
main()
{
inti;
char*s1="Iamstudent";
/***********FILL***********/
for(i=0;s1[i]!
=____;i++)//'\0'
/***********FILL***********/
printf("_____",s1[i]);//%c
}