本系列資料由"韜略宏智" 授權(quán)發(fā)布,任何網(wǎng)站不得轉(zhuǎn)載,否則追究法律責(zé)任。
1.填空題
下列給定程序中,函數(shù)fun()的功能是:計算函數(shù)F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)的值。其中x和y不相等,z和y不等。例如,當(dāng)x的值為9,y的值為11,z的值為15時,函數(shù)值為-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.改錯題
下列給定程序中函數(shù)fun的功能是:用選擇法對數(shù)組中的n個元素按從小到大的順序進(jìn)行排序。
請修改程序中的錯誤,使它能計算出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
試題程序:
#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應(yīng)改為p=j;
第2處:p=i;應(yīng)改為p=j;
【考點】語句聲明和選擇排序算法。
【解析】
(1)函數(shù)fun中定義了幾個臨時變量,其中i和j控制循環(huán)次數(shù),t是交換時使用的臨時變量,p是用來記錄最小值的下標(biāo)。每次循環(huán)時都把第j個元素的下標(biāo)賦給p,但p=j因為少了“;”,所以不是一個合法的語句,故p=j應(yīng)改為p=j;。
(2)按fun函數(shù)的思路,p記錄的是for外循環(huán)的數(shù)組下標(biāo),并且依次遞增,在a[p]前的數(shù)都比a[p]小,p遞增后是下一個需要交換的數(shù)組元素的下標(biāo)。在for的內(nèi)循環(huán)中,如果有比a[p]更小的值,則與其進(jìn)行交換。若把i賦給p,則a[p]與a[i]表示的就是同一個數(shù)組元素,因而無法實現(xiàn)按數(shù)值元素的數(shù)值大小進(jìn)行調(diào)序,故需將p=i;改為p=j;。
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |