2010年10月11日 星期一

[C++]輸入變數i到s的加總

平常書本都是撰寫輸入1到10的總和

現在改成由使用者自行輸入 起始值與末始值進行加總

【While版本】
#include <iostream>
int main()
{
int sum=0,i,s,st;
std::cout<<"請輸入起始值:"<<std::endl;
std::cin>>i;
std::cout<<"請輸入末始值:"<<std::endl;
std::cin>>s;

st=i;

while(i<=s)
{
sum+=i;
i++;
}
std::cout<<st<<"加到"<<s<<"的總合是:"<<sum<<std::endl;
system("PAUSE");
return 0;

}


【for回圈版本】
#include <iostream>
int main()
{
int sum=0,i,s,st;
std::cout<<"請輸入起始值:"<<std::endl;
std::cin>>i;
std::cout<<"請輸入末始值:"<<std::endl;
std::cin>>s;

st=i;
for(i;i<=s;i++){
sum+=i;
}
std::cout<<st<<"加到"<<s<<"的總合是:"<<sum<<std::endl;
system("PAUSE");
return 0;

}



以上程式是否發現會有bug出現?


當使用者先輸入大值再輸入小值程式就會出現bug

因此我們需加入if判斷式判斷使用者輸入值是先輸入大值還小值

#include <iostream>
int main()
{
int sum=0,i,s,st;
std::cout<<"此程式會將您輸入的值由小加到大"<<std::endl;
std::cout<<"==============================="<<std::endl;

std::cout<<"請輸入起始或末始值:"<<std::endl;
std::cin>>i;

std::cout<<"請輸入末始或起始值:"<<std::endl;
std::cin>>s;

int lower,upper;
if(i<=s){
lower=i;
upper=s;
}else{
upper=i;
lower=s;
}

st=lower;

for(lower;lower<=upper;lower++){
sum+=lower;

}
std::cout<<st<<"加到"<<upper<<"的總合是:"<<sum<<std::endl;
system("PAUSE");
return 0;

}



如果您認為上述程式這樣就結束了

那你就錯了

此程式是有一個bug存在

若使用者打入兩數相等

是否就出現了問題了呢

所以程式需再加入判斷兩數相等的程式

#include <iostream>
int main()
{
int sum=0,i,s,st;
std::cout<<"此程式會將您輸入的值由小加到大"<<std::endl;
std::cout<<"==============================="<<std::endl;

std::cout<<"請輸入起始或末始值:"<<std::endl;
std::cin>>i;

std::cout<<"請輸入末始或起始值:"<<std::endl;
std::cin>>s;

int lower,upper;
if(i==s)
{
std::cout<<i<<"加到"<<i<<"的總合是:0"<<std::endl;
}else
{
if(i<s)
{
lower=i;
upper=s;
}else
{
upper=i;
lower=s;
}

st=lower;
for(lower;lower<=upper;lower++)
{
sum+=lower;
}
std::cout<<st<<"加到"<<upper<<"的總合是:"<<sum<<std::endl;
}
system("PAUSE");
return 0;

}

沒有留言: