浙江大学c语言试卷资料讲解
浙江大学C语言2006
试卷
浙江大学2005-2006学年春夏学期期终考试试卷
考试时间 2006年6月28日
一.单项选择题(每题1分,共10分)
1. 在C语言中,下面描述正确的是:______。
A、函数的定义可以嵌套,但函数的调用不可以嵌套
B、函数的定义不可以嵌套,但函数的调用不可以嵌套
C、函数的定义可以嵌套,函数的调用也可以嵌套
D、函数的定义不可以嵌套,但函数的调用可以嵌套
2. 在C语言中,_____存储类型的变量,只在使用时才分配空间。
A、static和auto
B、register 和extern
C、register 和 static
D、auto 和 register
3. 下列运算符中,优先级最低的是:_____
A、*
B、+
C、==
D、=
4. 有程序段如下:
int k=10;
while(k=0)
k=k-1;
以下选项中描述正确的是_____。
A. 语句“k=k-1;”被执行10次。
B. 语句“k=k-1;”被执行1次。
C. 语句“k=k-1;”被执行无限多次。
D. 语句“k=k-1;”一次也不执行。
5. 若以下定义:char s[20],*ps=s;
则,以下赋值语句正确的是:
A、s=ps+s;
B、ps=ps+20;
C、s[5]= *ps[9];
D、ps=s[0];
6. 有程序段如下:
int a=1,b=2,c=3;
if(a>b)
c=a;a=b;b=c;
执行该程序段后,变量a,b,c的值是_____。
A.a=1,b=2,c=3 B.a=2,b=3,c=3 C.a=2,b=3,c=1 D. a=3,b=2,c=1
7. 假设所有变量均为int类型,则表达式(a=2,b=5,b+1,a+b)的值为______。
A.7 B.8 C.6 D.2
8. 以下叙述正确的是 ______。
A. 在C程序中,main()函数必须位于程序的最前面。
B. C程序的每一行中只能写一条语句。
C. 在对C程序进行编译的过程中,可发现注释中的拼写错误。
D. C语言本身没有输入、输出语句。
9. 设有语句
struct st
{ int n;
int *t; }*p;
static struct st s[3]={5,'\0',7,'\0',9,'\0'};
p=s;
则printf(“%d\n”,______)的值是6。
A.p++->n B.p->n++ C.(*p).n++ D.++p->n
10. 设有语句:int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;则以下______不是对a数组元素的正确引用,其中0≤i<10。
A.a[p-a] B.*(&a[i]) C.p[i] D.*(*(a+i))
二、填空题(每题2分,共20分)
1. 设ch为字符变量,写出判断ch为数字字符的C语言表达式______。
2. int a=3,则a+=a-=a*a的值是_____。
3. 表达式 3<5<2的值是_____。
4. 表达式 ~(4<<2)的值是______。
5. 下列程序段的输出结果是_____。
#define A1(a,b) a*b
#define A2(a,b) (a*b)
printf("%d\n",2*A2(A1(2,-1),A2(2,-1)));
6. 执行下面的程序段后,a和b的值分别是_____。
int a=3,b=5,c;
c=(a>--b) ? a++ : b- -;
7. 下列程序段执行后s的值是:_____。
int i=1,s=0;
while(i++)
if (!(i%3)) break;
else s+=i;
printf(“s=%d\n”,s);
8. 下列程序段的输出结果是_____。
char *s[ ]={"one","two","three"},*p;
p=s[1];
printf("%c, %s\n", *(p+1), s[0]);
9. 下列程序的输出结果是_____。
#include
int f(int n )
{ static int k=1;
k=k*n;
return k;
}
void main()
{ int i,sum=0;
for(i=1;i<=5;i++)
sum=sum+f(i);
printf("sum=%d\n", sum);
}
10. 用typedef定义一个整型数组类型PT,它由100个整型元素组成。
三、程序阅读题(共30分)
1.下列程序的输出结果是_______。(4分) #include
void main( )
{ int x=1,y=0,a=0,b=0;
switch(x)
{
case 1:
switch(y)
{
case 0: a++;break;
case 1: b++; break;
}
case 2:
a++;b++;break;
case 3: a++;b++;
}
printf(“a=%d,b=%d\n”,a,b);
}
2. 下列程序的输出结果是_______。(4分) #include
void main( )
{ int i, j, x=0;
for(i=0;i<2;i++)
{ x++;
for(j=0;j<3;j++)
{ if (j%2) continue;
x++;
}
x++;
}
printf(“x=%d\n”,x);
}
3. 下面程序输出的值是_______。(4分)
#include
int i=3;
void main()
{
int i=1;
void fun1(int n);
int fun2(int n);
printf("%d ", i);
fun1(i);
i=fun2(i);
fun1(i=fun2(i));
}
void fun1(int n)
{ printf("%d ",i+n);
}
int fun2(int n)
{
int i=2;
printf("%d ",i+n);
return i;
}
4.下面程序输出结果是_____。(4分)
#include
void f(char *st,int i)
{
st[i]='\0';
printf("%s\n",st);
if(i>1) f(st,i-1);
}
void main()
{
char st[]="abcde";
f(st,5);
}
5.下列程序执行后的输出结果是:_______。(4分) #include
#include
void main()
{
char arr[2][4];
strcpy(arr[0],"you");
strcpy(arr[1],"me");
arr[0][3]='&';
printf("%s\n",arr);
}
6.下列程序输出是_______。(4分)
#include
void main()
{ char *s="ab5ca2cd34ef",*p;
int i, j, a[]={0,0,0,0,0};
for(p=s;*p!='\0';p++)
{
j=*p-'a';
if(j>=0 && j<=5) a[j]++;
}
for(i=0;i<5;i++)
printf("%d ",a[i]);
printf("\n");
}
7.下列程序输出是_______。(3分)
#include
#include
main()
{
static char a[]="abc123abc45abc678";
char b[]="abc",c[80];
int i=0,j,k,n=0,m;
k=strlen(b);
while(a[i]!='\0')
{ j=0;
if(a[i]!=b[j])
c[n++]=a[i++];
else
{ m=i;
while(b[j]==a[i]&&a[i]!='\0'&&b[j]!='\0')
{ i++;j++ ;}
if(j!=k)
while(m
c[n++]=a[m++];
else printf("%d ",m);
}
}
puts(c);
}
8.下列程序输出是_______。(3分)
/* file.txt 数据*/
/* A1B2C3 */
#include
#include
void main()
{
FILE *fp;
int n,s=0;
char ch;
if((fp=fopen("file.txt","r"))==NULL)
{ printf("%s不能打开!\n","file.txt"); exit(1); }
fscanf(fp,"%c%d",&ch,&n);
while(ch!=EOF)
{
s+=ch+n;
fscanf(fp,"%c%d",&ch,&n);
}
fclose(fp);
printf("%d\n",s);
}
四、程序(段)填空题(每空2分,共40分)
1.以下程序不用第三个变量,也不用位运算符,实现将两个数进行对调的操作。#include
void main( )
{
int a,b;
scanf("%d%d", &a,&b);
printf("a=%d,b=%d\n",a,b);
a= (1) ;
b= (2) ;
a = (3) ;
printf("a=%d,b=%d\n",a,b);
}
2.输入一个十进制整数,将它对应的二进制数的各位反序,形成新的十进制数输出。
如:13-1101--1011-11
如: 10-1010-0101- 5
#include
void main( )
{ int x,y,t;
printf(“请输入一个十进制整数:”);
scanf(“%d”,&x);
y=0;
while( (4) ){
t=x%2;
(5) ;
x=x/2;
}
printf(“新的十进制整数为%d\n”,y);
}
3.a是一个6×6的矩阵,本程序输出以下结果:
1 2 3 4 5 6
1 1
2
3
4 5
1 2 1 2 3 4
1 3 3 1
2 3
1 4 6 4 1 2
1 5 10 10 5 1
#include "stdio.h"
void main( )
{ int a[6][6], i, j;
for (i=0;i<6;i++)
{
for (j=0;j<6;j++)
{ if( (6) ) a[i][j]=1;
else if(i else a[i][j]= (8) ; /*取下三角元素*/ printf(“%4d”,a[i][j]); } printf("\n"); } } 4.以下程序分别在a数组和b数组中放入an+1和bn+1个由小到大的有序数,程序把两个数组 中的数按由小到大的顺序归并在c数组中。 #include void main() { int a[10]={1,2,5,8,9,10}, an=5; int b[10]={0,3,4,6,7,12},bn=5; int i, j, k,c[20],max=9999; a[an+1]=b[bn+1]=max; i=j=k=0; while((a[i]!=max) || (b[j]!=max)) if(a[i] else { c[k]= (11) ; k++; (12 ) ; } for(i=0;i printf(“%4d”,c[i]); printf(“\n”); } 5.完成以下程序,截取字符串s中从第m个位置开始的n个字符,返回所截字符串的首地址。 static char sub[20]; void main() { static char s[]=”goodmorning”; char *cut(char *ss,int m,int n),*p; p=cut(s,3,4); printf(“%s\n”,p); } char *cut(char *ss, int m,int n) { int i; for(i=0;i sub[i]= (13) ; sub[i]=’\0’; return (14) ; } 6.下面程序是用来从键盘输入十个整数,然后求出其中的最小值。 #include void lookup(int *t, int *a, int n) { int k; *a=t[0]; for(k=1;k if( (15) ) *a=t[k]; } void main() { int table[10]; int k,min,*p=&min; for(k=0;k<10;k++) scanf(“%d”,&table[k]); lookup( (16) , (17) , 10); printf(“min=%d\n”,min); } 7. 下面程序的功能是统计文件“file.txt”中的字符数。#include void main() { FILE *fp; int count=0; if((fp=fopen(“file.txt”,”r”))==NULL) { printf(“this file can not open\n”); exit(0); } while( (18) ) { fgetc(fp); (19) ; } printf(“total =%d\n”,count); (20) ; } 2006B试卷答案(2005-2006)学年试卷 1.选择题(共10分) 二.填空题(共20分) 三.程序阅读题(共8题, 30分) 四.程序填空题