《演算法筆記》2.3小節
接上....前面這幾部分做的有點趕...變數名起的有點隨意QAQ...哪天有空回爐重造一下
問題 A: 例題4-1 一元二次方程求根
題目描述
求一元二次方程ax2+bx+c=0的根,三個係數a, b, c由鍵盤輸入,且a不能為0,但不保證b2-4ac>0。
程式中所涉及的變數均為double型別。
輸入
以空格分隔的一元二次方程的三個係數,雙精度double型別
輸出
分行輸出兩個根如下(注意末尾的換行):
r1=第一個根
r2=第二個根
結果輸出時,寬度佔7位,其中小數部分2位。
如果方程無實根,輸出一行如下資訊(注意末尾的換行):
No real roots!
樣例輸入
1 2 3
樣例輸出
No real roots!
#include<iostream> #include<cmath> #include <iomanip> using namespace std; int main() { double a,b,c,r1,r2; cin>>a>>b>>c; r1=(-b+sqrt(b*b-4*a*c))/(2*a); r2=(-b-sqrt(b*b-4*a*c))/(2*a); if(b*b-4*a*c>=0) { cout<<"r1="<<setw(7)<<setiosflags(ios::fixed)<<setprecision(2)<<r1 <<endl<<"r2="<<setw(7)<<setiosflags(ios::fixed)<<setprecision(2)<<r2; } else cout<<"No real roots!"<<endl; return 0; }
問題 B: 例題4-2 比較交換實數值
題目描述
從鍵盤輸入2個實數,按照代數值由小到大的順序輸出這兩個數。
輸入
用空格分隔的兩個實數。
輸出
從小到大輸出這兩個實數,中間以空格來分隔,小數在前,大數在後。
小數點後保留2位小數。
末尾輸出換行符。
樣例輸入
3.6 -2.3
樣例輸出
-2.30 3.60
#include<iostream> #include <iomanip> using namespace std; int main() { double a,b,min,max; cin>>a>>b; if(a>b) { max=a; min=b; } else { max=b; min=a; } cout<<setiosflags(ios::fixed)<<setprecision(2)<<min<<" "<< setiosflags(ios::fixed)<<setprecision(2)<<max<<endl; return 0; }
問題 C: 例題4-3 比較交換3個實數值,並按序輸出
題目描述
從鍵盤輸入3個實數a, b, c,通過比較交換,將最小值儲存在變數a中,最大值儲存在變數c中,中間值儲存在變數b中,並按照從小到大的順序輸出這三個數a, b, c。
末尾輸出換行。
輸入
輸入以空格分隔的三個實數
輸出
按照從小到大的順序輸出這三個實數,中間以空格分隔,最小值在前,最大值在後。小數點後保留2位小數。
注意末尾的換行。
樣例輸入
3 7 1
樣例輸出
1.00 3.00 7.00
#include<iostream>
#include <iomanip>
using namespace std;
int main()
{
double a,b,c,temp;
cin>>a>>b>>c;
if(a>b)
{
temp=a;
a=b;
b=temp;
}
if(a>c)
{
temp=a;
a=c;
c=temp;
}
if(b>c)
{
temp=b;
b=c;
c=temp;
}
cout<<setiosflags(ios::fixed)<<setprecision(2)<<a<<" "<<
setiosflags(ios::fixed)<<setprecision(2)<<b<<" "<<
setiosflags(ios::fixed)<<setprecision(2)<<c<<endl;
return 0;
}
問題 D: 習題4-4 三個整數求最大值
題目描述
有3個整數a, b, c,由鍵盤輸入,輸出其中最大的數。
輸入
以空格分割的三個整數。
輸出
三個數中的最大值,末尾換行。
樣例輸入
1 3 2
樣例輸出
3
#include<iostream>
#include <iomanip>
using namespace std;
int main()
{
int a,b,c,temp;
cin>>a>>b>>c;
if(a>b)
{
temp=a;
a=b;
b=temp;
}
if(a>c)
{
temp=a;
a=c;
c=temp;
}
if(b>c)
{
temp=b;
b=c;
c=temp;
}
cout<<c<<endl;
return 0;
}
直接複製上一題的程式碼...⊙﹏⊙‖∣
問題 E: 習題4-10-1 獎金計算
題目描述
某企業發放的獎金根據利潤提成。利潤I低於或等於100000時,獎金可提10%;利潤高於100000元,低於200000元(100000<I<=200000)時,低於100000元的部分仍按10%提成,高於100000元的部分提成比例為7.5%;200000<I<=400000時,低於200000元的部分仍按上述方法提成(下同),高於200000元的部分按5%提成;400000<I<=600000元時,高於400000元的部分按3%提成;600000<I<=1000000時,高於600000元的部分按1.5%提成;I>1000000元時,超過1000000元的部分按1%提成。
從鍵盤輸出當月利潤I,求應發獎金數,獎金精確到分。
要求用if語句實現。
輸入
企業利潤,小數,雙精度double型別
輸出
應發獎金數,保留2位小數,末尾換行。
樣例輸入
1050
樣例輸出
105.00
#include<iostream>
#include <iomanip>
using namespace std;
int main()
{
double l,a=0;
cin>>l;
if(l<=100000)
{
a+=l*0.1;
}
else if(l>100000&&l<=200000)
{
a+=10000+(l-100000)*0.075;
}
else if(l>200000&&l<=400000)
{
a+=17500+(l-200000)*0.05;
}
else if(l>400000&&l<=600000)
{
a+=27500+(l-400000)*0.03;
}
else if(l>600000&&l<=1000000)
{
a+=33500+(l-600000)*0.015;
}
else
{
a+=39500+(l-1000000)*0.01;
}
cout<<setiosflags(ios::fixed)<<setprecision(2)<<a<<endl;
return 0;
}
眼睛都花了..以前的噩夢..現在也是