C語言程序設計100例之(2):一元二次方程

例2   一元二次方程

【題目描述】編程

輸入係數a、b和c,求方程ax2+bx+c=0的根。spa

【輸入格式】blog

輸入數據有多組。每組數據包括三個係數a,b,c。當a=0時,輸入數據結束。io

【輸出格式】float

輸出方程的根,格式參見輸出樣例,保留到小數點後2位。程序

【輸入樣例】im

1 2 1數據

1.0 -4.0 3.0margin

1.5 2.0 1.5img

0 0 0

【輸出樣例】

x1=x2=-1.00

x1=3.00,x2=1.00

x1=-0.67+0.75i,x2=-0.67-0.75i

        (1)編程思路。

        根據輸入的係數a,能夠分爲a不等於0和a等於0兩種狀況。

        當a==0時,結束輸入計算。

        程序能夠寫成if的嵌套結構。

        (2)源程序。

#include <stdio.h>

#include <math.h>

int main()

{

    double a,b,c,dlt,real,imag,x1,x2;

    while (1)

    {

        scanf("%lf%lf%lf",&a,&b,&c);

        if (a==0)  break;

              dlt=b*b-4*a*c;

              if (dlt>0)

              {

                  x1=(-b+sqrt(dlt))/(2*a);

                  x2=(-b-sqrt(dlt))/(2*a);

            printf("x1=%.2f,x2=%.2f\n",x1,x2);

              }

        else if (dlt==0)

              {

                     x1=x2=(-b)/(2*a);

                     printf("x1=x2=%.2f\n",x1);

              }

        else

              {

                  real=(-b)/(2*a);

                  imag=sqrt(-dlt)/(2*a);

            printf("x1=%.2f+%.2fi,x2=%.2f-%.2fi\n",real,imag,real,imag);

              }

       }

    return 0;

}

 

習題2

2-1  三角形面積

【題目描述】

任意輸入三條邊(a,b,c實型),若能構成三角形,則計算並輸出其面積,不然輸出標誌「No Triangle!」。

三角形面積計算公式:

       

 【輸入格式】

輸入數據有多組。每組數據包括三個數a,b,c,表明三角形的三個邊長。當a=0時,輸入數據結束。

【輸出格式】

輸出三角形的面積,保留到小數點後2位。或者No Triangle!信息,若給定的三個邊長值不能構成一個三角形。

【輸入樣例】

3 4 5

6.0 6.0 6.0

1 1 3

0 0 0

【輸出樣例】

6.00

15.59

No Triangle!

        (1)編程思路。

輸入的a、b、c三個數,只有當a+b>c、a+c>b和b+c>a同時知足時,才能構成一個三角形。所以,用選擇結構

if (a+b>c && a+c>b && b+c>a)

      {   計算三角形面積並輸出; }

      else

      {   輸出不能構成三角形的提示信息;  }

      (2)源程序。

#include <stdio.h>

#include <math.h>

int main()

{

    float a,b,c,t,s;

    while (1)

    {

        scanf("%f%f%f",&a,&b,&c);

        if (a==0) break;

        if (a+b>c && a+c>b && b+c>a)

        {

           t=(a+b+c)/2.0;

           s=sqrt(t*(t-a)*(t-b)*(t-c));

           printf("%.2f\n",s);

        }

        else

           printf("No Triangle!\n");

       }

    return 0;

}

2-2  小玉家的電費

        本題選自洛谷題庫 (https://www.luogu.org/problem/P1422)。

【題目描述】

夏天到了,各家各戶的用電量都增長了許多,相應的電費也交的更多了。小玉家今天收到了一份電費通知單。小玉看到上面寫:據閩價電[2006]27號規定,月用電量在150千瓦時及如下部分按每千瓦時0.4463元執行,月用電量在151~400千瓦時的部分按每千瓦時0.4663元執行,月用電量在401千瓦時及以上部分按每千瓦時0.5663元執行;小玉想本身驗證一下,電費通知單上應交電費的數目究竟是否正確呢。請編寫一個程序,已知用電總計,根據電價規定,計算出應交的電費應該是多少。

【輸入格式】

輸入一個整數,表示用電總計(單位以千瓦時計),不超過10000。

【輸出格式】

輸出一個數,保留到小數點後1位(單位以元計,保留到小數點後1位)。

【輸入樣例】

267

【輸出樣例】

121.5

        (1)編程思路。

        根據月用電量x的狀況,其計費規則分爲三個梯度。

       在第一梯度(x<=150),電費y = 第一梯度單位電費*用電量=0.4463*x;

        在第二梯度(150<x<=400),電費y=第二梯度部分用電*第二梯度部分單位電費+在第一梯度用電*第一梯度單位電費 =(x-150)*0.4663+150*0.4463。

        在第三梯度(x>400),電費y=第三梯度部分用電*第三梯度部分單位電費+第二梯度部分用電*第二梯度部分單位電費+在第一梯度用電*第一梯度單位電費 =(x-400)*0.5663 +250*0.4663+150*0.4463。

        一個簡單的多分支結構便可解決。

        (2)源程序。

#include  <stdio.h>

int main()

{

    int x;

       double y;

       scanf("%d",&x);

       if (x<=150) y=0.4463*x;

       else if (x<=400) y=150*0.4463+(x-150)*0.4663;

       else y=150*0.4463+250*0.4663+(x-400)*0.5663;

       printf("%.1lf\n",y);

       return 0;

}

 

2-3  P1909 買鉛筆

         本題選自洛谷題庫 (https://www.luogu.org/problem/P1909)。

【題目描述】

P老師須要去商店買n支鉛筆做爲小朋友們參加NOIP的禮物。她發現商店一共有 3種包裝的鉛筆,不一樣包裝內的鉛筆數量有可能不一樣,價格也有可能不一樣。爲了公平起 見,P老師決定只買同一種包裝的鉛筆。

商店不容許將鉛筆的包裝拆開,所以P老師可能須要購買超過n支鉛筆纔夠給小朋友們發禮物。

如今P老師想知道,在商店每種包裝的數量都足夠的狀況下,要買夠至少n支鉛筆最少須要花費多少錢。

【輸入格式】

第一行包含一個正整數n,表示須要的鉛筆數量。

接下來三行,每行用2個正整數描述一種包裝的鉛筆:其中第1個整數表示這種包裝內鉛筆的數量,第2個整數表示這種包裝的價格。

保證全部的7個數都是不超過10000的正整數。

【輸出格式】

1個整數,表示P老師最少須要花費的錢。

【輸入樣例】

57

2 2

50 30

30 27

【輸出樣例】

54

           (1)編程思路。

         設P老師須要購買的鉛筆數爲n,某種包裝內鉛筆的數量爲a,這種包裝的價格爲b。P老師須要購買某種包裝鉛筆的包裝數爲c。

         顯然,若n能整除a,則c=n/a;不然c=n/a+1。

         求三種包裝的c*b的最小值便可。

  (2)源程序。

#include <stdio.h>

int main()

{

    int n,a,b,c,i,min;

    scanf("%d",&n);

    scanf("%d%d",&a,&b);

       if (n%a==0) c=n/a;

       else c=n/a+1;

    min=c*b;

       for (i=1;i<=2;i++)

       {

           scanf("%d%d",&a,&b);

         if (n%a==0) c=n/a;

           else c=n/a+1;

        if (min>c*b) min=c*b;

       }

       printf("%d\n",min);

       return 0;

}

相關文章
相關標籤/搜索