自考“高級語言程序設計”習題答案詳解(37)

字號:

6.4 程序設計題
    1.編一個名為root的函數(shù),求方程ax*x + bx + c=0的b*b-4ac,并作為函數(shù)的返回值。其中的a、b、c作為函數(shù)的形式參數(shù)。
    「解」該函數(shù)應設3個形參,分別表示一元二次方程的三個系數(shù)。函數(shù)按公式求出結果返回即可:
    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整除)
    用邏輯表達式可描述如下:
    (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單精度實型,root單精度實型數(shù)組名。
    功能:計算ax*x +bx+c=0的兩個實根(設b*b-4ac> 0)存入數(shù)組root[2]中。
    「解」函數(shù)根據(jù)形參。a,b,c的值,首先計算d=b*b-4*a*c.考慮到實數(shù)運算時的計算誤差,兩個幾乎相等的數(shù)相減有效位數(shù)也幾乎全部丟失的情況,應先求出絕對值大的根,然后利用報與系數(shù)之間的關系,再求絕對值小的根。函數(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) { /*有兩個實根,先求絕對值大的根*/
    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ù)組轉置后存入s2數(shù)組中。
    「解」為實現(xiàn)問題要求,可用兩重循環(huán),按行按列的順序遍歷數(shù)組s1的元素,將它們分別復制到數(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];
    }