1 上机样题参考答案 样题一 一、程序调试题(40分) main() { int number[10]; input(number); max_min_value(number); /* 原程序中缺少 number */ output(number); } input(int number[10]) /* 原程序中缺少 int */ { int i; printf("Enter 10 number:"); for (i=0;i<10;i++) scanf("%d",&number[i]); } max_min_value (array) int array[10]; { int *max, *min; int *p, *array_end; array_end=array+10; max=min=array; for (p=array+1;p<array_end;p++) /* 原程序中缺少 p++ */ if (*p>*max) max=p; /* 原程序为 *max=*p */ else if (*p<*min) min=p; /* 原程序为 *min=*p */ *p=array[0]; array[0]=*min; /* 原程序缺少该行 */ array[min-array]=*p; 2 *p=array[9]; array[9]=*max; /* 原程序缺少该行 */ array[max-array]=*p; return; } output(array) int array[10]; { int *p; printf("result is:"); for(p=array;p<=array+9;) printf("%d ", *p++); } 二、编写程序(程序文件名为test1-2.c)(60分) 参考程序: #include <stdio.h> main() { FILE *fp; char str[100],filename[10]; if((fp=fopen("test1-2.txt","w"))==NULL) {printf("can not open file\n"); exit(0); } printf("Enter a string:\n"); gets(str); convert(str); fputs(str,fp); fclose(fp); fp=fopen("test1-2.txt","r"); fgets(str,strlen(str)+1,fp); printf("%s\n",str); fclose(fp); } convert(str) char str[]; { int i=0; while(str[i]!='\0') 3 { if(str[i]>='a'&& str[i]<='z') str[i]=str[i]-32; i++; } } 样题二 一、程序调试题(40分) static struct man { char name[20]; int age; } person[]={"li_ming",18, "wang_hua",19, "zhang_ping",20 /* 原程序中多了 ; */ }; main() { int i,j,max,min; max=min=person[0].age; /* 原程序中缺少该行 */ for(i=1;i<3;i++) /* 原程序将 ; 写成了 , */ if(person[i].age>max) max=person[i].age; /* 原程序中缺少 person[i].age; */ else if(person[i].age<min) min=person[i].age; /* 原程序中缺少 person[i].age; */ for(i=0;i<3;i++) if(person[i].age!=max&&person[i].age!=min) /* 原程序将 &&写成了 || */ { printf("%s %d\n",person[i].name,person[i].age); /* 原程序将 s 写成了 d */ break; } } 二、编写程序(程序文件名为test2-2.c)(60分) 参考程序: #include "stdio.h" FILE *fp; getline(char *str) 4 { int i; char c; i=0; c=fgetc(fp); while(c!='\n' && c!=EOF) { str[i]=c; i++; c=fgetc(fp); } str[i]=0; if(c==EOF) return(-1); else return(i); } main(int argc,char *argv[]) { char str[101]; int len; if(argc!=2) printf("error!\n"); else { fp=fopen(argv[1],"r"); do { len=getline(str); puts(str); printf("len=%d\n",len); } while(len>=0); fclose(fp); } } 样题三 一、程序调试题(40分) #include "stdio.h" main() { char a[80]="I am a boy."; /* 原程序中缺少 80 */ char b[]="We are student."; /* 原程序中缺少 [ ] */ int i,j; i=0; /* 原程序中缺少该行 */ 5 while(a[i]!='\0') i++; for(j=0;*(b+j)!='\0';i++,j++) a[i]=*(b+j); /* 原程序中为 b+j */ a[i]='\0'; /* 原程序中缺少该行 */ printf("Now!\nstring a is: %s\n",a); /* 原程序中的 a 为 a[i] */ printf("string b is:"); for(i=0;b[i]!='\0';i++) printf("%c",b[i]); /* 原程序中为 b */ printf("\n"); } 二、编写程序(程序文件名为test3-2.c)(60分) 参考程序: #include "stdio.h" FILE *in,*out; main(int argc,char *argv[]) { int p=0,n=0,z=0,temp; out=fopen(argv[2],"w"); in=fopen(argv[1],"r"); if(in==NULL) printf("file not found\n"); else while(!feof(in)) { fscanf(in,"%d",&temp); if(temp>0) p++; else if(temp<0) n++; else z++; } fclose(in); printf("positive:%3d,negtive:%3d,zero:%3d\n",p,n,z); fprintf(out,"positive:%3d,negtive:%3d,zero:%3d\n",p,n,z); fclose(out); }