2000~2001学年《程序设计基础-C》试卷考试时间:2000年12月31日上午8:30-10:30注:请将答案写在答卷上一、单项选择题(每小题2分,共30分)1.1.C语言程序中可以对程序进行注释,注释部分必须用符号_____括起来。A、‘{‘和’}’B、‘[‘和’]’C、“/*”和”*/”D、“*/”和”/*”2.2.下列运算符中,优先级最低的是_____。A、*B、!=C、+D、=3.3.若变量已正确定义,表达式(j=3,j++)的值是_____。A、3B、4C、5D、04.4.已知字符‘a’的ASCII码为97,执行下列语句的输出是_____。printf(%d,%c,’b’,’b’+1);A、98,bB、语句不合法C、98,99D、98,c5.5.表达式strcmp(“box”,“boss”)的值是一个_______。A、正数B、负数C、0D、不确定的数6.6.数组定义为inta[3][2]={1,2,3,4,5,6},数组元素_____的值为6。A、a[3][2]B、a[2][1]C、a[1][2]D、a[2][3]7.7.要调用数学函数时,在#include命令行中应包含_____。A、”stdio.h”B、”string.h”C、”math.h”D、”ctype.h”8.8.判断i和j至少有一个值为非0的表达式是_____。A、i!=0&&j!=0B、i*j!=0[yh1]C、!(i==0||j==0)D、i&&j9.9.若a是基本整型变量,c是单精度实型变量,输入语句______是错误的。A、scanf(”%d,%f”,&a,&c);B、scanf(”d=%d,c=%f”,&a,&c);C、scanf(”%d%f”,&a,&c);D、scanf(”%d%f”,a,c);10.10.若变量已正确定义并且指针p已经指向某个变量x,则(*p)++相当于_____。A、p++B、x++C、*(p++)D、&x++11.11.若p1、p2都是整型指针,p1已经指向变量x,要使p2也指向x,_____是正确的。A、p2=p1;B、p2=**p1;C、p2=&p1;D、p2=*p1;12.12.下列程序段的输出是_____。intc[]={1,3,5};int*k=c+1;printf(%d,*++k);A、3B、5C、4D、613.13.不正确的赋值或赋初值的方式是______。A、charstr[]=string;B、charstr[7]={'s','t','r','i','n','g'};C、charstr[10];str=string;D、charstr[7]={'s','t','r','i','n','g',’\0’};14.14.对于以下结构定义,++p-str中的++加在_____。struct{intlen;char*str;}*p;A、指针str上B、指针p上C、str指的内容上D、以上均不是15.15.对于如下说明,语法和语义都正确的赋值是_____。intc,*s,a[]={1,3,5};A、c=*s;B、s[0]=a[0];C、s=&a[1];D、c=a;二、填空题(每小题2分,共20分)1.1.写出下列程序段的输出结果。floatx1,x2;x1=3/2;x2=x1/2;printf(%d,%.1f,(int)x1,x2);2.2.表达式(712^2)的值是_______。3.3.写出下列程序段的输出结果。#defineA10#defineB(AA+2)-2printf(%d,B*2);4.4.写出判断字符变量c是英文字母的表达式。5.5.写出下列程序段的输出结果。intk,x;for(k=0,x=0;k=9&&x!=10;k++)x+=2;printf(%d,%d,k,x);6.6.写出下列程序段的输出结果。printf(“%d,%d”,NULL,EOF);7.7.对于以下递归函数f,调用f(3)的返回值是_____。f(intn){return((n0)?2*f(n-1)+f(n-2):-1);}8.8.写出下列程序段的输出结果。charstr[]=hello\tworld\n;printf(%d,%c\n,sizeof(str),*(str+10));9.9.输入12345#后,写出下列程序的输出结果。voidmain(){charc;for(c=getchar();getchar()!=’#’;c=getchar())putchar(c);}10.10.执行程序find–nxouldtext.txt时,*++argv[1]的值是_______。三、程序阅读题(每题5分,共20分)1.1.若输入3123回车,则以下程序的输出结果是_______。#includestdio.hvoidmain(){inti,j,n,a[10];scanf(%d,&n);for(i=0;in;i++)scanf(%d,&a[i]);for(i=0;in;i++)for(j=0;jn;j++)printf(%d,,a[(i+j)%n]);}2.2.若输入89762425981116354回车,则以下程序的输出结果是_______。#includestdio.h#defineN10main(){intx[N],y1[N],y2[N];inti,j,n1,n2,t,p;n1=n2=0;for(i=0;iN;i++){scanf(“%d”,&x[i]);if(x[i]%2==0)y1[n1++]=x[i];elsey2[n2++]=x[i];}for(i=1;in1;i++)for(j=0;jn1-1;j++)if(y1[j]y1[j+1]){t=y1[j];y1[j]=y1[j+1];y1[j+1]=t;}for(i=0;in2-1;i++){p=i;for(j=i+1;jn2;j++)if(y2[p]y2[j])p=j;if(p!=i){t=y2[i];y2[i]=y2[p];y2[p]=t;}}for(i=0;in1;i++)printf(%d,,y1[i]);for(i=0;in2;i++)printf(%d,,y2[i]);}3.3.以下程序的输出结果是_______。#includestdio.hintz;voidp(int*x,inty){++*x;y--;z=*x+y+z;printf(%d,%d,%d#,*x,y,z);}voidmain(){intx=1,y=5,z=9;p(&x,y);printf(%d,%d,%d#,x,y,z);}4.4.若输入-6+15*3/5=回车,则以下程序的输出结果是_______。#includestdio.hvoidmain(){intm=0,sum=0;charc,oldc='+';do{c=getchar();if(c='9'&&c='0')m=10*m+c-'0';else{if(oldc=='+')sum+=m;elsesum-=m;m=0;oldc=c;printf(%d,,sum);}}while(c!='=');}四、程序填空题(每空2分,共20分)1.1.下列程序的功能是创建单向链表。#includestdio.h#includealloc.hstructlink{charname[10];intmark;structlink*next;};voidinsert(char*,int);structlink*head=NULL;main(){charname[10];intmark;structlink*t;while(1){scanf(%s%d,name,&mark);if(strcmp(name,#)==0)break;______(1)_______;}for(t=head;______(2)_______)printf(%s:%d\n,t-name,t-mark);}voidinsert(char*name,intmark){structlink*p;p=______(3)_______;strcpy(p-name,name);p-mark=mark;______(4)_______;if(head!=NULL)______(5)_______;head=p;}2.2.prog.c是带命令行参数的程序。运行progfilename时,将文本文件filename中的内容原样输出;运行prog-ufilename时,将文本文件filename中的所有字母以大写方式输出(其余字符原样输出);运行prog-dfilename时,只将文本文件filename中的数字输出。#includestdio.h#includectype.hvoidmain(intargc,char*argv[]){FILE*fp;char*filename,ch;inttag=0;if(argc2||argc3){printf(“Argumenterror\n”);return;}if(argc==3){if(strcmp(argv[1],“-u”)==0)tag=1;elseif(strcmp(argv[1],“-d”)==0)tag=2;else{printf(“Optionerror\n”);return;}______(6)_______;}elsefilename=argv[1];if(______(7)_______){printf(“Cannotopenfile\n”);return;}while(______(8)_______){ch=fgetc(fp);if(tag==0)putchar(ch);elseif(tag==1)______(9)_______;elseif(______(10)_______)putchar(ch);}fclose(fp);}五、编程题(共10分,混合班学生做第2题,其他学生做第1题)1.1.[程序说明](10分)输入m和n(m≥n≥0)后,计算下列表达式的值并输出。m!n!*(m-n)!要求将计算阶乘的运算写成函数fact(n),函数返回值的类型为float。2.2.[程序说明](10分)编写函数strcmp(char*s1,char*s2)。若s1和s2均是数字串(包括+/-号),则按照十进制整数大小进行比较;否则按照Ascii序进行比较。s1大于/等于/小于s2时,分别输出1/0/-1。可以直接调用atoi函数。2000~2001学年《程序设计基础C》参考答案一、单项选择题(每小题2分,共30分)题号123456789101112131415选择CDADABCBDBABCAC二、填空题(每小题2分,共20分)11,0.5213-34c=’a’&&c=’z’||c=’A’&&c=’Z’55,1060,-17-17813,d913510‘n’三、程序阅读题(每题5分,共20分)11,2,3,2,3,1,3,1,2,24,8,16,24,76,89,35,25,11,9,32,4,6#2,5,9#40,-6,9,6,1,四、程序填空题(每空2分,共20分)(1)(1)insert(name,mark)(2)(2)t!=NULL;t=t-next(3)(3)(structlink*)malloc(sizeof(structlink))(4)(4)p-next=NULL(5)(5)p-next=head(6)(6)filename=argv[2](7)(7)(fp=fopen(filename,“r”))==NULL(8)(8)!feof(fp)(9)(9)putchar(toupper(ch))(10)(10)tag==2&&isdigit(ch)五、编程题(共10分,混合班学生做第2题,其他学生做第1题)1、#includestdio.hfloatfact(int);main(){intm,n;fl