C期末题库7
1
/*------------------------------------------------------
【程序改错】:只允许修改错误代码,其他代码不允许修改!
--------------------------------------------------------
功能:实现3行3列矩阵的转置,即行列互换。
------------------------------------------------------*/
#include "stdio.h"
void fun(int a[3][3],int n)
{
int i,j,t;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
/**********ERROR**********/
scanf("%d",a[i][j]);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%4d",a[i][j]);
printf("\n");
}
for(i=0;i<n;i++)
/**********ERROR**********/
for(j=0;j<n;j++)
{
/**********ERROR**********/
a[i][j]=t;
a[i][j]=a[j][i];
/**********ERROR**********/
t=a[j][i];
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%4d",a[i][j]);
printf("\n");
}
}
void main()
{
int b[3][3];
fun(b,3);
}
代码解释
答案
【改错1】 正确
【学生答案】
scanf("%d",&a[i][j]);
【参考答案】
scanf("%d",&a[i][j]);
==============================
【改错2】 正确
【学生答案】
for(j=0;j<i;j++)
【参考答案】
for(j=0;j<i;j++)
==============================
【改错3】 正确
【学生答案】
t=a[i][j];
【参考答案】
t=a[i][j];
==============================
【改错4】 正确
【学生答案】
a[j][i]=t;
【参考答案】
a[j][i]=t;
2
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
题目:函数fun的功能是:计算正整数num的各位上的数字之积。
例如,输入252,则输出应该是20。
请改正程序中的错误,使它能得出正确的结果。
--------------------------------------------------------
注意:不可以增加或删除程序行,也不可以更改程序的结构。
------------------------------------------------------*/
long fun (long num)
{
/**********ERROR**********/
long k;
do
{
k*=num%10;
/**********ERROR**********/
num\=10;
}while (num);
return k;
}
main()
{
long n;
printf("\nPlease enter a number:");
/**********ERROR**********/
scanf("%ld", n);
/**********ERROR**********/
printf("\n%ld\n",fun(long n));
}
代码解释
答案
【改错1】 错误
【学生答案】
long k;
【参考答案】
long k=1;
==============================
【改错2】 正确
【学生答案】
num/=10;
【参考答案】
num/=10;
==============================
【改错3】 正确
【学生答案】
scanf("%ld", &n);
【参考答案】
scanf("%ld",&n);
==============================
【改错4】 错误
【学生答案】
printf("\n%ld\n",fun(long num);
【参考答案】
printf("\n%ld\n",fun(n));
3
/*------------------------------------------------
【程序设计】
--------------------------------------------------
功能:用函数求fibonacci数列前28项的和。
说明:fibonacci数列为数列的第一项值为1,第二项值也
为1,从第三项开始,每一项均为其前面相邻两项
的和。
例如:当n=28时,运行结果:832039
*********Begin**********和********** End **********不可删除
------------------------------------------------*/
#include <stdio.h>
void TestFunc();
long sum(long f1,long f2)
{
/*********Begin**********/
/********** End **********/
}
main()
{
long int f1=1,f2=1;
printf("sum=%ld\n",sum(f1,f2));
TestFunc();
}
void TestFunc()
{
FILE *IN,*OUT;
int n;
int i[2];
long int o;
IN=fopen("in.dat","r");
if(IN==NULL)
{
printf("Read FILE Error");
}
OUT=fopen("out.dat","w");
if(OUT==NULL)
{
printf("Write FILE Error");
}
for(n=0;n<2;n++)
fscanf(IN,"%d",&i[n]);
o = sum(i[0],i[1]);
fprintf(OUT,"%ld\n",o);
fclose(IN);
fclose(OUT);
}
代码解释
答案
【参考代码】
long f,k=f1+f2;
int i;
for(i=3;i<=28;i++)
{f=f1+f2;
k=k+f;
f1=f2;
f2=f;
}
return(k);
===============
【考生代码】
int s=0,i,a[28];
a[0]=a[1]=f1;
for(i=2;i<28;i++)
a[i]=a[i-1]+a[i-2];
for(i=0;i<28;i++)
s+=a[i];
return s;
4
/*------------------------------------------------
【程序设计】
--------------------------------------------------
功能:计算出k以内最大的10个能被13或17整除的自然数之
和。(k<3000)。
*********Begin**********和********** End **********不可删除
------------------------------------------------*/
#include "stdio.h"
#include "conio.h"
int fun(int k)
{
/*********Begin**********/
/********** End **********/
}
main()
{
int m;
void TestFunc();
printf("Enter m: ");
scanf("%d", &m);
printf("\nThe result is %d\n", fun(m));
TestFunc();
}
void TestFunc()
{
FILE *IN,*OUT;
int s ;
int t;
int o;
IN=fopen("in.dat","r");
if(IN==NULL)
{
printf("Read File Error");
}
OUT=fopen("out.dat","w");
if(OUT==NULL)
{
printf("Write File Error");
}
for(s=1;s<=5;s++)
{
fscanf(IN,"%d",&t);
o=fun(t);
fprintf(OUT,"%d\n",o);
}
fclose(IN);
fclose(OUT);
}
代码解释
答案
【参考代码】
int a=0,b=0;
while((k>=2)&&(b<10))
{if((k%13= =0)||(k%17==0))
{a=a+k;b++;}
k–;
}
return a;
===============
【考生代码】
int i,s=0,a=1;
for(i=k;i>=0;i–)
{if((i%13= =0 )||(i%17= =0))
s+=i,a++;
if(a==10)break;}
return s;
