6.4 程序設(shè)計(jì)題
1.編一個名為root的函數(shù),求方程ax*x + bx + c=0的b*b-4ac,并作為函數(shù)的返回值。其中的a、b、c作為函數(shù)的形式參數(shù)。
「解」該函數(shù)應(yīng)設(shè)3個形參,分別表示一元二次方程的三個系數(shù)。函數(shù)按公式求出結(jié)果返回即可:
double root(double a,double b,double c)
{ return b*b+4.0*a*c;
}
2.編一個函數(shù),若參數(shù)y為閏年,則返回1;否則返回0.
「解」由每四年一個閏年,但每100年少一個閏年,每400年又增加一個閏年的約定。記年份為y,則y年是閏年的條件是:
(y能被4整除,但不能被100整除)或(y能被400整除)
用邏輯表達(dá)式可描述如下:
(y%4==0 y0) ||y@0==0
寫成函數(shù)為:
int isLeap(int y)
{ return( y% 4==0 y% 100) || y@0== 0;
}
3.編一個無返回值,名為root2的函數(shù),要求如下:
形式參數(shù): a,b,c單精度實(shí)型,root單精度實(shí)型數(shù)組名。
功能:計(jì)算ax*x +bx+c=0的兩個實(shí)根(設(shè)b*b-4ac 0)存入數(shù)組root[2]中。
「解」函數(shù)根據(jù)形參。a,b,c的值,首先計(jì)算d=b*b-4*a*c.考慮到實(shí)數(shù)運(yùn)算時的計(jì)算誤差,兩個幾乎相等的數(shù)相減有效位數(shù)也幾乎全部丟失的情況,應(yīng)先求出絕對值大的根,然后利用報(bào)與系數(shù)之間的關(guān)系,再求絕對值小的根。函數(shù)定義如下:
void root2( float a,float b,float c, float root[])
{ float re,im,d=b*b-4.0*a*c;/*求判別式*/
re=-b/(2.0*);
if(d =0.0) { /*有兩個實(shí)根,先求絕對值大的根*/
im=(float)sqrt((double)d)/(2.0*a) ;
root[0] =re+(b 0.0? im:-im);
root[1]=c/(a*root[0]);
}
}
4.編一個無返回值,名為trus的函數(shù),要求如下:
形式參數(shù):數(shù)組s1[2][3]和s2[3][2] 是整型數(shù)組。
功能:將s1數(shù)組轉(zhuǎn)置后存入s2數(shù)組中。
「解」為實(shí)現(xiàn)問題要求,可用兩重循環(huán),按行按列的順序遍歷數(shù)組s1的元素,將它們分別復(fù)制到數(shù)組s2的對位位置即可。
void trus(int sl[][3], int s2[][2])
{ int i,j ;
for(i=0; i 2; i++)
for(j= 0;j 3; j++)
s2[j] =s1[j];
}