第一套
一、改错题
1.题目要求
下列给定程序中函数fun的功能是:计算函数F(x,y,z)=(x+y)/(x—y)+(z+y)/(z—y)的值。其中x和y的值
不相等,z和y的值不相等。
例如,当x的值为9,y的值为11,z的值为15时,函数值为一3.50。
请改正程序中的错误,使它能得出正确的结果。
注意:部分源程序在文件MODI1.C中,不得增行或删行,也不得更改程序的结构。
#includestdio.h
#includemath.h
#includestdlib.h
**********found**********
#defineFU(m,n)((m/n))floatfun(floata,floatb,floatc){floatvalue;
value=FU(a+b,a-b)+FU(c+b,c-b);
**********found**********
Return(Value);
}
main()
{floatx,y,z,sum;
printf(Inputxyz:);
scanf(%f%f%f,x,y,z);
printf(x=%f,y=%f,z=%f\n,x,y,z);
if(x==y||y==z){printf(Dataerror!\n);exit(0);}sum=fun(x,y,z);
printf(Theresultis:%5.2f\n,sum);
}
2.算法分析
①#defineFU(m,n)((m/n))错误这样定义FU(m,n)造成语句value=FU(a+b,a-b)+FU(c+b,c-b)执
行为value=(a+b/a-b)+(c+b/c-b),所以应该将语句#defineFU(m,n)((m/n))改为#defineFU(m,n)(m)/(n)
②语句Return(Value);错误C语言中大小写字母有不同的含义,此处希望执行返回value的值
的操作,所以应该改为return(value);
二、填空题
1.题目要求
下列给定程序中,函数fun的功能是:有NXN矩阵,以主对角线为对称线,对称元素相加并将结果
存放在左下三角元素中,右上三角元素置为0。
例如,若N=3,有下列矩阵
123
456
789
计算后结果为
100
650
10149
请在程序的下划线处填入正确的内容并把下划线删除。使程序得出正确的结果。注意:部分源程序在文件
BLANK1.C中。
不得增行或删行,也不得改程序的结构!
#includestdio.h
#defineN4
voidfun(int(*t)______1__)
{inti,j;
for(i=1;iN;i++)
{for(j=0;ji;j++)
{
—2—=t[i][j]+t[j][i];
___3___=0;
}
}
}
main()
{
intt[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10},i,j;
printf(\nTheoriginalarray:n);
for(i=0;iN;i++)
{for(j=0;jN;j++)printf(%2d,t[i][j]);
printf(\n);
}
fun(t);
printf(\nTheresultis:\n);