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);
}