C语言考试试题三套.docx
《C语言考试试题三套.docx》由会员分享,可在线阅读,更多相关《C语言考试试题三套.docx(24页珍藏版)》请在冰豆网上搜索。
C语言考试试题三套
C语言辅导试题一
一、单项选择题(每小题2分,共20分)
1.C语言程序的三种基本结构是顺序结构、选择结构和______结构。
A、循环B、递归C、转移D、嵌套
2.若x是单精度实型变量,表达式(x=10/4)的值是_____。
A、2.5B、2.0C、3D、2
3.表达式!
x等价于_____。
A、x==0B、x==1C、x!
=0D、x!
=1
4.若变量已正确定义且k的值是4,计算表达式(j=k--)后,_____。
A、j=3,k=3B、j=3,k=4C、j=4,k=4D、j=4,k=3
5.算术运算符、赋值运算符和关系运算符的运算优先级按从高到低的顺序依次为_____。
A、算术运算、赋值运算、关系运算B、关系运算、赋值运算、算术运算
C、算术运算、关系运算、赋值运算D、关系运算、算术运算、赋值运算
6.C语言中,形参的缺省的存储类说明是______。
A、autoB、staticC、registerD、extern
7.下列语句定义pf为指向float类型变量f的指针,_____是正确的。
A、floatf,*pf=f;B、floatf,*pf=&f;C、float*pf=&f,f;D、floatf,pf=f;
8.表达式sizeof(“key”)的值是______。
A、1B、2C、3D、4
9.将程序prog.c编译后运行:
prog–nlahelloworld则*(*(argv+2))是______。
A、’p’B、‘-‘C、‘h’D、‘w’
10.若a是整型变量,表达式~(a^~a)等价于______。
A、~aB、1C、0D、2
二、填空题(每小题3分,共24分)
1.写出语句printf("%d,%o,%x",0x12,12,012);的输出结果。
2.写出下列程序段的输出结果。
#defineF(x)x-2
#defineD(x)x*F(x)
printf("%d,%d",D(3),D(D(3)));
3.写出下列程序段的输出结果。
intk;char*s=“ABC”;
for(k=10;k!
=0;k--);
printf("%d",k);
while(*s++)putchar(*s);
4.写出下列程序的输出结果。
voidfun(intk)
{staticinta;
printf(”%d,”,a);
a+=k;
}
main()
{intk;
for(k=1;k<=3;k++)
fun(k);
}
5.写出下列程序的输出结果。
main()
{structst{
intx,y;
}a[4]={{10,20},{30,40},{50,60},{70,80}};
structst*p=a;
printf("%d,",p++->x);
printf("%d,",++p->y);
printf("%d\n",(a+3)->x);
}
6.写出下列程序的输出结果。
#include"stdio.h"
voidmain()
{intk,j,m,n,a[6][6],b[6];
m=3,n=2;
for(k=0;kfor(j=0;ja[k][j]=k*n+j+1;
for(k=0;kb[k]=0;
for(j=0;jb[k]+=a[k][j];
}
for(k=0;kprintf("%d,",b[k]);
}
7.写出下列程序的输出结果。
#include
longfib(intg)
{switch(g){
case0:
return(0);
case1:
case2:
return
(2);
}
printf("g=%d,",g);
return(fib(g-1)+fib(g-2));
}
main()
{longk;
k=fib(4);
printf("k=%ld\n",k);
}
8.用typedef定义一个长度为10的整型数组NUM。
三、程序阅读题(每题5分,共20分)
1.写出下列程序的输出结果。
#include
intx,y,z;
voidp(int*x,inty)
{--*x;
y++;
z=*x+y;
printf("%d,%d,",*x,y);
}
voidmain()
{x=5;y=2;z=0;
p(&x,y);
printf("%d,%d,%d--",x,y,z);
p(&y,x);
printf("%d,%d,%d\n",x,y,z);
}
2.写出下列程序的输出结果,并指出该程序的功能。
#include
voidmain()
{intx,k;
x=14;
for(k=0;x!
=0;x&=x-1)
++k;
printf("%d\n",k);
}
3.写出下列程序的输出结果。
#include
voidmain()
{
intv[]={6,3,4,1,2};intn=5;
intgap,j,k,temp;
for(gap=n/2;gap>1;gap/=2)
for(j=gap;jfor(k=j-gap;k>=0&&v[k]>v[k+gap];k-=gap){
temp=v[k];
v[k]=v[k+gap];
v[k+gap]=temp;
}
for(k=0;k<5;k++)printf("%d,",v[k]);
}
4.输入123450后,写出下列程序的输出结果。
#defineLENsizeof(structline)
#defineNULL0
structline{
intnum;
structline*next;
}
main()
{structline*p1,*p2,*head;
intj,k=0;
p1=p2=head=(structline*)malloc(LEN);
scanf("%d",&p1->num);
while(p1->num!
=0){
p1=(structline*)malloc(LEN);
scanf("%d",&p1->num);
if(p1->num==0)p2->next=NULL;
else{p2->next=p1;
p2=p1;
}
k++;
}
p2->next=head;p1=head->next;p1=p1->next;
for(j=1;j<=k;j++){
printf("-->%d",p1->num);
p1=p1->next;
}
}
四、程序填空题(每空2分,共20分)
1.输入10个点的坐标(设坐标为整数值),输出距原点最远的点(设唯一)的坐标及该点距原点的距离.
#include
voidmain()
{
struct{
intx,y;
floatlength;
}point[10];
intk,sub=0;
for(k=0;k<10;k++){
scanf("%d%d",&point[k].x,&point[k].y);
point[k].length=
(1)
}
for(k=1;k<10;k++)
if(
(2))(3)
printf("(%d,%d)%f\n",point[sub].x,point[sub].y,point[sub].length);
}
2.将输入的n个字符串连接成1个字符串,然后输出该字符串.
#include
#include
voidmain()
{
charstr[10][20],string[200];
intk,n;
scanf("%d",&n);
for(k=0;kgets(str[k]);
(4)
for(k=1;k(5)
puts(string);
}
3.函数xtoi的功能是将放在字符串中的十六进制数(可以出现’0’~’9’、’a’~’f)转换成十进制整数。
例如:
调用xtoi("1f")将返回31。
xtoi((6))
{intk,d=0;
for(k=0;s[k]==’’||s[k]==’\t’;k++);
while(s[k]>=’0’&&s[k]<=’9’||s[k]>=’a’&&s[k]<=’f’){
if(s[k]>='0'&&s[k]<='9')
(7)
if(s[k]>='a'&&s[k]<='f')
(8)
k++;
}
returnd;
}
4.函数month_day(year,yearday,&month,&day)的功能是将给定的某年第几天转换为相应的月和日。
例如:
调用month_day(1988,60,&m,&d)后,m的值是2,d的值是29(即1988年的第60天是1988年2月29日)。
判别闰年的条件:
能被4整除但不能被100整除或能被400整除。
voidmonth_day(intyear,intyearday,int*pmonth,int*pday)
{staticintday_tab[2][13]={
{0,31,28,31,30,31,30,31,31,30,31,30,31},
{0,31,29,31,30,31,30,31,31,30,31,30,31}};
intk,leap;
leap=year%4==0&&year%100!
=0||year%400==0;
for(k=1;yearday>day_tab[leap][k];k++)
(9)
*pmonth=(10)
*pday=yearday;
}
五、编程题(共16分)
1.[程序说明](5分)
请编写函数sum_fact(number),返回number的因子之和。
(能整除number的数就是它的因子,number定义为int)
例如sum_fact(6)=12(因为1,2,3,6是6的因子)
2.[程序说明](11分)
文本文件input.txt中存放了一批整数,将其中每个数的因子之和顺序写入文件output.txt。
(必须调用第1小题中定义的函数sum_fact(number)计算number的因子之和)
例:
若文件input.txt中存放了1,2,6,则每个数的因子之和分别是1312,它们被写入文件output.txt。
C语言辅导试题二
一、单项选择题(每小题2分,共30分)
1. C语言程序中可以对程序进行注释,注释部分必须用符号_____括起来。
A、‘{‘和’}’B、‘[‘和’]’C、“/*”和”*/”D、“*/”和”/*”
2. 下列运算符中,优先级最低的是_____。
A、*B、!
=C、+D、=
3. 若变量已正确定义,表达式(j=3,j++)的值是_____。
A、3B、4C、5D、0
4. 已知字符‘a’的ASCII码为97,执行下列语句的输出是_____。
printf("%d,%c",’b’,’b’+1);
A、98,bB、语句不合法C、98,99D、98,c
5. 表达式strcmp(“box”,“boss”)的值是一个_______。
A、正数B、负数C、0D、不确定的数
6. 数组定义为inta[3][2]={1,2,3,4,5,6},数组元素_____的值为6。
A、a[3][2]B、a[2][1]C、a[1][2]D、a[2][3]
7. 要调用数学函数时,在#include命令行中应包含_____。
A、”stdio.h”B、”string.h”C、”math.h”D、”ctype.h”
8. 判断i和j至少有一个值为非0的表达式是_____。
A、i!
=0&&j!
=0B、i*j!
=0[yh1]C、!
(i==0||j==0)D、i&&j
9. 若a是基本整型变量,c是单精度实型变量,输入语句______是错误的。
A、scanf(”%d,%f”,&a,&c);B、scanf(”d=%d,c=%f”,&a,&c);
C、scanf(”%d%f”,&a,&c);D、scanf(”%d%f”,a,c);
10. 若变量已正确定义并且指针p已经指向某个变量x,则(*p)++相当于_____。
A、p++B、x++C、*(p++)D、&x++
11. 若p1、p2都是整型指针,p1已经指向变量x,要使p2也指向x,_____是正确的。
A、p2=p1;B、p2=**p1;C、p2=&p1;D、p2=*p1;
12. 下列程序段的输出是_____。
intc[]={1,3,5};
int*k=c+1;
printf("%d",*++k);
A、3B、5C、4D、6
13. 不正确的赋值或赋初值的方式是______。
A、charstr[]="string";
B、charstr[7]={'s','t','r','i','n','g'};
C、charstr[10];str="string";
D、charstr[7]={'s','t','r','i','n','g',’\0’};
14. 对于以下结构定义,++p->str中的++加在_____。
struct{
intlen;
char*str;
}*p;
A、指针str上B、指针p上C、str指的内容上D、以上均不是
15. 对于如下说明,语法和语义都正确的赋值是_____。
intc,*s,a[]={1,3,5};
A、c=*s;B、s[0]=a[0];C、s=&a[1];D、c=a;
二、填空题(每小题2分,共20分)
1. 写出下列程序段的输出结果。
floatx1,x2;
x1=3/2;
x2=x1/2;
printf("%d,%.1f",(int)x1,x2);
2. 表达式(7<<1>>2^2)的值是_______。
3. 写出下列程序段的输出结果。
#defineA10
#defineB(Aprintf("%d",B*2);
4. 写出判断字符变量c是英文字母的表达式。
5. 写出下列程序段的输出结果。
intk,x;
for(k=0,x=0;k<=9&&x!
=10;k++)
x+=2;
printf("%d,%d",k,x);
6. 写出下列程序段的输出结果。
printf(“%d,%d”,NULL,EOF);
7. 对于以下递归函数f,调用f(3)的返回值是_____。
f(intn)
{return((n>0)?
2*f(n-1)+f(n-2):
-1);}
8. 写出下列程序段的输出结果。
charstr[]="hello\tworld\n";
printf("%d,%c\n",sizeof(str),*(str+10));
9. 输入12345#后,写出下列程序的输出结果。
voidmain()
{charc;
for(c=getchar();getchar()!
=’#’;c=getchar())
putchar(c);
}
10. 执行程序find–nxouldtext.txt时,*++argv[1]的值是_______。
三、程序阅读题(每题5分,共20分)
1. 若输入3123<回车>,则以下程序的输出结果是_______。
#include"stdio.h"
voidmain()
{inti,j,n,a[10];
scanf("%d",&n);
for(i=0;iscanf("%d",&a[i]);
for(i=0;ifor(j=0;jprintf("%d,",a[(i+j)%n]);
}
2. 若输入89762425981116354<回车>,则以下程序的输出结果是_______。
#include"stdio.h"
#defineN10
main()
{
intx[N],y1[N],y2[N];
inti,j,n1,n2,t,p;
n1=n2=0;
for(i=0;iscanf(“%d”,&x[i]);
if(x[i]%2==0)y1[n1++]=x[i];
elsey2[n2++]=x[i];
}
for(i=1;ifor(j=0;jif(y1[j]>y1[j+1]){
t=y1[j];y1[j]=y1[j+1];y1[j+1]=t;
}
for(i=0;ip=i;
for(j=i+1;jif(y2[p]if(p!
=i){
t=y2[i];y2[i]=y2[p];y2[p]=t;
}
}
for(i=0;ifor(i=0;i}
3. 以下程序的输出结果是_______。
#include
intz;
voidp(int*x,inty)
{++*x;
y--;
z=*x+y+z;
printf("%d,%d,%d#",*x,y,z);
}
voidmain()
{intx=1,y=5,z=9;
p(&x,y);
printf("%d,%d,%d#",x,y,z);
}
4. 若输入-6+15*3/5=<回车>,则以下程序的输出结果是_______。
#include
voidmain()
{
intm=0,sum=0;
charc,oldc='+';
do{
c=getchar();
if(c<='9'&&c>='0')m=10*m+c-'0';
else{
if(oldc=='+')sum+=m;
elsesum-=m;
m=0;
oldc=c;
printf("%d,",sum);
}
}while(c!
='=');
}
四、程序填空题(每空2分,共20分)
1. 下列程序的功能是创建单向链表。
#include
#include
structlink{
charname[10];
intmark;
structlink*next;
};
voidinsert(char*,int);
structlink*head=NULL;
main()
{
charname[10];
intmark;
structlink*t;
while
(1){
scanf("%s%d",name,&mark);
if(strcmp(name,"#")==0)break;
______
(1)_______;
}
for(t=head;______
(2)_______)
printf("<%s>:
%d\n",t->name,t->mark);
}
voidinsert(char*name,intmark)
{
structlink*p;
p=______(3)_______;
strcpy(p->name,name);
p->mark=mark;
______(4)_______;
if(head!
=NULL)______(5)_______;
head=p;
}
2. prog.c是带命令行参数的程序。
运行progfilename时,将文本文件filename中的内容原样输出;运行prog-ufilename时,将文本文件filename中的所有字母以大写方式输出(其余字符原样输出);运行prog-dfilename时,只将文本文件filename中的数字输出。
#include