文档库 最新最全的文档下载
当前位置:文档库 › C语言试题

C语言试题

C语言模拟试卷
共有题型:5种
━━━━━━━━━━━━━━
一、填空
第1题
C语言中,数组元素的下标下限为【1】.
答案:0
第2题
链表适用于【1】查找.
答案:顺序
第3题
int x=2,y=3,z=4; 则表达式x+(y>!z)的值为【1】.
答案:3
第4题
复合语句在语法上被认为是【1】 .空语句的形式是【2】.
答案:
=======(答案1)=======
一条语句
=======(答案2)=======
;

第5题
如果函数不要求带回值,可用【1】来定义函数返回值为空.
答案:void
第6题
表示"x≥y≥z"的C表达式是【1】
答案:x>=y&&y>=z
第7题
getchar()函数只能接收一个【1】.
答案:字符

第8题
一个C程序总是从【1】开始执行。
答案:main()

第9题
当a=1,b=2,c=3时,执行以下程序段后a=【1】.
if (a>c) b=a;
a=c;
c=b;
答案:3

第10题
表达式3&&0 的值是【1】
答案:0

第11题
为了避免嵌套条件语句的二义性,C语言规定else与其前面最近的【1】语句配对.
答案:if

第12题
以下程序运行的输出结果是【1】.
#include
fun(int x)
{ if(x/2>0)
fun(x/2);
printf("%d ",x);
}
main()
{fun(6);}
答案:1 3 6

第13题
语句:x++; ++x; x=x+1; x=l+x;
执行后都使变量x中的值增1,请写出一条同一功能的赋值语句【1】.
答案:x+=1

第14题
已知x=2,y=2 则表达式x*=y+8的值为【1】.
答案:20
第15题
C程序在执行过程中,不检查数组下标是否【1】.
答案:越界

━━━━━━━━━━━━━━━━━
二、单项选择
━━━━━━━━━━━━━━━━━
第1题
设j和k都是int类型,则下面的for循环语句()。
for(j=0,k=0;j<=9&&k!=876;j++) scanf("%d",&k);
A:最多执行10次
B:最多执行9次
C:是无限循环
D:循环体一次也不执行

答案:A

第2题
C语言程序中,当调用函数时()。
A:实参和虚参各占一个独立的存储单元
B:实参和虚参可以共用存储单元
C:可以由用户指定是否共用存储单元
D:计算机系统自动确定是否共用存储单元

答案:A

第3题
若有条件表达式 (exp)?a++:b--,则以下表达式中能完全等价于
表达式(exp)的是()。
A:(exp==0)
B:(exp!=0)
C:(exp==1)
D:(exp!=1)

第4题
以下程序的输出结果是________.
void fun(int a, int b, int c)
{ a=456; b=567; c=678; }
main()
{ int x=10, y=20, z=30;
fun(x, y, z);
printf("%d,%d,%d\n", z, y, x);
}

A:30,20,10
B:10,20,30
C:456567678
D:678567456

答案:A

第5题
语句printf("a\bre\'hi\'y\\\bou\n");的输出结果是
(说明:'\b'是退格符)()。
A:a\bre\'hi\'y\\\bou
B:a\bre\'hi\'y\bou
C:re'hi'you
D:abre'hi'y\bou

答案:C

第6题
如果int a=2,b=3,c=0,下列描述正确的是
A:a>b!=c和a>(b!=c)的执行顺序是一样的
B:!

a!=(b!=c)表达式的值为1
C:a||(b=c)执行后b的值为0
D:a&&b>c的结果为假

答案:B

第7题
已知p,p1为指针变量,a为数组名,j为整型变量,下列赋值语句中
不正确的是()。
A:p=&j,p=p1;
B:p=a;
C:p=&a[j];
D:p=10;

答案:D

第8题
以下选项中合法的用户标识符是()。
A:long
B:_2Test
C:3Dmax
D:A.dat

答案:B

第9题
若有说明: int a[][4]={0,0};则下面不正确的叙述是()。
A:数组a的每个元素都可得到初值0
B:二维数组a的第一维大小为1
C:因为二维数组a中第二维大小的值除经初值个数的商为1,故数组a的行数为1
D:有元素a[0][0]和a[0][1]可得到初值0,其余元素均得不到初值0

答案:D

第10题
以下标识符中,不能作为合法的C用户定义标识符的是()。
A:answer
B:to
C:signed
D:_if

答案:C

第11题
若从终端输入以下数据,要给变量c赋以283.19,则正确的输入语句是
A:scanf(%f",c)
B:scanf(%8.4f", &c);
C:scanf(%6.2f", &c);
D:scanf(%8f", &c);

答案:D

第12题
若有定义:char *p1,*p2,*p3,*p4,ch;
则不能正确赋值的程序语句为()。
A:p1=&ch; scanf("%c",p1);
B:p2=(char *)malloc(1);scanf("%c",p2);
C:*p3=getchar();
D:p4=&ch;*p4=getchar();

答案:C

第13题
以下运算符中,优先级最高的运算符是()。
A:*=
B:>=
C:(类型)
D:+

答案:C

第14题
语句while(!E)中的表达式!E等价于:
A:E==0
B:E!=1
C:E!=0
D:E==1

答案:A

第15题
在一个C程序中()。
A:main函数必须出现在所有函数之前
B:main函数可以在任何地方出现
C:main函数必须出现在所有函数之后
D:main函数必须出现在固定位置

答案:B

第16题
下面程序的运行结果是:

#i nclude

main()

{ int x,i;

for(i=1;i<=100;i++)

{x=i;

if(++x%2==0)

if(++x%3==0)

if(++x%7==0)

printf("%d",x);
}
}

A:39 81
B:42 84
C:26 68
D:28 70

答案:D

第17题
在C语言中,要求运算数必须是整型或字符型的运算符是()。
A:&&
B:&
C:!
D:||

答案:B

第18题
若变量已正确定义,要将a和b中的数进行交换,下面不正确的语句是
A:a=a+b, b=a-b, a=a-b;
B:t=a; a=b; b=t;
C:a=t; t=b; b=a;
D:t=b; b=a; a=t;

答案:C

第19题
下面程序的功能是在输入的一批正整数中求出最大者,输入0结束循环,请选择填空.
#include
main()
{int a,max= 0;
scanf("%d",&a)
while(【1】)
{if(maxscanf("%d",&a); ) }
printf("%d" ,max );}

A:a==0
B:a
C:!a = = 1
D:!a

答案:B

第20题
以下正确的字符串常量是
A:"\\\"
B:'abc'
C:OlympicGames
D:'A'

答案:A

第21题
若有以下程序:
main()
{ int k=2,i=2,m;
m=(k+=i*=k);
printf("%d,%d\n",m,i);
}
执行后的输

出结果是______。
A:8,6
B:8,3
C:6,4
D:7,4

答案:C

第22题
函数调用:strcat(strcpy(str1,str2),str3)的功能是
A:将串str1复制到串str2中后再连接到串str3之后
B:将串str1连接到串str2之后再复制到串str3之后
C:将串str2连接到串str1之后再将串str1复制到串str3中
D:将串str2复制到串str1中后再将串str3连接到串str1之后

答案:D

第23题
当调用函数时,实参是一个数组名,则向函数传送的是()。
A:数组的长度
B:数组的首地址
C:数组每一个元素的地址
D:数组每个元素中的值

答案:B

第24题
已定义:int a=3,b=4,c=5;以下表达式中,结果为0的是()
A:a&&b
B:a<=b
C:a||b+c&&b-c
D:!((a
答案:D

第25题
C语言函数的隐含存储类别是
A:static
B:auto
C:register
D:extern

答案:D

第26题
下列程序段的输出结果为()。

int x=3,y=2;

printf("%d",(x-=y,x*=y+8/5));
A:1
B:7
C:3
D:5

答案:C

第27题
以下叙述中错误的是
A:可以通过typedef增加新的类型
B:可以用typedef将已存在的类型用一个新的名字来代表
C:用typedef定义新的类型名后,原有类型名仍有效
D:用typedef可以为各种类型起别名,但不能为变量起别名

答案:A

第28题
下列语句中,不正确的是()。
A:static char a[2]={1,2};
B:static int a[2]={'1','2'};
C:static char a[2]={'1','2','3'};
D:static char a[2]={'1'};

答案:C

第29题
已知p,p1为指针变量,a为数组名,j为整型变量,下列赋值语句中
不正确的是()。
A:p=&j,p=p1;
B:p=a;
C:p=&a[j];
D:p=10;

答案:D

第30题
以下程序段的输出结果是().
int a=0,b=4,k=2; k=a+1>0||(++a<0)&&(!(b--<=0));
printf("%d,%d,%d",k,a,b);

A:1,1,3
B:1,1,4
C:1,0,3
D:1,0,4

答案:D

━━━━━━━━━━━━━━━━
三、程序填空
━━━━━━━━━━━━━━━━
第1题【程序填空】
---------------------------------------------------------
题目:下面程序的功能是输出1至100之间每位数的乘积大于每位数的和的数,
请填(3)空使程序完整。
-------------------------------------------------------*/
#include
main()
{ int n,k=1,s=0,m ;
for(n=1 ; n<=100 ; n++)
{
k=1 ; s=0 ;
/***********SPACE***********/
【?】
/***********SPACE***********/
while (【?】) {
k*=m%10;
s+=m%10;
/***********SPACE***********/
【?】

}
if (k>s) printf("%d\n",n);
}}
答案:
m=n;
=======(答案2)=======
m>0
=========或=========
m>=0
=======(答案3)=======
m=m/10;
=========或=========
m/=10;


第2题 (5.0分)
【程序填空】
---------------------------------------------------------
题目:通过函数func输入字符并统计输入字符的个数。输入时用字符@作为输入结束标

志。
请填空。
-------------------------------------------------------*/
#include
/***********SPACE***********/
long 【?】; /*函数说明语句*/
void main()
{ long n;
n=func();
printf("n=%ld\n",n);
}
long func()
{ long m;
/***********SPACE***********/
for( m=0;getchar()!='@';【?】);
return m;
}
答案:
=======(答案1)=======
func()
=========或=========
func(void)
=======(答案2)=======
m++
=========或=========
m+=1
=========或=========
m=m+1

第3题 (5.0分)
【程序填空】
---------------------------------------------------------
功能:求出二维数组中的最大元素值。
-------------------------------------------------------*/
#include
max_value(m,n,array)
/***********SPACE***********/
int m,n,【?】;
{ int i,j,max;
max=array[0][0];
for(i=0;ifor(j=0;j/***********SPACE***********/
if(maxreturn(max);
}
main()
{ int a[3][4]={{1,3,5,7},{2,4,6,8},{15,17,34,12}};
/***********SPACE***********/
printf("max value is %d\n",【?】);
}
答案:
=======(答案1)=======
array[][4]
=========或=========
array[3][4]
=======(答案2)=======
max=array[i][j]
=======(答案3)=======
max_value(3,4,a)

第4题
【程序填空】
---------------------------------------------------------
功能:考查字符串数组的应用。输出26个英文字母。
-------------------------------------------------------*/
#include
main (void)
{ char string[256];
int i;
/***********SPACE***********/
for (i = 0; i < 26; 【?】)
/***********SPACE***********/
string[i] = 【?】;
string[i] = '\0';
/***********SPACE***********/
printf ("the arrary contains %s\n",【?】);
}
答案:
=======(答案1)=======
i++
=========或=========
++i
=========或=========
i=i+1
=========或=========
i+=1
=======(答案2)=======
'A' + i
=========或=========
i+'A'
=========或=========
65 + i
=========或=========
i+65

=======(答案3)=======
string

第5题
【程序填空】
---------------------------------------------------------
功能:以下程序的功能如(图1)。
-------------------------------------------------------*/
#include
/***********SPACE***********/
【?】
main()
{ double x,f;
scanf("%f",&x);
/***********SPACE***********/
if(x<0) 【?】;
/***********SPACE***********/
else if(【?】)
f=2*x+1;
else
f=sin(x)+5;
/***********SPACE***********/
printf("x=%f,y=%f\n", 【?】);
}
答案:
=======(答案1)=======
#include "math.h"
=========或=========
#include
=======(答案2)=======
f=fabs( x + 1 )
=======(答案3)=======
x<=5
=========或=========
5>=x
=========或=========
x<6
=========或=========
6>x
=========或=========
x>=0&&x<=5
=========或=========
0<=x&&x<=5
=========或=========
x>=0&&5>=x
=========或=========

0<=x&&5>=x
=========或=========
!(x>5)

=======(答案4)=======
x,f

第6题
【程序填空】
---------------------------------------------------------
功能:利用指向结构的指针编写求某年、某月、某日是第
几天的程序,其中年、月、日和年天数用结构表示。
-------------------------------------------------------*/
#include
#include
main()
{
/***********SPACE***********/
【?】 date
{
int y,m,d,n;
/***********SPACE***********/
}【?】;

int k,f,a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
printf("date:y,m,d=");
scanf("%d,%d,%d",&x.y,&x.m,&x.d);
f=x.y%4==0&&x.y%100!=0||x.y%400==0;
/***********SPACE***********/
a[1]+=【?】;
if(x.m<1||x.m>12||x.d<1||x.d>a[x.m-1]) exit(0);
for(x.n=x.d,k=0;k/***********SPACE***********/
printf("n=%d\n",【?】);
}
答案:
=======(答案1)=======
struct
=======(答案2)=======
x
=======(答案3)=======
f
=======(答案4)=======
x.n


━━━━━━━━━━━━━━━━
四、程序改错
━━━━━━━━━━━━━━━━
第1题
--------------------------------------------------------
功能:编写一个函数,该函数可以统计一个长度为3的字符串在另
一个字符串中出现的次数。
例如:假定输入的字符串为:asdasasdfgasdaszx67asdmklo,字符
串为:asd,则应输出n=4。
------------------------------------------------------*/
#include
#include
#include
int fun(char *str,char *substr)
{ /**********FOUND**********/
unsigned int i,n=0
/**********FOUND**********/
for(i=0;i<=strlen(str);i++)
if((str[i]==substr[0])&&(str[i+1]==substr[1])&&(str[i+2]==substr[2]))
/**********FOUND**********/
++i;
return n;
}
main()
{ char str[81],substr[4];
int n;
printf("输入主字符串: ");
gets(str);
printf("输入子字符串: ");
gets(substr);
puts(str);
puts(substr);
n=fun(str,substr);
printf("n=%d\n",n);
}
答案:
=======(答案1)=======
unsigned int i,n=0;
=======(答案2)=======
for(i=0;i<=strlen(str)-3;i++)
=========或=========
for(i=0;i=======(答案3)=======
n++;
=========或=========
n+=1;
=========或=========
n=n+1;
=========或=========
++n;

第2题
--------------------------------------------------------
功能:下面程序将输入的大写字母改写成小写字母输出,其他字符不变;
请判断下面程序的正误,如果错误请改正过来。
------------------------------------------------------*/
main ( )
{ char c;
c = getchar ( ) ;
/**********FOUND**********/
c = (c>='A'||c<='Z') ? c-32:c+32 ;
printf("%c",c);
}

答案:
=======(答案1)=======
c = (c>='A'&&c<='Z') ? c+32:c ;


第3题
--------------------------------------------------------
功能:求一个

3行4列矩阵的外框的元素值之和。
注意:矩阵四个角上的元素不能重复加。
例如:矩阵元素为1,2,3,4,5,6,7,8,9,10,11,12时,
四框元素值之和应为65。
------------------------------------------------------*/
#include
int fun(int a[3][4],int m,int n)
{
/**********FOUND**********/
int i,j,s,s1=s2=s3=s4=0;
for(j=0;j{
s1=s1+a[0][j];
/**********FOUND**********/
s2=s2+a[m][j];
}
/**********FOUND**********/
for(i=0;i{
s3=s3+a[i][0];
s4=s4+a[i][n-1];
}
/**********FOUND**********/
s=s1-s2-s3-s4;
return s;
}
main()
{ int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
printf("total=%d\n",fun(a,3,4));
}
答案:
=======(答案1)=======
int i,j,s,s1=0,s2=0,s3=0,s4=0;
=======(答案2)=======
s2= s2 + a[m-1][j] ;
=========或=========
s2+=a[m-1][j];
=========或=========
s2=a[m-1][j]+s2;
=======(答案3)=======
for(i=1;i=========或=========
for(i=1;i<-1+m;i++)
=========或=========
for(i=1;m-1>i;i++)
=========或=========
for(i=1;-1+m>i;i++)
=========或=========
for(i=1;i<=m-2;i++)
=========或=========
for(i=1;m-2>=i;i++)

=======(答案4)=======
s= s1 + s2 + s3 + s4 ;


第4题 【程序改错】
--------------------------------------------------
功能:编写函数fun,求两个整数的最小公倍数,然后用主
函数main()调用这个函数并输出结果,两个整数由
键盘输入。
------------------------------------------------*/
#include
int fun(int m,int n)
{ int i;
/**********FOUND**********/
if (m=n)
{
i=m;
m=n;
n=i;
}
for(i=m;i<=m*n;i+=m)
/**********FOUND**********/
if(i%n==1)
return(i);
return 0;
}
main()
{ unsigned int m,n,q;
printf("m,n=");
scanf("%d,%d",&m,&n);
/**********FOUND**********/
q==fun(m,n);
printf("p(%d,%d)=%d",m,n,q);
}
答案:
=======(答案1)=======
if (m=======(答案2)=======
if(i%n==0)
=======(答案3)=======
q=fun(m,n);



━━━━━━━━━━━━━━━━
五、程序设计
━━━━━━━━━━━━━━━━
第1题 【程序设计】
--------------------------------------------------
功能:在键盘上输入一个3行3列矩阵的各个元素的值(值
为整数),然后输出矩阵第一行与第三行元素之和,
并在fun()函数中输出。
------------------------------------------------*/
#include
void wwjt();

void fun(int a[3][3])
{
/**********Program**********/


/********** End **********/

}
main()
{
int i,j,s,a[3][3];
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
}
s=fun(a);
printf("Sum=%d\n",s);
wwjt();
}

void wwjt()
{
FILE *IN,*OUT;
int m;
int n;
int i[3][3];
int o;
IN=fopen("in.dat","r");
if(IN==NULL)
{
printf("Rea

d FILE Error");
}
OUT=fopen("out.dat","w");
if(OUT==NULL)
{
printf("Write FILE Error");
}
for(m=0;m<3;m++)
{
for(n=0;n<3;n++)
fscanf(IN,"%d",&i[m][n]);
}
o=fun(i);
{
fprintf(OUT,"%d\n",o);
getch();
}
fclose(IN);
fclose(OUT);
}
答案:----------------------
int sum;
int i,j;
sum=0;

for(i=0;i<3;i+=2)
for(j=0;j<3;j++)
sum=sum+a[i][j];
return sum;
----------------------

第2题 【程序设计】
--------------------------------------------------
功能:编写函数求表达式的和(n的值由主函数输入)。
1-1/2+1/3-1/4+......+1/m
例如:当n=20时,表达式的值为0.668771。
------------------------------------------------*/
#include
void wwjt();

double sum(int n)
{
/**********Program**********/



/********** End **********/
}
main()
{ int n;
scanf("%d",&n);
printf("sum=%f\n",sum(n));
wwjt();
}

void wwjt()
{
FILE *IN,*OUT;
int n;
int i[10];
double o;
IN=fopen("in.dat","r");
if(IN==NULL)
{
printf("Read FILE Error");
}
OUT=fopen("out.dat","w");
if(OUT==NULL)
{
printf("Write FILE Error");
}
for(n=0;n<5;n++)
fscanf(IN,"%d",&i[n]);
for(n=0;n<5;n++)
{
o = sum(i[n]);
fprintf(OUT,"%f\n",o);
}
fclose(IN);
fclose(OUT);
}
答案:----------------------
float s=0;
int i,k=1;
for(i=1;i<=n;i++)
{ s=s+k*1.0/i;
k=-k;
}
return(s);
----------------------

第3题 【程序设计】
--------------------------------------------------
功能:从键盘输入一个大于3的整数,调用函数fun判断
其是否素数,然后在main函数中输出相应的结论
信息。
例如:7是素数,8不是素数。请编写fun函数。素数是
仅能被1和自身整除的数
-------------------------------------------------*/
#include
void wwjt();
int fun(int n)
{
/**********Program**********/


/********** End **********/
}
main()
{ int m,flag;
printf("input an integer:");
scanf("%d",&m);
flag=fun(m);
if(flag)
printf("%d is a prime.\n",m);
else
printf("%d is not a prime.\n",m);
wwjt();
}

void wwjt()
{
FILE *IN,*OUT;
int iIN,iOUT,i;
IN=fopen("5.IN","r");
if(IN==NULL)
{
printf("Please Verify The Currernt Dir..it May Be Changed");
}
OUT=fopen("5.out","w");
if(OUT==NULL)
{
printf("Please Verify The Current Dir.. it May Be Changed");
}
for(i=0;i<10;i++)
{
fscanf(IN,"%d",&iIN);
iOUT=fun(iIN);
fprintf(OUT,"%d\n",iOUT);
}
fclose(IN);
fclose(OUT);
}
答案:----------------------
int i;
int j;
j= 1;
for(i=2;i{if(n%i==0) j= 0;
}
return j;
----------------------




相关文档