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


例2   一元二次方程

【題目描述】

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

【輸入格式】

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

【輸出格式】

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

【輸入樣例】

1 2 1

1.0 -4.0 3.0

1.5 2.0 1.5

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  買鉛筆

         本題選自洛谷題庫 (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;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM