3 、給定程序MODI1.C中,函數(shù)fun的功能是:給定n個(gè)實(shí)數(shù),輸出平均值,并統(tǒng)計(jì)在平均值以上(含平均值)的實(shí)數(shù)的個(gè)數(shù)。
例如,n的值為8時(shí),輸入28.3、41.5、19.0、89.5、55.8、74.2、22.4、68.9,所得平均值為49.949997;在平均值以上(含平均值)的實(shí)數(shù)的個(gè)數(shù)為4。
請(qǐng)改正函數(shù)fun中的錯(cuò)誤,使它能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
試題源程序如下:
#include "stdio.h"
int fun(float x[],int n)
/**********found**********/
int i;
/**********found**********/
float xn=0.0;
for(i=0;i<n;i++)
/**********found**********/
xn=xn+x[j]/n;
printf("ave=%f\n",xn);
for(i=0;i<n;i++)
/**********found**********/
if(x[i]=>xn)c++;
return c;
}
main()
{ float x[20]={28.3,41.5,19.0,89.5,55.8,74.2,22.4,68.9};
printf("The number over average value:%d\n",fun(x,8));
}分析:(1)當(dāng)對(duì)以上程序進(jìn)行編譯時(shí),給出的第一個(gè)出錯(cuò)信息是:Declaration syntax error,指出在說(shuō)明語(yǔ)句int i;中有語(yǔ)法錯(cuò),仔細(xì)觀察,可以發(fā)現(xiàn)在說(shuō)明語(yǔ)句前卻少了函數(shù)體開(kāi)始的左花括號(hào),應(yīng)當(dāng)添加左花括號(hào)。
(2)修改后進(jìn)行編譯,在第一個(gè)for循環(huán)體處給出一個(gè)警告出錯(cuò)信息:Possible use of'xn'beforedefintion,提示xn有確定的值之前使用了它。此處,變量xn用于存放累加和,xn出現(xiàn)在賦值號(hào)的右邊,在第一次累加時(shí)它應(yīng)當(dāng)有初值,向上尋找,沒(méi)有發(fā)現(xiàn)給它賦過(guò)初值,因此應(yīng)當(dāng)在定義語(yǔ)句中給它賦初值0。float xn;改成float xn=0.0;
(3)修改后再次進(jìn)行編譯,編譯提示if語(yǔ)句中的關(guān)系表達(dá)式有語(yǔ)法錯(cuò),出錯(cuò)信息是:Expressionsyntax;查看關(guān)系表達(dá)式,可發(fā)現(xiàn)關(guān)系運(yùn)算符"=>"寫(xiě)錯(cuò),應(yīng)該是">=",應(yīng)進(jìn)行修正。
(4)修改后再次進(jìn)行編譯,編譯指出在c++;處有錯(cuò),出錯(cuò)信息是:Undefined symbol'c',指出符號(hào)'c'沒(méi)有經(jīng)過(guò)定義;此處變量c用以統(tǒng)計(jì)數(shù)組中高于、等于平均值的實(shí)數(shù)的個(gè)數(shù),查看函數(shù)開(kāi)頭處的定義語(yǔ)句,未曾對(duì)c進(jìn)行過(guò)定義,因此應(yīng)該在int語(yǔ)句中添加。
(5)修改后再次進(jìn)行編譯,編譯給出出錯(cuò)信息:Undefined symbol'c',指出變量c沒(méi)有定義。所以說(shuō)明語(yǔ)句應(yīng)寫(xiě)成int i,c=0;。因?yàn)楹瘮?shù)用c進(jìn)行累加,它應(yīng)當(dāng)先賦初值0,
(6)進(jìn)行了以上的修改后,編譯已無(wú)錯(cuò)誤,運(yùn)行程序得到正確的結(jié)果。
例如,n的值為8時(shí),輸入28.3、41.5、19.0、89.5、55.8、74.2、22.4、68.9,所得平均值為49.949997;在平均值以上(含平均值)的實(shí)數(shù)的個(gè)數(shù)為4。
請(qǐng)改正函數(shù)fun中的錯(cuò)誤,使它能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
試題源程序如下:
#include "stdio.h"
int fun(float x[],int n)
/**********found**********/
int i;
/**********found**********/
float xn=0.0;
for(i=0;i<n;i++)
/**********found**********/
xn=xn+x[j]/n;
printf("ave=%f\n",xn);
for(i=0;i<n;i++)
/**********found**********/
if(x[i]=>xn)c++;
return c;
}
main()
{ float x[20]={28.3,41.5,19.0,89.5,55.8,74.2,22.4,68.9};
printf("The number over average value:%d\n",fun(x,8));
}分析:(1)當(dāng)對(duì)以上程序進(jìn)行編譯時(shí),給出的第一個(gè)出錯(cuò)信息是:Declaration syntax error,指出在說(shuō)明語(yǔ)句int i;中有語(yǔ)法錯(cuò),仔細(xì)觀察,可以發(fā)現(xiàn)在說(shuō)明語(yǔ)句前卻少了函數(shù)體開(kāi)始的左花括號(hào),應(yīng)當(dāng)添加左花括號(hào)。
(2)修改后進(jìn)行編譯,在第一個(gè)for循環(huán)體處給出一個(gè)警告出錯(cuò)信息:Possible use of'xn'beforedefintion,提示xn有確定的值之前使用了它。此處,變量xn用于存放累加和,xn出現(xiàn)在賦值號(hào)的右邊,在第一次累加時(shí)它應(yīng)當(dāng)有初值,向上尋找,沒(méi)有發(fā)現(xiàn)給它賦過(guò)初值,因此應(yīng)當(dāng)在定義語(yǔ)句中給它賦初值0。float xn;改成float xn=0.0;
(3)修改后再次進(jìn)行編譯,編譯提示if語(yǔ)句中的關(guān)系表達(dá)式有語(yǔ)法錯(cuò),出錯(cuò)信息是:Expressionsyntax;查看關(guān)系表達(dá)式,可發(fā)現(xiàn)關(guān)系運(yùn)算符"=>"寫(xiě)錯(cuò),應(yīng)該是">=",應(yīng)進(jìn)行修正。
(4)修改后再次進(jìn)行編譯,編譯指出在c++;處有錯(cuò),出錯(cuò)信息是:Undefined symbol'c',指出符號(hào)'c'沒(méi)有經(jīng)過(guò)定義;此處變量c用以統(tǒng)計(jì)數(shù)組中高于、等于平均值的實(shí)數(shù)的個(gè)數(shù),查看函數(shù)開(kāi)頭處的定義語(yǔ)句,未曾對(duì)c進(jìn)行過(guò)定義,因此應(yīng)該在int語(yǔ)句中添加。
(5)修改后再次進(jìn)行編譯,編譯給出出錯(cuò)信息:Undefined symbol'c',指出變量c沒(méi)有定義。所以說(shuō)明語(yǔ)句應(yīng)寫(xiě)成int i,c=0;。因?yàn)楹瘮?shù)用c進(jìn)行累加,它應(yīng)當(dāng)先賦初值0,
(6)進(jìn)行了以上的修改后,編譯已無(wú)錯(cuò)誤,運(yùn)行程序得到正確的結(jié)果。