sum+=xx[i][i]+xx[i][n-i];
return(sum);
}
main()
{intaa[M][M]={{1,2,3,4,5},{4,3,2,1,0},
{6,7,8,9,0},{9,8,7,6,5},{3,4,5,6,7}};
clrscr();
printf("\nThesumofallelementson2diagnalsis%d.",fun(M,aa));
}
【要求】
1.将上述程序录入到文件myf1.c中,根据题目要求及程序中语句之间的逻辑关系对程序中的错误进行修改。
2.改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译处理命令,但不能增加其他语句,也不能删去整条语句。
3.改正后的源程序(文件名myf1.c)必须放在考试软盘的根目录下,供阅卷用,否则不予评分。
二、编程题(22分)
【题目】
1.编写函数fun,函数的功能是:
移动字符串中的内容,移动的规则如下:
把第1到第m个字符平移到字符串的最后,把第m+1到最后的字符串移到字符串的前部。
例如:
字符串中原有的内容为:
ABCDEFGHIJK,m的值为3,则移动后,字符串中的内容应该是:
DEFGHIJKABC。
2.编写main函数,在main函数中初始化一个字符串,调用函数fun,将结果字符串及函数返回值写入到文件myf2.out中。
【要求】
1.源程序文件名必须取为myf2.c,输出结果文件名为myf2.out。
2.数据文件的打开、使用、关闭均用C语言标准库中缓冲文件系统的文件操作函数实现。
3.源程序文件和运行结果文件均需要保存在考试软盘的根目录中供阅卷使用。
4.不要复制扩展名为obj和exe的文件到考试软盘上。
模拟题二
一、改错题(18分)
【题目】
函数fun的功能是:
将p所指字符串中的所有字符复制到b中,要求每复制三个字符之后插入一个空格。
例如,在调用fun函数之前给a输入字符串:
ABCDEFGHIJK,
调用函数之后,字符数组b中的内容则为:
ABCDEFGHIJK。
含有错误的程序如下:
#include
voidfun(char*p,char*b)
{inti,k=0;
while(*p)
{i=1;
while(i<3&&*p)
{
b[k]=p;
k++;p++;i++;
}
if(*p)
{
b[k++]="";
}
}
b[k]=''\0'';
}
main()
{chara[80],b[80];
printf("Enterastring:
");gets(a);
printf("Theoriginalstring:
");puts(a);
fun(a,b);
printf("\nThestringafterinsertspace:
");
puts(b);printf("\n\n");
}
【要求】
1.将上述程序录入到文件myf1.c中,根据题目要求及程序中语句之间的逻辑关系对程序中的错误进行修改。
2.改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译处理命令,但不能增加其他语句,也不能删去整条语句。
3.改正后的源程序(文件名myf1.c)必须放在考试软盘的根目录下,供阅卷用,否则不予评分。
二、编程题(22分)
【题目】
1.编写main函数,将N名学生的成绩在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。
并调用函数fun,将结果及函数返回值写入到文件myf2.out中。
2.请编写函数fun,它的功能是:
求出这N个学生的平均分,由函数值返回。
例如,若学生的成绩是:
85,76,69,85,91,72,64,87,则平均分应当是:
78.625。
【要求】
1.源程序文件名必须取为myf2.c,输出结果文件名为myf2.out。
2.数据文件的打开、使用、关闭均用C语言标准库中缓冲文件系统的文件操作函数实现。
3.源程序文件和运行结果文件均需要保存在考试软盘的根目录中供阅卷使用。
4.不要复制扩展名为obj和exe的文件到考试软盘上。
模拟题三
一、改错题(18分)
【题目】
N个有序整数列已放在一维数组中,下列给定程序中函数fun的功能是:
利用折半查找算法查找整数m在数组中的位置。
若找到,则返回其下标值,反之,则返回-1。
提示:
折半查找的基本算法是:
每次查找前先确定数组中待查的范围,low和high,然后把m与中间位置(mid)中元素的值进行比较,如果m的值大于中间位置元素中的值,则下一次的查找范围放在中间位置之后的元素中,反之,下一次的查找范围落在中间位置之前的元素中。
直到low含有错误的程序如下:
#include
#defineN10
voidfun(inta[],intm)
{intlow=0,high=N-1,mid;
while(low<=high)
{mid=(low+high)/2;
if(m<=a[mid])
high=mid-1;
elseif(m>=a[mid])
low=mid+1;
return(mid);
}
return(-1);
}
main()
{inti,a[N]={-3,4,7,9,13,45,67,89,100,180},k,m;
printf(“a数组中的数据如下:
”);
for(i=0;iprintf(“Enterm:
“);scanf(“%d”,&m);
k=fun(a,m)
if(k>=0)printf(“m=%d,index=%d\n”,m,k);
elseprintf(“Notbefound!
\n”);
}
【要求】
1.将上述程序录入到文件myf1.c中,根据题目要求及程序中语句之间的逻辑关系对程序中的错误进行修改。
2.改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译处理命令,但不能增加其他语句,也不能删去整条语句。
3.改正后的源程序(文件名myf1.c)必须放在考试软盘的根目录下,供阅卷用,否则不予评分。
二、编程题(22分)
【题目】
1.编写函数fun,它的功能是:
将3行4列矩阵x乘以4行3列矩阵y,结果放在3行3列矩阵xy中。
矩阵相乘的基本方法是:
矩阵xy中行列下标分别为i,j的元素的值,是矩阵x中第i行上4个元素与矩阵y中第j列上4个元素对应相乘的和。
例如:
矩阵x为
,矩阵y为
,则矩阵xy为
。
2.编写main函数,初始化两个数组,调用函数fun,将结果矩阵及函数返回值写入到文件myf2.out中。
【要求】
1.源程序文件名必须取为myf2.c,输出结果文件名为myf2.out。
2.数据文件的打开、使用、关闭均用C语言标准库中缓冲文件系统的文件操作函数实现。
3.源程序文件和运行结果文件均需要保存在考试软盘的根目录中供阅卷使用。
4.不要复制扩展名为obj和exe的文件到考试软盘上。
模拟题四
一、改错题(18分)
【题目】
函数fun的功能是:
将m(1≤m≤10)个字符连接起来,组成一个新串,放入pt所指字符串中。
例如:
把3个串:
“abc”,“CD”,“EF”串连起来,结果是“abcCDEF”。
含有错误的程序如下:
#include
#include
#include
intfun(charstr[][],intm,*pt)
{
intk,q,i;
for(k=0;k{q=strlen(str[k]);
for(i=0;ipt[i]=str[k,i];
pt+=q;
pt[0]=0;
}
}
main()
{intm,h;
chars[10][10],p[120];
clrscr();
printf("\nPleaseenterm:
");
scanf("%d",&m);gets(s);
printf("\nPleaseenter%dstring:
\n",m);
for(h=0;hfun(s,p,m);
printf("\nTheresultis:
%s\n",p);
NONO();/*本函数与考生答题无关,考生不得改动,否则后果自负。
*/
}
【要求】
1.将上述程序录入到文件myf1.c中,根据题目要求及程序中语句之间的逻辑关系对程序中的错误进行修改。
2.改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译处理命令,但不能增加其他语句,也不能删去整条语句。
3.改正后的源程序(文件名myf1.c)必须放在考试软盘的根目录下,供阅卷用,否则不予评分。
二、编程题(22分)
【题目】
1.编写一个函数voidfun(intarray[],intn),将array数组中的前n个整数按从大到小的顺序排序。
2.编写主函数main,从键盘上输入一个正整数,求出该位是几位数,按从左到右的顺序显示各位数字,用这些数字组成一个最小正整数(调用fun函数),将以上三项结果写入到文件myf2.out中。
【要求】
1.源程序文件名必须取为myf2.c,输出结果文件名为myf2.out。
2.数据文件的打开、使用、关闭均用C语言标准库中缓冲文件系统的文件操作函数实现。
3.源程序文件和运行结果文件均需要保存在考试软盘的根目录中供阅卷使用。
4.不要复制扩展名为obj和exe的文件到考试软盘上。
模拟题五
一、改错题(18分)
【题目】输入字符串s1和s2,函数find()判断s1中是否包含字符串s2,若s1包含s2,则输出字符串s2在s1中的开始位置,否则输出”Nosubstring!
”。
含有错误的源程序为:
#include
#include
main()
{inti;
char*s1[200],*s2[100];
gets(s1);gets(s2);
i=find(s1);
if(i==-1)
Printf(”s1=%ss2=%s\nNosubstring!
\n”,s1,s2);
Else
Printf(”s1=%ss2=%s\nstartingposofsubstringis%d\n”,s1,s2,i);}
Find(char*s1)
{inti,k=0;
while(*s1){
i=0;
While(s1[i]==s2[i])i++;
if(*s1)return(k);
S1++;k++;}
Return(-1);}
【要求】
(1)将上述源程序录入文件myf1.c中,然后根据题目要求以及程序中前后语句之间的逻辑关系,改正程序中的错误。
(2)改错时,除可增加说明语句、编译预处理命令或调换语句的顺序外,不允许增加或删除任何语句。
(3)将改正后的程序存入考试盘myf1.c文件中。
二、编程题(22分)
【题目】求能被3整除且其中至少有两位数字为6的四位数,并求出满足的四位数的个数。
如9696、9669均为满足条件的四位数。
【要求】
(1)将源程序存于myf2.c文件中。
(2)将程序运行的结果存于myf2.out文件中。
(3)数据文件的打开、使用和关闭均要使用c语言的文件管理语句来实现。
【注意】本题目完成后,必须将文件myf2.ou2、myf2.c拷贝到考试盘中,供阅卷使用,否则不予评分。
参考答案
模拟题一
一、改错题(18分)
1.intfun(intn,intxx[][])改为intfun(intn,intxx[][M])
2.inti,j,sum;改为inti,j,sum=0;
3.printf("%f",xx[i][j]);改为printf("%d",xx[i][j]);
4.sum+=xx[i][i]+xx[i][n-i];改为sum+=xx[i][i]+xx[i][n-i-1];
二、编程题(22分)
#include
#include
#defineN80
voidfun(char*w,intm)
{
chara[N];
inti,j,n=strlen(w);
for(i=0;ifor(i=m,j=0;ifor(i=0;i}
main()
{
FILE*fp;
chara[N]="ABCDEFGHIJK";
intm;
fp=fopen("myf2.out","w");
if(fp==NULL){printf("Cannotopenthefile!
\n");}
fprintf(fp,"Theoriginalstring:
");
fprintf(fp,"%s",a);
printf("\nEnterm");
scanf("%d",&m);
fun(a,m);
fprintf(fp,"\nThestringaftermoving:
");
fprintf(fp,"%s",a);
fclose(fp);
}
模拟题二
一、改错题(18分)
1.while(i<3&&*p)改为while(i<=3&&*p)
2.b[k]=p;改为b[k]=*p;
3.b[k++]="";改为b[k++]='';
4.b[k]=''\0'';改为b[k]='\0'
二、编程题(22分)
#include
#include
#defineN8
structslist
{doubles;
structslist*next;
};
typedefstructslistSTREC;
doublefun(STREC*h)
{
STREC*p;
intnum=0;
doublesum=0;
p=h->next;
do
{sum+=p->s;
p=p->next;
num++;
}
while(p!
=0);
returnsum/num;
}
STREC*creat(double*s)
{STREC*h,*p,*q;inti=0;
h=p=(STREC*)malloc(sizeof(STREC));p->s=0;
while(i{q=(STREC*)malloc(sizeof(STREC));
q->s=s[i];i++;p->next=q;p=q;
}
p->next=0;
returnh;
}
main()
{doubles[N]={85,76,69,85,91,72,64,87},ave;
STREC*h;
FILE*fp;
inti=0;
h=creat(s);
fp=fopen("myf2.out","w");
if(fp==NULL){printf("Cannotopenthefile!
\n");}
while(s[i]>0)
{fprintf(fp,"%6.1f",s[i]);i++;}
ave=fun(h);
fprintf(fp,"\nave=%6.3f\n",ave);
fclose(fp);
}
模拟题三
一、改错题(18分)
1.voidfun(inta[],intm)改为voidintfun(inta[],intm)
2.if(m<=a[mid])改为if(m3.elseif(m>=a[mid])改为elseif(m>a[mid])
4.return(mid);改为elsereturn(mid);
二、编程题(22分)
#include
#include
voidfun(inta[3][4],intb[4][3],intab[3][3])
{
intj,k,l;
for(k=0;k<3;k++)
for(l=0;l<3;l++)
for(j=0;j<4;j++)
ab[k][l]+=a[k][j]*b[j][l];
}
main()
{
intx[3][4]={{1,0,1,1},{2,1,0,1},{1,2,0,3}};
inty[4][3]={{1,1,1},{0,0,0},{2,1,1},{1,1,3}};
intxy[3][3]={0},i,j;
FILE*fp;
fp=fopen("myf2.out","w");
if(fp==NULL){printf("Cannotopenthefile!
\n");}
fun(x,y,xy);
fprintf(fp,"axb=ab:
(3,3):
");
for(i=0;i<3;i++)
{
fprintf(fp,"\n");
for(j=0;j<3;j++)
fprintf(fp,"%d",xy[i][j]);
}
fclose(fp);
}
模拟题四
一、改错题(18分)
1.intfun(charstr[][],intm,*pt)改为intfun(charstr[][10],intm,char*pt)
2.pt[i]=str[k,i];改为pt[i]=str[k][i];
3.gets(s);改为gets(s[0]);
4.fun(s,p,m);改为fun(s,m,p);
二、编程题(22分)
#include"stdio.h"
voidfun(intarray[],intn)
{
intj,m,x;
for(m=0;mfor(j=m+1;jif(array[m]{
x=array[m];
array[m]=array[j];
array[j]=x;
}
}
main()
{
intarray[10],i,j,k;
FILE*fp;
if((fp=fopen("myf2.out","w"))==NULL)
{
printf("Createfilemyf2.outfailed!
\n");
}
printf("inputanpositiveinteger:
");
scanf("%d",&i);
k=0;
while(i!
=0)
{
array[k++]=i%10;
i=i/10;
}
fprintf(fp,"%d\n",k);
printf("%d\n",k);
for(j=k-1;j>=0;j--)
{
fprintf(fp,"%d",array[j]);
printf("%d",array[j]);
}
fprintf(fp,"\n");
printf("\n");
fun(array,k);
for(j=k-1;j>=0;j--)
i=i*10+array[j];
fprintf(fp,"%d\n",i);
printf("%d\n",i);
fclose(fp);
}
模拟题五
一、改错题(18分)
[1]*s1[200],*s2[100];改为s1[200],s2[100]
[2]find(s1);改为find(s1,s2)
[3]find(char*s1)改为find(char*s1,char*s2)
[4]if(*s1)改为if(s2[i]==’\0’)
二、编程题(22分)
#include
#include
main()
{
inti,j,k,m,count=0;
for(i=1;i<=9;i++)
for(j=1;j<=9;j++)
for(k=1;k<=9;k++)
for(m=1;m<=9;m++)
if((i*1000+j*100+k*10+m)%3=0)
if(i==6&&j==6||i==6&&k==6||i==6&&m==6||j==6&&k==6||j==6&&m==6||k==6&&m==6){
printf(“%d\n”,i*1000+j*100+k*10+m);
count++;
}
}
}
print(“count=%d\n”,count);
}
输出结果如下: