本系列资料由"韬略宏智" 授权发布,任何网站不得转载,否则追究法律责任。
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。
试题程序:
#include
#include
#define FU(m,n)(m)/(n)
float fun(float a,float b,float c)
{【1】 value;
value=FU(a+b,a-b)+FU(c+b,c-b);
return(value);
}
main()
{ float x,y,z,sum;
printf("Input x y z:: ");
scanf("%f%f%f",&x,&y,&z);
printf("x=%f,y=%f,z=%f\n",x,y,z);
if(x==y【2】y==z){printf("Data error!\n ");}
sum=fun(x,y,z);
printf("The result is:%5.2f\n ",【3】);
}
【答案】
【1】float 【2】|| 【3】sum
【解析】
2.改错题
下列给定程序中函数fun的功能是:用选择法对数组中的n个元素按从小到大的顺序进行排序。
请修改程序中的错误,使它能计算出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include <stdio.h>
#define N 20
void fun(int a[],int n)
{
int i,j,t,p;
for(j=0;j<n-1;j++) {
/********found********/
p=j
for(i=j;i<n;i++)
{
if(a[i]<a[p])
{
/********found********/
p=i;
t=a[p];
a[p]=a[i];
a[i]=t;
}
}
}
}
main()
{
int a[N]={9,6,8,3,-1},i,m=5;
printf("the original array is:");
for(i=0;i<m;i++)
printf("%d ",a[i]);
printf("\n");
fun(a,m);
printf("the array after sorting is:");
for(i=0;i<m;i++)
printf("%d ",a[i]);
printf("\n");
}
【答案】
第1处:p=j应改为p=j;
第2处:p=i;应改为p=j;
【考点】语句声明和选择排序算法。
【解析】
(1)函数fun中定义了几个临时变量,其中i和j控制循环次数,t是交换时使用的临时变量,p是用来记录最小值的下标。每次循环时都把第j个元素的下标赋给p,但p=j因为少了“;”,所以不是一个合法的语句,故p=j应改为p=j;。
(2)按fun函数的思路,p记录的是for外循环的数组下标,并且依次递增,在a[p]前的数都比a[p]小,p递增后是下一个需要交换的数组元素的下标。在for的内循环中,如果有比a[p]更小的值,则与其进行交换。若把i赋给p,则a[p]与a[i]表示的就是同一个数组元素,因而无法实现按数值元素的数值大小进行调序,故需将p=i;改为p=j;。
北京 | 天津 | 上海 | 江苏 | 山东 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
广东 | 河北 | 湖南 | 广西 | 河南 |
海南 | 湖北 | 四川 | 重庆 | 云南 |
贵州 | 西藏 | 新疆 | 陕西 | 山西 |
宁夏 | 甘肃 | 青海 | 辽宁 | 吉林 |
黑龙江 | 内蒙古 |