(五)浙江大学“程序设计基础-C”试题卷2002-2003学年春季学期考试时间: 2003年6月20日上午8:30-10:30一.单项选择题(每题1分,共10分)1.下列运算中,优先级最低的是.A. <<B. !=C. &&D. +=2.以下选项中不正确的整型常量是.A. 0xaB. 010LC. 10D. 1.03.表达式!(x>0||y>0)等价于.A. !(x>0)&&!(y>0)B. !x>0&&!y>0C. !x>0||!y>0D. !(x>0)||!(y>0)4.表达式的值不是0.A. 1/2B. !‟\0‟C. !EOFD. NULL5.若x是浮点型变量,表达式(x=10/4)的值是.A. 2.5B. 2.0C. 3D. 26.若变量已正确定义并赋值,表达式不正确。
A. a&bB. a^bC. &&xD. a,b7.对于变量定义int a[10],*p=a;表达式是不正确的。
A. a[9]B. p[5]C. *p++D. a++8.不正确的赋值或赋初值的方式是A. char str[10]; str=”string”;B. char str[ ]=”string”;C. char *p=”string”;D. char *p; p=”string”;9.设程序中不再定义和声明变量,写出在函数fun中可以使用的所有变量.#include <stdio.h>void fun(int x){ static int y;………return ;}int z;void main( ){ int a,b;fun(a);…….}A. x,yB. x,y,zC. a,b,y,zD. a,b,x,y,z10.对于变量定义int p[5],*a[5], 表达式是正确的A. p=aB. p[0]=aC. *(a+1)=pD. a[0]=2二、填空题(每题2分,共30分)1.数组定义为int a[2][3][4],则数组a中有个数组元素。
2.计算下列分段函数的条件表达式是.1 x>0y= 0 x=0-1 x<03.表达式1<10<5的值是.4.表达式–(10<<1)&4的值是.5.表达式sizeof(“hello”)的值是.6.下列程序段的输出结果是 .int k,s;for(k=1,s=0;k<10; k++) {if(k%2==0) continue;s+=k;}printf(“k=%d s=%d”,k,s);7.下列程序段的输出结果是.#define MM(x,y) (x*y)printf(“%d”,MM(2+3,15));8.下列程序段的输出结果是.int k=1,s=0;switch(k) {case 1: s+=10;case 2: s+=20; break;default: s+=3;}printf(“k=%d s=%d”,k,s);9.下列程序的输出结果是.#include <stdio.h>int f( ){ static int k;return ++k;}void main( ){ int k;for(k=0;k<3;k++) printf(“%d#”,f( ));}10.下列程序的输出结果是.f(int x){ if(x<=1) return 1;else return f(x-1)+f(x-2);}void main( ){ printf(“%d”,f(4)); }11.下列程序段的输出结果是.int k=1,j=2,*p,*q,*t;p=&k; q=&j;t=p; p=q; q=t;printf(“%d,%d”,*p,k);12.下列程序段的输出结果是.int c[ ]={10,30,5} , *pc;for(pc=c; pc<c+2; pc++) printf(%d#”,*pc);13.下列程序段的输出结果是.char *st[ ]={“ONE”,”TWO”,”FOUR”,”K”};printf(“%s,%c\n”,*(st+2),**st+1);14.下列程序的输出结果是 .#include <stdio.h>void p(int *x,int y){ ++*x; y=y+2; }void main( ){ int x=0,y=3;p(&y,y);printf(“%d,%d”,x,y);}15.用typedef 定义一个10个元素的字符指针数组类型CP。
三、程序阅读题(每题5分,共30分)1.下列程序的输出结果是.#include <stdio.h>void main( ){ int k,x,s,t;x=3; s=0; t=x;for(k=1;k<=3;k++) {t=t*10+x;s=s+t;printf(“%d#”,s);}}2.输入7 3 0 3 0 3 1 2 9 7 6 0<回车>后,下列程序的输出结果是.#include <stdio.h>void main( ){ int j,k,sub,x, a[5];for(j=1;j<=2;j++) {for(k=0;k<5;k++)scanf(“%d”,&a[k]);scanf(“%d”,&x);sub= -1;for(k=0;k<5;k++)if(a[k]==x) sub=k;printf(“%d#”,sub);}}3.下列程序的输出结果是 .#include <stdio.h>void main( ){ long number,wt,x;x=number=10230;wt=1;while(x!=0) {wt=wt*10; x=x/10;}wt=wt/10;while(number!=0) {printf(“%d#”,number/wt);number=number%wt;wt=wt/10;}}4.输入3 9 8 6 5 3 7 1 2 4 2 1 2 3 4<回车>后,下列程序的输出结果是.#include <stdio.h>void main( ){ int flag,i,j,k,col,n,ri,a[6][6];for(ri=1;ri<=2;ri++) {scanf(…%d”,&n);for(i=0;i<n;i++)for(j=0;j<n;j++)scanf(“%d”,&a[i][j]);flag=0;for(i=0;i<n;i++) {col=0;for(j=0;j<n;j++)if(a[i][col]<a[i][j]) col=j;for(k=0;k<n;k++)if(a[j][col]<a[k][col]) break;if(k>=n) {prin tf(“a[%d][%d]=%d#”,i,col,a[i][col]);flag=1;}if(!flag) printf(“NO#”);}}5.输入how are you? <回车>后,下列程序的输出结果是.#include <stdio.h>void main( ){ int word;char ch;word=0;while((ch=getchar())!=‟?‟) {if(ch==‟ …) word=0;else if(word==0) {word=1;if(ch<=‟z‟&&ch>=‟a‟)ch=ch-…a‟+‟A‟;}putchar(ch);}}6. 假设文本文件a.txt中存放了下列数据:one?two?1234?output?文本文件b.txt中存放了下列数据:one?two?1204?input?下列程序的输出结果是.#include <stdio.h>#include <stdlib.h>void main( ){ int count;char ch1,ch2;FILE *f1,*f2;if((f1=fopen(“a.txt”,”r”))==NULL){ printf(“Can‟t o pen file:%s\n”,”a.txt”); exit(0);}if((f2=fopen(“b.txt”,”r”))==NULL){ printf(“Can‟t open file:%s\n”,”b.txt”); exit(0);}count=0;while(!feof(f1)||!feof(f2)) {ch1=fgetc(f1); ch2=fgetc(f2);if(ch1!=ch2) {printf(“%c#%c#”,ch1,ch2); printf(“%d#”,count); break;}if(ch1==‟?‟) count++;}fclose(f1); fclose(f2);}四、程序填空题(每空2分,共30分)1.输入一个正整数n,计算并输出s的前n项的和。
s=1/1!+1/2!+1/3!+….1/n!#include <stdio.h>void main( ){ int j,k,n;float f,s;scanf(“%d”,&n);(1) ;for(k=1;k<=n;k++) {(2) ;for(j=1; (3) ; j++)(4);s=s+1.0/f;}printf(“sum=%f\n”,s);}2.输入一个正整数n,如果它是素数,输出“YES”,否则输出“ NO”(素数就是只能被1和自身整除的正整数,1不是素数,2是素数)。
#include <stdio.h>#include <math.h>void main( ){ int n;prime(int m);scanf(“%d”,&n);if( (5) )printf(“YES\n”);else printf(“NO\n”)}int prime(int m){ int j,n;if(m==1) return 0;n=sqrt(m);for(j=2;j<=n;j++)if( (6) )return (7) ;(8) ;}3.请仔细阅读函数f1,然后在函数f2中填入正确的内容,使函数f1和函数f2有相同的功能。
int f1(char s[ ]) int f2(char *s){ int k=0; { char *ss;while(s[k]!=‟\0‟)(9);k++; while(*s++!= (10) ) ;‟return k; ;} return (11);}4.输入30位学生的姓名和成绩,输出成绩最高的学生的姓名和成绩。