2004~2005学年“C程序设计基础”试卷
考试时间: 2005年7月5日上午10:30-12:30
姓名___________________ 学号___________________ 成绩____________________
一.单项选择题(每题2分,共20分)
4. 下面C语言的标识符中,哪个不合法______。
A._total
B.Large#tall
C.int_
D._while
2. C语言源程序经过编译连接最后生成的文件,其后缀名是______。
A.”.c” B.”.obj” C.”.exe” D.”.bas” 3. 表达式x&&1等价于______。 A.x!=0 B.x==0
C.x!=-1
D.x==-1
4. 若变量k已正确定义且k的值是4,计算表达式(j=k++)后,______。 A.k=4,j=4? B.j=4,k=5 C.j=5,k=4? D.j=5,k=5 5. C语言中,函数若没有声明返回值的类型,默认的类型是_______。 A.int B.long C. float D.double
12. 若p1和p2都是指向int类型变量的指针,p1已经指向变量x,要使p2也指向x,则_____是正确的。
A.p2=&*p1; int a[]={1,3,5,7,9}; int *b=a+2; printf(“%d”,*b++); A.3
B.5
C.7
D.9
B.p2=&&p1;
C.p2=&p1;
D.p2=*p1;
13. 下列程序段输出是_____________。
14. 执行下列程序:
#define FB(a,b) (a*b+1) int k=3;
k=FB(FB(k,k+1),k)-7;
后变量k的值是_____________。 A.7 B.24 C.27 D.33
9. 在某C程序中调用了puts函数。在程序的编译预处理部分应用#include 包含__________。
A.”math.h” B.”string.h” C.”stdio.h” D.”ctype.h”
10. 设有结构定义如下: struct student{ int num;
char name[30]; float score; }stud1;
则标准的ANSI C(如TC)下,计算sizeof(stud1)的值为____________。
A.9
B.16
C.25
D.36
二、填空题(每题3分,共24分)
1.写出语句printf(“%d,%o,%x”,?a?/4,0x14,014);的输出结果__________。 2.写出计算s(s?a)(s?b)(s?c)的C语言表达式__________。 3.写出下列程序段的输出结果是_______________________。
int m;char ss[10]=?12345?,8s=ss; for(m=10;m!=0;m--); printf(“%d”,m);
while(*s++)putchar()++s);
4.下列程序段的输出结果是______________________。 #include “stdio.h\ int x;
void f(int x) {static int a=1; printf(“%d,”,a); a+=x+2; }
void main() {int k;
for(k=1;k<=3;k++) f(k);
}
5.对于以下递归函数f,调用f(4)的返回值是_______________________。 f(int n)
{return((n>0)?2*f(n-1)+f(n-2):1);}
6. 下列程序的输出结果是__________________。 #include “stdio.h\ void main()
{int x=3,y=6,z=0;
while(x++)!=(y-=1))
{z++; if(x printf(“x=%d,y=%d,z=%d”.x.y.z); } 7. 下列程序的输出结果是_____________。 int p,q,k=3,j=4; q=&k;p=q;q=&j; printf(“%d”,*p); 8. 下面函数定义中的错误是_____________。 double sum(double x,y) {return(x*x+y*y); } 三、程序阅读题(每题5分,共20分) 8. 下列程序的输出结果是_________。 # include x=12; for(k=0;x!=0;x=x+2) ++k; printf(“k=%d,x=%d\\n”,k,x); } 9. 下列程序的输出结果是___________________。 # include void sort(int b[],intn,int x) { int k; for(k=n-1;k>=0;k--) if(b[k] b[k+1]=b[k]; else break; b[k+1]=x; } void main() {int I,j; static int a[5]={8,5,7,2,6}; int b[8]; b[0]=a[0]; for(i=1;i<5;i++) {sort(b,i,a[i]); for(j=0;j<=i;j++)printf(“%d “,b[j]); pintf(“\\n”); } } 10. 输入12345后,下列程序的输出结果是___________________。 #include “stdio.h” int fun(); void main() { fun();} int fun() { char c; if((c=getchar())!=?\\n?) fun(); putchar(c); } 4. 下列程序的输出结果是_________________。 # include void main() { int i,n; char *pa,*s; pa=”Happy”; for(s=pa,n=0;*s!=?\\0?;++s,++n); for(s=pa,j=0;j } 四、程序填空题(每空2分,共20分) 5. 读入1个正整数n,计算并输出s的前n项的和。 s=1-1/2+1/3-1/4+?? # include # include float s; flag=1;s=0; scanf(“%d”,&n); for(k=1;k<=n;k++){ s=s+ (1) ; (2) ; } printf(\ } 2.在C盘一级目录TC(c:\\tc)下创建文本文件k2.txt。用键盘键入一个字符串,以‘@’ 作为结束标记,并写入该文件,然后重新从中取出字符并显示在屏幕上。 # include void main() { ___________(3)__________; If((fpa=fopen(“______(4)________”,”w”))==NULL){ printf(“Can?t open file\\n”); exit(0); } while(___________(5)______) fputc(ch,fp); fclose(fp); If((_______(6)___________){ printf(“Can?t open file\\n”); exit(0); } while(!feof(fp)){ ch=fgetc(fp); printf(______________(7)_______); } fclose(fp); } 3. 下列程序用于实现从键盘上输入一个正整数,左移三位,并将移位后的数以二进制数输出。 # include