计算机编程大题答案.docx
《计算机编程大题答案.docx》由会员分享,可在线阅读,更多相关《计算机编程大题答案.docx(17页珍藏版)》请在冰点文库上搜索。
计算机编程大题答案
改错题
1、本改错题共有1道,改错题源文件在考生目录中,请在******下一行将错误改正。
不得增行与减行,改正后使程序运行正确存盘即可。
改错题的源文件分为:
modi1.c,
下列给定程序中函数fun()的功能是计算1/n!
的值。
例如:
给n输入5,则输出0.008333。
请改正程序中的错误,使它能得到正确结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include
#include
/**********************found***********************/
intfun(intn)doublefun(intn)
{doubleresult=1.0;
if(n==0)
return1.0;
while(n>1&&n<170)
/**********************found***********************/
result*=n++;result*=n--;
result=1/result;
returnresult;
}
main()
{
intn;
printf("InputN:
");
scanf("%d",&n);
printf("\n1/%d!
=%lf\n",n,fun(n));
}
程序题
2、请编写函数fun(),其功能是:
将所有大于1,小于整数m的素数存入xx所指数组中,素数的个数通过k传回。
例如,输入25,则应输出23571113171923。
注意:
部分源程序已给出
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
此题的源文件在考生目录下,文件名为:
prog1.c
#include
#include
voidfun(intm,int*k,intxx[])
{
inti,j,n,a=0;
for(i=2;i<=m;i++)
{
for(n=0,j=1;j<=i;j++)
if(i%j==0)
n++;
if(n==2)
{
xx[a]=i;
a++;
}
*k=a;
}
}
main()
{
FILE*wf;
intm,n,i,zz[100];
printf("\nPleaseenteranintegernumberbetween10and100:
");
scanf("%d",&n);
fun(n,&m,zz);
printf("\n\nThereare%dprimenumberslessthan%d:
",m,n);
for(n=0;nprintf("\n%4d",zz[n]);
/******************************/
wf=fopen("out.dat","w");
for(i=20;i<=30;i++)
{fun(i,&m,zz);
for(n=0;nfprintf(wf,"%4d",zz[n]);
fprintf(wf,"%c",'\n');
}
fclose(wf);
/*****************************/
}
3、下列给定程序中,函数fun()的功能是计算并输出high以内的素数之和。
high由主函数传给fun()函数。
若high的值为100,则函数的值为1060。
请改正程序中的错误,使它能得到正确结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include
#include
#include
intfun(inthigh)
{
intsum=0,n=0,j,yes;
while(high>=2)
{
yes=1;
for(j=2;j<=high/2;j++)
/**********************found***********************/
ifhigh%j==0if(high%j)
{
yes=0;
break;
}
/**********************found***********************/
if(yes==0)if(yes==1)
{
sum+=high;
n++;
}
high--;
}
returnsum;
}
main()
{
printf("%d\n",fun(100));
}
4、请编写一个函数doublefun(intn),求s=1!
+2!
+...+n!
n通过键盘输入,大小n不超过20,如输入3,输出结果应为9,函数的返回值为所求和。
注意:
部分源程序已给出。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
此题的源文件在考生目录下,文件名为:
prog1.c
#include
#include
doublefun(intn)
{inti,j,m,sum=0;
for(i=1;i<=n;i++)
{
for(m=1,j=1;j<=i;j++)
m*=j;
sum+=m;
}
return(sum);
}
main()
{
FILE*wf;
intn,i,k=0;
doubles,bb[10];
printf("请输入n:
\n");
scanf("%d",&n);
s=fun(n);
printf("和为:
%f",s);
printf("\n");
/******************************/
wf=fopen("out.dat","w");
for(i=1;i<=10;i++)
bb[k++]=fun(i);
for(k=0;k<10;k++)
fprintf(wf,"%f",bb[k]);
fclose(wf);
/*****************************/
}
5、本改错题共有1道,改错题源文件在考生目录中,请在******下一行将错误改正。
不得增行与减行,改正后使程序运行正确存盘即可。
改错题的源文件分为:
modi1.c,
下列给定程序中,函数fun()的功能是:
读入一个字符串(长度<20),将该字符串中的所有字符按ASCII码降序排序后输出。
例如:
输入dafhc,则应输出hfdca。
请改正程序中的错误,使它能得到正确结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include
#include
/**********************found***********************/
voidfun(chart[]);删除;
{
charc;
inti,j;
for(i=0;ifor(j=i+1;jif(t[i]{
c=t[j];
/**********************found***********************/
t[j]=t[i++];t[j]=t[i];
t[i]=c;
}
}
main()
{
chars[81];
printf("\nPleaseenteracharacterstring:
");
gets(s);
printf("\n\nBeforesorting:
\n%s",s);
fun(s);
printf("\nAftersortingdecendingly:
\n%s",s);
}
6、本改错题共有1道,改错题源文件在考生目录中,请在******下一行将错误改正。
不得增行与减行,改正后使程序运行正确存盘即可。
改错题的源文件分为:
modi1.c,
第1题分值为:
10分,
给定程序的功能是:
计算s=1+(1+2)+(1+2+3)+...+(1+2+...+n),期中n通过键盘输入
请改正程序中的错误,使它能计算出正确的结果。
注意不得增行或删行,也不得更改程序的结构!
注意不得增行或删行,也不得更改程序的结构!
程序中有两处错误。
本题未指明错误是哪一行,需自己找。
#include"stdio.h"
main()
{
intn,i,j,f,s=0;
printf("请输入n:
\n");
scanf("%d",n);scanf("%d",&n)
for(i=1;i<=n;i++)
{
f=0f=0;
for(j=1;j<=i;j++)
f=f+j;
s=s+f;
}
printf("s=%d\n",s);
}
7、编写函数fun(),它的功能是求n以内(不包括n)同时能被5与11整除的所有自然数之和的平方根s,并作为函数值返回。
例如:
n为1000时,函数值应为s=96.979379。
注意:
部分源程序已给出。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
此题的源文件在考生目录下,文件名为:
prog1.c
#include
#include
#include
doublefun(intn)
{
inti,sum=0;
doublem;
for(i=1;iif(i%55==0)
sum+=i;
m=sqrt(sum);
return(m);
}
main()
{
FILE*fp;
inti;
printf("s=%f\n",fun(1000));
fp=fopen("out.dat","w");
for(i=900;i<=1000;i++)
fprintf(fp,"%f",fun(i));
fclose(fp);
}
8.请编一个函数voidfun(inttt[M][N],intpp[N]),tt指向一个M行N列的二维数组,求出二维数组每列中最大元素,并依次放入pp所指的一维数组中。
二维数组中的数已在主函数中给出。
注意:
部分源程序已给出。
请勿改动主函数main和其他函数中的任何内容,否则得不到成绩后果自负,仅在函数fun的花括号中填入所编写的若干语句。
此题的源文件在考生目录下,文件名为:
prog1.c
#include
#include
#defineM3
#defineN4
voidfun(inttt[M][N],intpp[N])
{
inti,j,k=0;
for(i=0;i{
for(j=0;j{
if(tt[k][i]
k=j;
}
pp[i]=tt[k][i];
}
}
main()
{
FILE*wf;
intt[M][N]={{68,32,54,12},{14,24,88,58},{42,22,44,56}};
intp[N],i,j,k;
printf("Theriginaldatais:
\n");
for(i=0;i{
for(j=0;jprintf("%6d",t[i][j]);
printf("\n");
}
fun(t,p);
printf("\nTheresultis:
\n");
for(k=0;kprintf("%4d",p[k]);
printf("\n");
wf=fopen("out.dat","w");
for(k=0;kfprintf(wf,"%4d",p[k]);
fclose(wf);
}
10、请编写函数fun,其功能是:
将两个两位数的正整数a、b合并形成一个整数放在c中。
合并的方式是:
将a数的十位和个位数依次放在c数个位和十位上,b数的十位和个位数依次放在c数的百位和千位上。
例如,当a=16,b=35,调用该函数后,c=5361。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
此题的源文件在考生目录下,文件名为:
prog1.c
#include"stdio.h"
voidfun(inta,intb,long*c)
{
intx,y,z,k;
x=a%10;
y=a/10;
z=b%10;
k=b/10;
*c=1000*z+100*k+10*x+y;
}
}
main()
{
FILE*wf;
inta,b,i;
longc;
printf("Inputa,b;");
scanf("%d%d",&a,&b);
fun(a,b,&c);
printf("Theresultis:
%ld\n",c);
wf=fopen("out.dat","w");
for(i=10;i<=90;i++)
{fun(i,100-i,&c);
fprintf(wf,"%ld",c);
}
fclose(wf);
}
11、请编写一个函数voidfun(intm,intk,intxx[]),该函数的功能是:
将大于整数m且紧靠m的k个非素数存入所指的数组中。
例如,若输入15,5,则应输出16,18,20,21,22。
注意:
部分源程序已给出。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
#include
#include
voidfun(intm,intk,intxx[])
{
inti=0,j,n;
m=m+1;
while(i!
=k)
{
for(j=1,n=0;j<=m;j++)
if(m%j==0)
n++;
if(n>2)
{
xx[i]=m;
i++;
}
m++;
}
}
main()
{
FILE*wf;
intm,n,zz[1000];
printf("\nPleaseentertwointegers:
");
scanf("%d,%d",&m,&n);
fun(m,n,zz);
for(m=0;mprintf("%d",zz[m]);
printf("\n");
/******************************/
wf=fopen("out.dat","w");
fun(300,10,zz);
for(m=0;m<10;m++)
fprintf(wf,"%d",zz[m]);
fclose(wf);
/*****************************/
}
12、本改错题共有1道,改错题源文件在考生目录中,请在******下一行将错误改正。
不得增行与减行,改正后使程序运行正确存盘即可。
下列给定程序中,函数fun()的功能是找出100~n(不大于1000)之间百位数字加十位数字等于个位数字的所有整数,把这些整数放在s所指的数组中,个数作为函数值返回。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include
#defineN100
intfun(int*s,intn)
{
inti,j,k,a,b,c;
j=0;
for(i=100;i{
/**********************found***********************/
k=n;k=i;
a=k%10;
k/=10;
b=k%10;
c=k/10;
if(a==b+c)
/**********************found***********************/
s[j]=i;s[j++]=i;
}
returnj;
}
main()
{
inta[N],n,num=0,i;
do
{
printf("\nEntern(<=1000):
");
scanf("%d",&n);
}
while(n>1000);
num=fun(a,n);
printf("\n\nTheresult:
\n");
for(i=0;iprintf("%5d",a[i]);
printf("\n\n");
}
13、请编写一个函数intfun(intn),求s=1+2+...+n,n通过键盘输入,大小n不超过1000,如输入100,输出结果应为5050,函数的返回值为所求和。
注意:
部分源程序已给出。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
#include
#include
intfun(intn)
{
intsum=0,i;
for(i=1;i<=n;i++)
sum+=i;
return(sum);
}
main()
{
FILE*wf;
intn,i,k=0;
ints,bb[10];
printf("请输入n:
\n");
scanf("%d",&n);
s=fun(n);
printf("和为:
%d",s);
printf("\n");
/******************************/
wf=fopen("out.dat","w");
for(i=101;i<=110;i++)
bb[k++]=fun(i);
for(k=0;k<10;k++)
fprintf(wf,"%d",bb[k]);
fclose(wf);
/*****************************/
}