C语言试卷及答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、选择题。
(每空2分,共计40分)
本试卷包括第一卷和第二卷,答卷时间总共120分钟)
第一卷
第一部分:基础知识(20项,共40分)
1.一个C语言程序是由(C )组成的。
A.主程序B.子程序C.函数D.过程2.转换说明符%x的输出形式是(C )。
A.十进制B.八进制C.十六进制D.二进制3.若a、b均为int型变量,且a=100,则关于循环语句for(b=100;a!=b;++a,++b)
printf ( “------------“) ;的正确说法是(C )。
A.循环体只执行一次B.死循环
C.循环体一次也不执行D.输出----------- 4.若x、y、z均为int 型变量,则执行下列语句后的z值为( A )。
x=1; y=2; z=3; z=(x>y)?z :y ; z = (z<y)?z:x;
A.1 B.4 C.2 D.3
5.下面标识符中,合法的用户标识符为(D )。
A.P#Ad B.12a C.char D._int
6.‘A’+ 3 的结果是( B )。
A.’A’B.’D’的ASCⅡ码C.65 D.3 7.语句char str[20];说明str是一个字符串,最多能表示( B )。
A.20个字符B.19个字符C.18个字符D.21个字符
8.将int 型变量n转换成float型变量的方法是( B )。
A.float n B.(float)n C.float(n) D.21个字符9.以下不正确的描述是( C )。
A.使用while和do-while循环时,循环变量初始化的操作应在循环语句之前完成
B.while循环是先判断表达式后执行循环体语句
C.do-while和for循环均是先执行循环体语句,后判断表达式D.for、while、do-while循环中的循环体均可以由空语句构成10.在循环中使用break 语句的功能是( A )。
A.使程序的执行跳出break所在的那一重循环
B.使程序执行结束
C.跳出包含此break语句的所有循环
D.终止本次循环,继续下次循环
11.下面是一个初始化指针的语句:int *px = &a;其中指针变量的名字应该是(C )。
A.*pz B.a C.px D.&a 12.若指针px为空指针,则( B )。
A.px指向不定B.px的值为零
C.px的目标为零D.px的地址为零
13.对于语句int *px[10],以下说法正确的是( B )。
A. px是一个指针,指向一个数组,数组的元素是整数型。
B. px是一个数组,其数组的每一个元素是指向整数的指针。
C. A和B均错,但它是C语言的正确语句。
D. C语言不允许这样的语句。
14.具有相同基类型的指针变量P和数组变量Y,下列写法中不合法的是(D )。
A.P = Y B.*P = Y[i]
C.P + &Y[i] D.P = &Y
15.已知static int a[]={5,4,3,2,1},*p[]={a+3,a+2,a+1,a},**q=p,则表达式*(p[0]+1)+**(q+2)的值是(A )。
A.5 B.4 C.6 D.7 16.已知for(;n>=1;n--),下列语句实现将S2所指字符数组中前n个
字符复制到S1所指字符数组中,其中代码不正确的是(D )。
A.*S1++=*S2++ B.S1[n-1]=S2[n-1] C.*(S1+n-1)=*(S2+n-1) D.*(++S1)=*(++S2)17.调用函数的实参与被调用函数的形参应该有如下关系( D )。
A.只要求实参和形参个数相等B.只要求形参和实参顺序相同
C.只要求实参和形参数据类型相同D.上述三点均需具备18.联合体成员的数据类型(B )。
A.相同B.可以不同也可以相同
C.长度一样D.是结构体变量
19.由系统分配和控制的标准输出文件为( D )。
A.键盘B.磁盘C.打印机D.显示器20.C语言标准库函数fread(fd,buffer,n)的功能是(A)。
A.从文件fd中读取长度不超过n个字节的数据送入buffer指向的内存区域
B.从文件fd中读取长度不超过n-1个字节的数据送入buffer 指向的内存区域
C.从文件fd中读取长度不超过n个字符送入buffer指向的内存区域
D.从文件fd中读取长度不超过n-1个字符送入buffer指向的内存区域
二、简单程序(10项,共40分)
21.下列程序
main()
{ int x,y,z;
x=y=2;z=3;
y=z++-1;
printf(“%d\t%d\t”,x,y);
y=++x-1;
printf(“%d \t%d\n”,x,y);
y=z---1;
printf(“%d\t%d\t”,z,y);
y=--z-1;
printf(“%d\t%d\n”,z,y);
}
运行后输出的数据为¬¬¬____C___。
A. 3 1 4 2
B. 3 1 3 3
C. 2 2 3 2
D. 2 1 3 2
2 4 1
3 2
4 2 2 3 3 2 1 1 3 1 2 22.下列程序
main()
{ int i,j;char *a,c;
a=”computer”;
printf(“%s”,a);
for(i=0,j=7;i<j;i++,j--)
{ c=a[i];
*(a+i)=*(a+j);
a[j]=c;
}
printf(“->%s\n”,a);
c=a[j-1,i=2+j];
printf(“a[%d]=%c\n”,i,c);
}
运行后输出的数据为__B_ .
A. computer->computer
B. computer->retupmoc
a[3]=u a[5]=m
C. computer->retupmoc
D. computer->retupmoc
a[4]=p a[2]=t
23.下列程序
int sum(int n)
{ int p=1,s=0,i;
for(i=1;i<=n;i++) s+=(p*=i);
return s;
}
main()
{ printf(“sum(5)=%d\n”,sum(5));
}
运行后输出的数据为_ _C__
A.sum(5)=151
B.sum(5)=152
C.sum(5)=153 Dsum(5)=155
24.下列程序
main()
{ static int a[]={5,6,7,3,2,9};
int s1,s2,i,*ptr;
s1=s2=0;
ptr=&a[0];
for(i=0;i<5;i+2=2)
{ s1+=*(ptr+i);
s2+=*(ptr+i+1);
}
printf(“s1=%d,s2=%d\n”,s1,s2);
}
运行后输出的数据为__C___
A.s1=18,s2=14
B.s1=14,s2=32
C.s1=14,s2=18
D.s1=15,s2=19
25.下列程序
int c=1;
main()
{static int a=5;int b=6;
printf(“a=%d b=%d c=%d\n”,a,b,c);
func();
printf(“a=%d,b=%d,c=%d\n”,a,b,c);
func();
}
func()
{ static int a=4;int b=10;
c+=10;
b+=c;
printf((“a=%d,b=%d,c=%d\n”,a,b,c);
}
运行后输出的数据为_ A ___.
A. a=5 b=6 c=1
B. a=5 b=6 c=1
a=6 b=21 c=11 a=7 b=17 c=11
a=5 b=6 c=11 a=5 b=6 c=11
a=8 b=31 c=21 a=9 b=17 c=21
C. a=5 b=6 c=1
D. a=5 b=6 c=1
a=6 b=21 c=11 a=7 b=17 c=11
a=6 b=21 c=11 a=7 b=17 c=11
a=8 b=31 c=21 a=9 b=38 c=21
26.已知
struct student
{char ﹡name;
int student_n;
char grade;
};
struct student temp,*p=&temp; =”chou”;
则下面不正确的是_____B__。
表达式值
A.p→name chou
B.(*p)→name+2 h
C.*p→name+2 e
D.*(p→name+2) o
27.下列程序
#define MAX 10
main()
{ int i,sum,a[ ]={1,2,3,4,5,6,7,8,9,10};
sum=1;
for(i=0;i<MAX;i++)
sum-=a[i];
printf(“SUM=%d”,sum);
}
程序运行结果是: B
A.SUM=55
B.SUM=-54
C.SUM=-55
D.SUM=54
28.下列程序D
void inv(int*x,int n)
{int *p,t,*i,*j,m=(n-1)/2;
i=x;
j=x+n-1;
p=x+m;
for(;i<p;i++,j--)
{ t=*i;
*i=*j;
*j=t;
}
return;
}
main( )
{ static int i,a[10]={3,7,9,11,0,6,7,5,4,2};
inv(a,10);
for(i=0;i<10;i++)
printf(“%d,”,a[i]);
}
程序运行结果:
A.0,2,3,4,5,6,7,7,9,11
B.11,9,7,7,6,5,4,3,2,0
C.3,7,9,11,0,6,7,5,4,2
D.2,4,5,7,6,0,11,9,7,3
29.下列程序
main()
{ int a[10],b[10],*pa,*pb,i;
pa=a;pb=b;
for(i=0;i<3;i++,pa++,pb++)
{*pa=i;*pb=2*i;
printf(“%d\t%d\n”,*pa,*pb);
}
printf(“\n”);
pa=&a[0];
pb=&b[0];
for(i=0;i<3;i++)
{*pa=*pa+i;
*pb=*pb*i;
printf(“%d\t%d\n”,*pa++,*pb++); }
}
运行后输出的数据为__A____。
A. 0 0
B.0 0
C. 0 0
D. 0 0
1 2 1 2 1 2 2 2
2 4 2 4 2 4 2 4 0 0 0 0 0 0 0 0 2 2 2 2 1 2 1 2 4 8 2 4 2 4 4 8 30.下列程序
copy_string(from,to)
char *from,*to;
{ while(*from) *to++=*from++;
*to=’\0’;
}
main()
{ static char s1[ ]=”c_program.”;
static char s2[80];
copy_string(s1,s2);
printf(“%s\n”,s2);
copy_string(“123”,s2);
printf(“%s\n”,s2);
}
运行后输出的数据为(D )。
A.c_program 123
B.123
C.c_program123
D.c_program
1
2
3
三、编程题题。
(20分)
(1)已知三个字符串,分别是“C Language”、“Final Exam”和你
名字的拼音,请按由大到小的顺序输出。
要求将字符串的排序写成函数
C卷答案
一.基础知识(20项,共40分)
1.C
2.C
3.C
4.A
5.D
6.B
7.B
8.B
9.C 10.A 11.C 12.B 13.B 14.D 15.A 16.D 17.D 18.B 19.D 20.A
二.简单程序
21.C 22.B 23.C 24.C 25.A 26.B 27.B 28.D 29.A 30.D
三
(1) #include<stdio.h>
#include<string.h>
void sort(char *name[ ],int n);
main()
{
char *name[]={"C Language","Final Exam","考生姓名"};
int i,n=3;
sort(name,n);
for(i=0;i<3;i++)
printf("%s\n",name[i]);
}
void sort(char *name[ ],int n)
{
char *temp;
int i,j,k;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(strcmp(name[k],name[j])<0)
k=j;
if(k!=i)
{
temp=name[i];
name[i]=name[k];
name[k]=temp;
}
}
}
一、填空题。
(每空1分,共计30分)
1、与十进制数37等值的二进制数为。
2、C语言中一共有个关键字和控制语句。
3、在C语言中,正确的标识符是由组成的,并
且
由开头的。
4、C语言上机步骤分为;;链接程序和。
5、要想定义整型变量a,实型变量b,字符型的变量c,应该使用的正
确语句为;;。
6、C语言中,在给出逻辑运算结果时,以代表真,以代表假。
7、一般C语言程序是由构成的,而C语言程序的执
行是由构成的。
8、定义int i=1;执行语句while(i++<5);后,i的值为。
9、定义3行4列的字符型二维数组a的语句是。
10、int a[8]={11,23,45,33,7,0,8,9},则数组的第5个元素表示为,第五个元素的值为。
11、若一个函数带回返回值,则该函数要用语句来返回。
12、int *p,a;则语句p=&a;中的运算符&是符号。
13、设y是int型变量,请写出判断y为奇数的关系表达式。
14、设x=3,那么表达式y=(++x)+(++x)的结果为,表达
式执行后,变量x的结果为。
15、c语言提供的编译预处理功能主要有、和
条件编译。
16、c语言指针中把变量的地址称为;把存放变量地址的
变量称为。
17、根据文件的组织形式可把文件分为和。
二、选择填空。
(每小题2分,共计40分)
1、设有说明语句:char a= '\72abc';则变量a ( )
A) 包含6个字符B) 包含5个字符C) 包含4个字符D) 说明不合法
2、在C语言中,数字029是一个()
A)八进制数B)十六进制数C)十进制数D)非法数
3、有如下程序
main( )
{ int y=3,x=3,z=1;
printf("%d %d\n",(++x,y++),z+2);}
运行该程序的输出结果是()
A)3 4 B)4 2 C)4 3 D)3 3
4、有如下程序段
int a=14,b=15,x;
char c='A';
x=(a&&b)&&(c<'B');
执行该程序段后,x的值为()
A)ture B)false C)0 D)1
5、如下程序
main( )
{ int x=1,a=0,b=0;
switch(x)
{ case 0:b++;
case 1:a++;
case 2:a++;b++;
}
printf("a=%d,b=%d\n",a,b);
}
该程序的输出结果是()
A)a=2,b=1 B)a=1,b=1 C)a=1,b=0 D)a=2,b=2
6、main( )
{ int i,j;
for(i=0,j=1;i<=j+1;i+=2,j--) printf("%d \n",i);
}
以上循环体的执行次数是()
A)3 B)2 C)1 D)0
7、设有数组定义:char array [ ]="China";则数组array所占的空间为()
A)4个字节B)5个字节C)6个字节
D)7个字节
8、C语言的编译系统对宏命令是( )
A)在程序运行时进行代换处理的
B)在程序连接时进行代换处理的
C)和源程序中其它C语句同时进行编译的
D)在对源程序中其它成份正式编译之前进行处理的
9、以下说法中正确的是()。
A)C语言程序总是从第一个定义的函数开始执行
B)在C语言程序中,要调用的函数必须在main( )中有定义
C)C语言程序的执行既可以采用解释方式,也可以采用编译方式D)C语言程序中的main( )函数可以不放在程序的开始部分10、下面程序的输出是( )
#define SUB(X,Y) (X)*Y
main( )
{int a=3,b=4;
printf("%d\n",SUB(a++,b++));
}
A)12 B)15 C)16 D)20
11、设有如下定义:
char *aa[2]={“abcd”,”ABCD”};则以下说法中正确的是()A)aa数组元素的值分别是“abcd”,”ABCD”
B)aa是指针变量,它指向含有两个数组元素的字符型一维数组C)aa数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址
D)aa数组的两个元素中各自存放了字符’a’,’A’的地址12、若变量已正确说明为float类型,要通过语句scanf("%f %f %f ",&a,&b,&c);给a赋于10.0,b赋予22.0,c赋予33.0,不正确的输入形式是:()
A) 10<回车> B) 10.0,22.0,33.0<回车>
22<回车>
33<回车>
C) 10.0<回车> D) 10 22<回车>
22.0 33.0<回车> 33<回车>
13、当调用函数时,实参是一个数组名,则向函数传送的是( )
A) 数组的长度B) 数组的首地址C) 数组每一个元素的地址
D) 数组每个元素中的值
14、有以下函数
char *fun(char *p)
{ return p; }
该函数的返回值是()
A) 无确切的值B) 形参p中存放的
地址值
B) 一个临时存储单元的地址D) 形参p自身的地址值
15、若有以下的定义:int t[3][2];能正确表示t数组元素地址的表达是( )
A) &t[3][2] B) t[3][2] C) t[1][0] D) t[2]+1
16、以下程序的输出结果是( )
A)#*#*# B)##### C)***** D)
*#*#*
main( )
{ int i;
for(i=1;i<6;i++)
{ if(i%2) {printf("#");continue;}
printf("*");
}
printf("\n");
}
17、已知有声明语句char s1[10]= "abcde",s3[10];以下语句中
能将s1中存储的字符串和s2中存储的字符串正确交换的
是。
A) s3=s1,s1=s2,s2=s3;
B) s3[0]=s1[0],s1[0]=s2[0],s2[0]=3[0];
C)strcpy(s3[0],s1[0]),strcpy(s1[0],s2[0]),strcpy(s2[0],s3[0]);
D) strcpy(s3,s1),strcpy(s1,s2),strcpy(s2,s3);
18、若有声明语句int a[10],b[3][3];则以下对数组元素赋值的操作
中,不会出现越界访问的是。
A) a[-1]=1 B) a[10]=0 C) b[3][0]=0 D)[0][0]=0
19、以下是一个自定义函数的头部,其中正确的是。
A) int fun(int a[ ],b) B) int fun(int a[ ],int a)
C) int fun(int *a,int b) D)int fun(char a[ ][ ],int b)
20、下列4个函数中,()能实现交换变量值的功能。
A)void fun_a(int x,int y) B)void fun_b(int *x,int
*y)
{
int *p;
{int *p;
*p=x;x=y;y=*p;}
*x=*y;*y=*x
C )void fun_c(int *x,int *y)
D )void fun_d(int x,int y)
{ *x=*x+*y; { int p; *y=*x-*y; p=x;x=y;y=p;
*x=*x-*y;}
}
三、程序填空题。
(每小题2分,共计20分)
1、已知:int x=3;则
printf(x%2?"**%d":"##%d\n",x); printf("00000\n"); 输出结果为:
2、下列程序的输出结果是
#include "stdio.h" main()
{char a[11]="0123456789",*p; p=&a[4]; puts(p);}
3、求两数中的较大
main()
{ float a,b,max;
scanf(“%f%f”,&a,&b);
;
printf(“the max is %f\n”,max);
}
4、下面的程序输出3到1000之间的所有素数,且每5个一行。
main( )
{int i,j,k,c;
c=0;
for(i=3;i<=1000;i++)
{ k= ;
for(j=2;j<=k;j++)
if ( ) break;
if (j>=k+1)
{printf("%4d",i); c=c+1;
if ( ) printf("\n");}
} }
5、下列程序用于将从键盘输入的整数逆序输出
main( )
{ int n1,n2;
scanf("%d",&n2);
while( )
{ n1=n2%10;
n2= ;
printf("%d",n1);}
}
6、利用插入排序法将十个字符从小到大排序
#include <stdio.h>
void insert(char s[])
{
int i,j,t;
for (i=1;i<=9;i++)
{t=s[i];j=i-1;
while ((j>=0)&&( ))
{ s[j+1]=s[j]; ;}
s[j+1]=t;
}
}
main()
{
char a[11];int i;
for (i=0;i<10;i++) a[i]=getchar();
insert(a);
puts)a);
}
四、程序题。
(每小题5分,共计10分)
1、阅读下列程序,分析并写出运行结果void main()
{ int i,k,j;
for(i=1;i<=9;i++)
{ for (k=1;k<=10-i;k++)
printf(" ");
for (j=1;j<=2*i-1;j++)
printf("%c",48+i);
printf("\n");
}
}
2、阅读下列程序,分析并写出运行结果
#include <stdio.h>
main()
{int i,j;
int a[10][10];
printf("\n");
for(i=0;i<10;i++)
{
a[i][0]=1;
a[i][i]=1;
}
for(i=2;i<10;i++)
for(j=1;j<i;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
for(i=0;i<10;i++)
{
for(j=0;j<=i;j++)
printf("%5d",a[i][j]);
printf("\n");
}
}
答案:
一填空:1、100101B ;2、32,9种;3、数字,字母和下划线,字母或下划线;
4、编辑源程序,编译源程序,链接程序,程序运行;
5、int a, float b, char
c;
6、“1”,“0”;
7、函数,主函数;
8、i=4;
9、char a[3][4];10、a[4] ,
7;
11、return ;12、地址运算符13、(y%2)=0;14、10,5;15、宏定义,
文件包含,
16、指针,指针变量;17、顺序存取文件,随机存取文件
二选择:1D 2D 3D 4 D 5 A 6C 7C 8C 9D 10A 11C 12B 13D 14A 15C 16 A 17D 18D 19 C
三1、**300000 2、456789 3、if (a>b) max=a; else max=b
4、#include <stdio.h>
#include <math.h>
main( )
{int i,j,k,c;
c=0;
for(i=3;i<=1000;i++)
{ k=sqrt(i);
for(j=2;j<=k;j++)
if (i%j==0) break;
if (j>=k+1)
{printf("%4d",i); c=c+1;
if (c%5==0) printf("\n");}
}
}
222
33333
4444444
555555555
66666666666
7777777777777
888888888888888
9999999999999999
7
一、填空题。
(每空1分,共计25分)
1、一般C语言程序是由构成的,而C语言程序的执
行是由开始的。
2、C语言的程序结构分为选择结构字和;C语言的语句的结束符是。
3、在C语言中,正确的标识符是由组成的,并
且
由开头的。
4、C语言的构造类型包括;;。
5、C语言中,在给出逻辑运算结果时,以代表真,以代表假。
6、若float a=5.75;则(int) a= 。
7、定义int i=1;执行语句while(i++<5);后,i的值为。
8、定义3行4列的字符型二维数组a的语句是。
9、int a[8]={11,23,45,33,7,0,8,9},则数组的第5个元素表示为,第五个元素的值为。
10、若一个函数带回返回值,则该函数要用语句来返回。
11、c语言指针中把变量的地址称为;把存放变量地址的变
量称为。
12、在C语言中,把一周定义为枚举类型应写为:。
13、对磁盘文件的操作应遵循的基本原则
为。
14、int类型的数据在内存中所占的字节数是;
int a=5,b=9;则c=a&b为。
15、定义一个字符型指针变量:。
二、选择填空。
(每小题2分,共计20分)
(1)变量的指针,其含义是指该变量的。
A) 值B) 地址C) 名
D) 一个标志
(2)若有说明int (*p)[3];则以下是正确的叙述。
A) p是一个指针数组
B) p是一个指针,它只能指向一个包含3个int类型元
素的数组
C) p是一个指针,它可以指向一个一维数组中的任一元
素
D) (*p)[3]与*p[3]等价。