资源描述
(第一套)
(60分钟)
一、程序调试题(文件名test1-1.c)(40分)
磁盘上有一个名为testl-l.c的C程序文件,其功能是:计算并输出M以内最大的10个素数之和,M由主函数传给fun 函数。例如:当M的值为100,则函数的值为732。调试程序使之能输出正确的结果。
注意:可以增加和修改程序行,但不得删除程序中的整行。在一处增加的程序行不得超过两行。
源程序如下:
# include <stdio.h>
# include <conio.h>
int fun(int m);
{ int sum,n=0,j,yes;
while((m>=2)&&(n<10)
{ yes=0;
for(j=2;j<=m/2;j++)
if(m%j==0)
{ yes=0;
break;
}
if(yes=1)
{ sum+=m; n++;
m--;
}
}
return ;
}
main()
{ int m;
clrscr();
scanf("%d",m);
printf("%d\n",fun(m));
}
二、编写程序(程序文件名为testl-2.c)(60分)
要求编写函数fun,其函数的功能是:根据形参m的值(2<=m<=9),在m行m列的二维数组中存放如下所示的数据,由main函数输出结果。结果显示在屏幕上并送testl1-2·txt中保存。
例如:如输入3 如输入5
则输出: 则输出:1 2 3 4 5
1 2 3 2 4 6 8 10
2 4 6 3 6 9 12 15
3 6 9 4 8 12 16 20
5 10 15 20 25
18-1套 参考答案:
一、程序调试题(文件名test1-1.c)(40分)
# include <stdio.h>
# include <conio.h>
int fun(int m); /* 去掉分号(;) */
{ int sum,n=0,j,yes; /* 改为 sum=0 */
while((m>=2)&&(n<10) /* 改为 (n<10)) */
{ yes=0; /* 改为 yes=1 */
for(j=2;j<=m/2;j++)
if(m%j==0)
{ yes=0;
break;
}
if(yes=1) /* 改为 yes==1 */
{ sum+=m; n++;
m--;
}
}
return ; /* 改为 return sum */
}
main()
{ int m;
clrscr();
scanf("%d",m); /* 改为 &m */
printf("%d\n",fun(m));
}
评分标准:每改对一处得5分,运行结果正确得5分。
二、编写程序(程序文件取名为 test1-2.c)(60分)
评分标准:
1.文件打开与关闭正确 10分 2.文件读写正确 10分
3.函数及函数调用正确 20分 4.屏幕上显示结果正确 10分
5.Test1-2.txt中结果正确 10分
参考程序:
# include <stdio.h>
# include <conio.h>
# define M 10
int a[M][M]={0};
fm(int a[][M],int m)
{ int j,k;
for(j=0;j<m;j++)
for(k=0;k<m;k++)
a[j][k]=(k+1)*(j+1);
}
main()
{ int i,j,n;
FILE *fp;
fp=fopen("test1-2.txt","w");
clrscr();
printf("Enter n:");
scanf("%d",&n);
fm(a,n);
for(i=0;i<n;i++)
{ for(j=0;j<n;j++)
{ printf("%4d",a[i][j]);
fprintf(fp,"%4d",a[i][j]);
}
printf("\n");
fprintf(fp,"\n");
}
fclose(fp);
}
(第一套)
(60分钟)
一、程序调试题(文件名testl-1.c)(40分)
磁盘上有testl-l.c,程序中函数fun的功能是:从低位开始取出正长整型变量s中奇数位上的数,依次构成一个新数放在t中。例如,若s中的数为:98765,则t中的数为975。请改正程序中的错误,使程序能得出正确的结果。
注意:不能改动程序的结构,不能添加和删除行,只能修改行。不要改动main函数。
源程序如下:
# include <stdio.h>
void fun(long s,long t)
{ long s1=10;
*t=s%10;
while(s>o);
{ s=s/100;
t=s%10*s1+t;
s1=s1*100;
}
}
void main()
{ long s,t;
printf("\nPlease enter integer s:");
scanf("%ld",&s);
if(s>0)
{ fun(s,&t);
printf("The result is :%ld\n",t);
}
else printf("s value error.\n");
}
二、编写程序(程序文件名为test1-2.c)(60分)
有n个人围成一圈,顺序排号,从第一个人开始报数(从1到5报数),凡报到5的人退出圈子,问最后留下的是原来第几号的那位。人数不超过50。
要求:将结果显示在屏幕上,同时写到文件testl-2.dat中。
(第二套)
(60分钟)
一、程序调试题(文件名test2-1.c)(40分)
磁盘上已有一文件test2-l.c,其功能是将字符串s中最后一次出现的子字符串tl替换成字符串t2,形成新串放在w所指的数组中。要求tl和t2所指的字符串的长度相同。
例如:当s所指字符串的内容为"abzyxeruzyx123zHm",t1中的内容为"zyx",t2中的内
容为"999"时,则w所指数组中的内容应为"abzyxerzyxl23999m"。
如果输入的tl字符串不是s字符串的子字符串,则不替换。
注意:只能修改行,不能添加和删除行。
源程序如下:
# include <stdio.h>
# include <string.h>
void fun(char *s,char *t1,char *t2,char *w)
{ char *p,*r,*place;
strcpy(w,s);
place=NULL;
while(*w)
{ p=w; r=t1;
while(r)
if(*r=*p)
{ r++;p++;}
else continue;
if(*r=='0')
place=w;
w++;
}
if(place!=NULL)
{ r=t2;
while(&r)
*place=*r,place++,r++;
}
}
main()
{ char s[100],t1[100],t2[100],w[100];
printf("\nPlease enter string s:");
scanf("%s",s);
printf("\nPlease enter substring t1:");
scanf("%s",t1);
printf("\nPlease enter substring t2:");
scanf("%s",t2);
if(strlen(t1)==strlen(t2))
{ fun(s,t1,t2,w);
printf("\nThe result is:%s\n",w);
}
else printf("Error:strlen(t1)!=strlen(t2)\n");
}
二、编写程序(程序文件名为test2-2.c)(60分)
输入一字符串,存入tt中并将所有下标为奇数位置上的字母转换为大写字母(若该位置上不是字母,则不转换)并将结果转出到test2-2.dat文件中保存。例如:如输入abc4Efg,则应输出"aBc4EFg"。
要求:用命令行参数传递文件名test2-2.dat。
(第三套)
(60分钟)
一、程序调试题(文件名test3-1.c)(40分)
磁盘上已有一文件test3-l.c,其中函数char *insert(char *s1,char *s2)的功能是:在字符串s1中插入一个新串s2,插入s2串的第一个字符必须被原字符串s1所包含,返回插入后的字符串。例如:有字符串abcdefgh,插入d45后输出abcd45defgh。
如果s2串的第一个字符没有被原字符串s1所包含,在s1尾部插入。
注意:不得删除和添加行,也不得更改程序的结构。
源程序如下:
# include "stdio.h"
# include "string.h"
char *insert(char *s1,char *s2)
{ int len1,len2;
char p,q;
len1=strlen(s1);
len2=strlen(s2);
q=s1;
p=s1+len1;
while(*s1!='\0' || *s1!=*s2)
*s1++;
if(*s1!='\0')
for(;p>=s1;p++)
*(p+len2)=*p;
while(*s2)
*s1++=*s2++;
*(q+len1+len2)='\0';
return p;
}
void main()
{ char str1[100],str2[100],*add;
printf("Input a string:\n");
gets(str1);
printf("\nInput the string do you want to insert:\n");
gets(str2);
add=insert(str1,str2);
printf("output is :%s\n",add);
}
二、编写程序(程序文件名为test3-2.c)(60分)
用函数调用方式编写程序,要求其中函数strrep的功能为:将字符串a的第n个字符之后的内容由字符串b替代,返回替换后的字符串。在主函数中完成字符串输入和输出操作。
要求:将结果显示在屏幕上的同时输出到test3-2.dat中。
19-1套 参考答案:
一、程序调试题(文件名test1-1.c)(40分)
# include <stdio.h>
void fun(long s,long t) /* 改为 long *t */
{ long s1=10;
*t=s%10;
while(s>o); /* 改为 while(s>0) */
{ s=s/100;
t=s%10*s1+t; /* 改为 *t=s%10*s1+*t */
s1=s1*100; /* 改为 s1=s1*10 */
}
}
void main()
{ long s,t;
printf("\nPlease enter integer s:");
scanf("%ld",&s);
if(s>0)
{ fun(s,&t);
printf("The result is :%ld\n",t);
}
else printf("s value error.\n");
}
评分标准:每改对一处得6分,第二处有两个错误,结果正确得10分。
二、编写程序(程序文件取名为 test1-2.c)(60分)
评分标准:
1.文件打开、关闭正确 10分
2.屏幕结果输出正确 5分
3.文件结果输出正确 5分
4.数据输入方法正确 5分
5.排号正确 5分
6.数据初始化正确 5分
7.数据处理正确 20分
8.找出结果正确 5分
参考程序:
# include <stdio.h>
# define nmax 50
void main()
{ int i,k,m,n,num[nmax],*p;
FILE *fp;
printf("Please enter the n:");
scanf("%d",&n);
p=num;
for(i=0;i<n;i++)
*(p+i)=i+1;
i=0;k=0;m=0;
while(m<n-1)
{ if( *(p+i)!= 0 )
k++;
if(k==5)
{ *(p+i)=0;
k=0;m++;
}
i++;
if(i==n) i=0;
}
while(*p==0) p++;
fp=fopen("test1-2.dat","w");
printf("%d number is a last ont.\n",*p);
fprintf(fp,"%d number is a last ont.\n",*p);
fclose(fp);
}
19-2套 参考答案:
一、程序调试题(文件名test2-1.c)(40分)
# include <stdio.h>
# include <string.h>
void fun(char *s,char *t1,char *t2,char *w)
{ char *p,*r,*place;
strcpy(w,s);
place=NULL;
while(*w)
{ p=w; r=t1;
while(r) /* 改为 *r */
if(*r=*p) /* 改为 *r==*p */
{ r++;p++;}
else continue; /* 改为 break */
if(*r=='0') /* 改为 '\0' */
place=w;
w++;
}
if(place!=NULL)
{ r=t2;
while(&r) /* 改为 *r */
*place=*r,place++,r++;
}
}
main()
{ char s[100],t1[100],t2[100],w[100];
printf("\nPlease enter string s:");
scanf("%s",s);
printf("\nPlease enter substring t1:");
scanf("%s",t1);
printf("\nPlease enter substring t2:");
scanf("%s",t2);
if(strlen(t1)==strlen(t2))
{ fun(s,t1,t2,w);
printf("\nThe result is:%s\n",w);
}
else printf("Error:strlen(t1)!=strlen(t2)\n");
}
评分标准:每改对一处得6分,结果正确得10分。
二、编写程序(程序文件取名为 test2-2.c)(60分)
评分标准:
1.文件打开、关闭正确 10分
2.屏幕结果输出正确 5分
3.文件结果输出正确 5分
4.数据输入方法正确 5分
5.函数调用和函数参数定义方法正确 10分
6.下标为奇数位置的判断正确 10分
7.字母转换正确 10分
8.命令行参数使用正确 5分
参考程序:
# include <stdio.h>
void fun(char *st)
{ char *p=st;
int i=0;
while(*p)
{ if((i%2)&&(*p>='a' && *p<='z')) *p-=32;
p++; i++;
}
}
void main(int argc,char *argv[])
{ char tt[51];
FILE *wf;
if(argc!=2)
{ printf("\nToo few parameter!\n");
exit(0);
}
wf=fopen(argv[1],"w");
printf("Please enter an charachter string within 50 characters:\n");
gets(tt);
fun(tt);
puts(tt);
fprintf(wf,"t=%s",tt);
fclose(wf);
}
19-3套 参考答案:
一、程序调试题(文件名test3-1.c)(40分)
# include "stdio.h"
# include "string.h"
char *insert(char *s1,char *s2)
{ int len1,len2;
char p,q; /* 改为 *p,*q */
len1=strlen(s1);
len2=strlen(s2);
q=s1;
p=s1+len1; /* 改为 len1-1 */
while(*s1!='\0' || *s1!=*s2) /* 改为 && */
*s1++; /* 改为 *s1++ */
if(*s1!='\0')
for(;p>=s1;p++) /* 改为 p-- */
*(p+len2)=*p;
while(*s2)
*s1++=*s2++;
*(q+len1+len2)='\0';
return p; /* 改为 return q */
}
void main()
{ char str1[100],str2[100],*add;
printf("Input a string:\n");
gets(str1);
printf("\nInput the string do you want to insert:\n");
gets(str2);
add=insert(str1,str2);
printf("output is :%s\n",add);
}
评分标准:每改对一处得5分,结果正确得10分。
二、编写程序(程序文件取名为 test3-2.c)(60分)
评分标准:
1.字符串输入正确 5分
2.函数及函数调用正确 10分
3.替换位置定义正确 10分
4.字符串替换正确 15分
5.屏幕上显示结果正确 5分
6.文件打开、关闭正确 5分
7.文件写入正确 5分
8.返回结果正确 5分
参考程序:
# include <stdio.h>
# include <string.h>
char *strrep(char *s1,char *s2,int n)
{ char *p,*q;
p=s1+n;
q=s2;
while(*q) *p++=*q++;
*p='\0';
return s1;
}
main()
{ char a[100],b[100],*str;
int n,len;
FILE *fp;
fp=fopen("test3-2.dat","w");
printf("Input string a and b:\n");
gets(a);
gets(b);
len=strlen(a);
printf("Input number:");
scanf("%d",&n);
if((n>=0)&&(n<=len))
{ str=strrep(a,b,n);
printf("Output is :%s\n",str);
fprintf(fp,"Output is :%s\n",str);
}
else
{ printf("n value is error.\n");
fprintf(fp,"n value is error.\n");
}
fclose(fp);
}
(第一套)
(60分钟)
一、程序调试题(文件名test1-1.c)(40分)
磁盘上有test1-1.c,其功能是:计算一个英文句子中最长单词的长度max(单词长度即为单词中字母的个数).假设该英文句子中只含有字母和空格,在空格之间连续的字母串称为单词,当输入回车符时标志句子结束。调试程序使之能输出正确的结果。
注意: 可以增加和修改程序行,但不得删除程序中的整行。在一处增加的程序行不得超过两行,不得更改程序的结构。
源程序如下:
#include <stdio.h>
int len_max(char *strp)
{ int max=0,len=0;
while(strp!='\0')
{ while((*strp>='A'&&*strp<='Z')&&(*strp>='a'&&*strp<='z'))
{ len++;
}
if(len<max) max=len;
len=0;
strp++;
}
return;
}
void main()
{ char str[100];
int maxlen;
printf("Input a sentence:\n");
gets(str);
maxlen=len_max(&str);
printf("maxlen=%d\n",maxlen);
}
二、编写程序(程序文件名为test1-2.c)(60分)
请用函数调用方式编写程序,要求:
l、 写一create函数,功能是:根据形参n的值(1<=n<=10),按如下所示规律构造二维数组下三角的前n行:
1
5 7
9 11 13
13 15 17 19
17 19 21 23 25
………….
2、 在main函数中输入一整数m(1<=m<=10)并调用create函数,输出该二维数组下三角的前m行。
3、结果要求输出到屏幕和文件test1-2.dat中。
(第二套)
(60分钟)
一、程序调试题(文件名test2-1.c)(40分)
磁盘上有test2-1.c,其功能是:把一个正整数各位上的数转换成对应的数字字符,并逆序输出( 输出时每个数字字符之后插入一个*号)。例如:输入256,则输出的字符为6*5*2*
注意:可以增加和修改程序行,但不得删除程序中的整行。在一处增加的程序行不得
超过两行,不得更改程序的结构。
源程序如下:
#include <stdio.h>
void fun(int m, char s)
{ int k, i=10;
while(m!=0)
{ k=m/i ;
*s=k+"0";
s++ ;
m=(m-k)/i ;
}
}
void main()
{ int x, i;
char s[10];
scanf("%d", &x);
if(x>0)
{ fun(x, s);
for(i=0 ; s ; i++)
printf("%c*" , s[i]) ;
}
else printf("x value error\n");
}
二、编写程序 (程序文件取名为test2-2.c)(60分)
已知磁盘上的test2-2.txt文本文件中包含有3个字符串,每个字符串的长度小于80且
3个字符串之间以换行符做分隔。编写程序要求实现:
1. 从文件中读入3个字符串并把它们按升序排序。
2. 将排序后的3个字符串输出到屏幕和追加到原磁盘文件的尾部。
(第三套)
(60分钟)
一、程序调试题(文件名test3-l.c)(40分)
磁盘上已有一文件tesl3-l.c,其中函数fun的功能是计算两矩阵之乘积。请改正程序中的错误,使它能计算出正确的结果。
注意:只能修改语句行,不得增加或删除行,也不得更改程序的结构。
源程序如下:
#include <stdio.h>
#define M 2
#define N 3
#define P 2
void fun(int a[M][N],b[N][P],c[M][P])
{ int i,j,k;
for(i=0;i<=P;i++)
for(j=0;j<P;j++)
{ c[i][j]=0;
for(k=0;k<n;k++)
c[i][j]=a[i][k]*b[k][j];
}
}
void main()
{ int a[2][3]={{1,2,3},{4,5,6}};
int b[3][2]={{1,2},{3,4},{5,6}};
int c[2][2], i, j;
fun(*a,*b,*c);
for(i=0;i<2;i++)
{ for(j=0;j<2;j++)
printf("%d ",c[i][j]);
printf("\n");
}
}
二、编写程序(程序文件名为tes3-2.c)(60分)
用函数调用方式编写程序。在主函数中提示输入自然数n,调用函数fun,并输出结果。函数fun用递归的方法求1+2+…+n的值。
要求:1、将结果显示在屏幕上的同时输出到文件test3-2.dat中。
2、文件名test3-2.dat要求从命令行参数给出。
20-1套 参考答案:
一、程序调试题(文件名test1-1.c)(40分)
#include <stdio.h>
int len_max(char *strp)
{ int max=0,len=0;
while(strp!='\0')
{ while((*strp>='A'&&*strp<='Z')&&(*strp>='a'&&*strp<='z')) /* 改为 || */
{ len++; /* 增加一行语句: strp++; */
}
if(len<max) max=len; /* 改为 len>max */
len=0;
strp++;
}
return; /* 改为 return max */
}
void main()
{ char str[100];
int maxlen;
printf("Input a sentence:\n");
gets(str);
maxlen=len_max(&str); /* 改为 str */
printf("maxlen=%d\n",maxlen);
}
二、编写程序(程序文件取名为 test1-2.c)(60分)
评分标准:
1.文件打开、关闭正确
2.屏幕结果输出正确
3.文件结果输出正确
4.函数定义、形参书写正确
5.正确定义实参二维数组,并能正确调用creat函数
6.函数中对二维数组的处理正确
参考程序:
# include <stdio.h>
void creat(int a[10][10],int n)
{ int i,j;
for(i=0;i<n;i++)
for(j=0;j<=i;j++)
a[i][j]=i*4+j*2+1;
}
main()
{ int a[10][10],m,i,j;
FILE *fp;
fp=fopen("test1-2.dat","w");
printf("Input m(1~10):");
scanf("%d",&m);
creat(a,m);
for(i=0;i<m;i++)
{ for(j=0;j<=i;j++)
{ printf("%5d",a[i][j]);
fprintf(fp,"%5d",a[i][j]);
}
printf("\n");
fprintf(fp,"\n");
}
fclose(fp);
}
20-2套 参考答案:
一、程序调试题(文件名test2-1.c)(40分)
#include <stdio.h>
void fun(int m, char s) /* 改为 *s */
{ int k, i=10;
while(m!=0)
{ k=m/i ; /* 改为 m%i */
*s=k+"0"; /* 改为 '0' */
s++ ;
m=(m-k)/i ;
}
/*增加一行内容:*s='\0'; */
}
void main()
{ int x, i;
char s[10];
scanf("%d", &x);
if(x>0)
{ fun(x, s);
for(i=0 ; s ; i++) /* 改为 s[i] */
printf("%c*" , s[i]) ;
}
else printf("x value error\n");
}
二、编写程序(程序文件取名为 test2-2.c)(60分)
评分标准:
1.文件打开和关闭正确
2.串的读入正确
3.串的排序正确
4.文件位置指针定位正确
5.屏幕输出和文件输出正确
6.程序结构合理
参考程序:
# include <stdio.h>
# include <string.h>
main()
{ char str[3][80],string[80];
int i,j,k;
FILE *fp;
fp=fopen("test2-2.txt","r+");
for(i=0;i<3;i++)
fgets(str[i],80,fp);
printf("The strings:\n");
for(i=0;i<3;i++)
printf("%s",str[i]);
for(i=0;i<2;i++)
{ k=i;
for(j=i+1;j<3;j++)
if( strcmp( str[k] , str[j] ) > 0 ) k=j;
if(k!=i)
{ strcpy(string,str[k]);
strcpy(str[k],str[i]);
strcpy(str[i],string);
}
}
printf("Sorted result:\n");
fseek(fp,0,2);
for(i=0;i<3;i++)
{ printf("%s",str[i]);
fprintf(fp,"%s",str[i]);
}
fclose(fp);
}
20-3套 参考答案:
一、程序调试题(文件名test3-1.c)(40分)
#include <stdio.h>
#define M 2
#define N 3
#define P 2
void fun(int a[M][N],b[N][P],c[M][P]) /* 改为
展开阅读全文