例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;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/63297.html
標籤:C
上一篇:#《Essential C++》讀書筆記# 第六章 以template進行編程
下一篇:C學習筆記(2)---各類函式
