c语言输出三个比值为,请问如何用C语言表示数的比值
想表示最大公約數與最小公倍數之比為1:120,大概是在判斷語句里,用“最小公倍數/最大公約數==120”就行了,如果符合這個條件就跳出。
代碼:
#include
//求最大公約數
int GCD(int m,int n)
{
int c,temp=0;
if(m {temp=m;m=n;n=temp;}
for(c=m%n;c!=0;m=n,n=c,c=m%n);
return n;
}
//求最小公倍數
int LCM(int m,int n)
{
int k=m*n;
int c,temp=0;
if(m {temp=m;m=n;n=temp;}
for(c=m%n;c!=0;m=n,n=c,c=m%n);
return k/n;
}
void main()
{
int a,b,m,n;
for(a=1;a<=333;a )
{
b=667-a;
m=GCD(a,b);
n=LCM(a,b);
if(n==120*m)
{
break;
}
}
printf("a=%d
",a);
printf("b=%d
",b);
}
結果:
a=115
b=552
(最大公約數m=23,最小公倍數n=2760)
===================
你說的三個條件具體是哪三個?
其實主要來說,可以構成式子的只有“兩個數的合為667”和“最大公約數:最小公倍數=1:120”這兩個。
這樣的題目,最直接的思路就是用循環去一個一個試數,然后符合一定條件就結束循環,此時循環到的那個數就是你想要的。
但編程序又不能用多元的方程。所以,按其中一個數去循環(按a循環),則在循環過程中這個數a相當于是一個已知的具體數值。
另一個數b用667-a表示的話,那b的值也可以轉化為一個具體的數。通過這兩個數值能求出他們的最大公約數m和最小公倍數n,這就取得了第二個等式所需要的所有元素的具體值。就可以判斷這個等式是否成立了。當等式成立,跳出循環,此時的a、b就是你要的解。
其中要注意的:
1、雖然按a、b的和為667來看,a這個數的取值范圍是1到666(667和0的組合求最大公約數和最小公倍數沒有意義),但是循環的上線沒必要用666,用它的一半333就行了。
這個如果不明白的話請留言吧,我再解釋。
2、最大公約數和最小公倍數的比值正好是1比一個整數值,寫式子的時候沒有必要按題目敘述的順序寫m/n==1/120,因為這樣出現了實型數,增加誤差。可以調整順序寫成等價的n/m==120,嗯對了,寫成n==m*120更好!減小誤差。
(我把程序里的條件式也改過來了)
別的有問題再留言吧
(8月21日 17:24)
=====================
不要總想這兩個條件之間的聯系,其實這兩個條件是各司其職呀!
667的作用有兩點。
一個是告訴你了這兩個數數值上的直接關系;另一個是告訴你了這兩個數的取值范圍。在程序上,第一點表現在知道了a的值,就可以用667-a求出b;第二點表現在for循環的上下限上。
而1:120那個比值是用來控制程序循環到什么時候該出結果了。
在程序上它表現在if后面括號里的條件式上。
但怎么很好的應用這兩個條件一定要在理解程序設計的結構的前提下。
像我前面說的,“這樣的題目,最直接的思路就是用循環去一個一個試數,然后符合一定條件就結束循環,此時循環到的那個數就是你想要的。
”
因為是試數的思路,一定要有循環的思想!但是在它的取值范圍內從頭循環到尾的過程中,那個值是你想要的呢?怎么去判斷呢?就要有一個條件來充當這個裁判。在你的題目中,最大公約數跟最小公倍數的比就是這個裁判。
所以第一次循環里用a=1、b=666算出的最大公約數和最小公倍數,一比,不是1:120不要緊,咱們接著循環;第二次a=2、b=665,還是不滿足第二個條件也不要緊,再循環……直到a++加到115了,這時b=667-115=552,用這兩個數算出的最大公約數m和最小公倍數n的比恰巧為1:120,那么好了,這個a和b的值就是我們想要的數。
每一次循環都肯定滿足第一個條件,找他們當中到底哪一個能滿足第二個條件也是要用循環的目的啊~
就好比上課的時候老師點名一樣。比如已知你是1年級2班的一名學生(相當于第一個條件的第二點),又已知你的名字叫“星空”(相當于第二個條件)。
要求,當點到你的名字的時候你就喊“到”。
這個過程就是,老師選擇了用1年級2班的名單(for取值范圍)。從第一個人開始點名(執行for循環的過程)。第一個點的是“云淡風輕”,你一看,不是你的名,跳過(if語句的條件式為假的情況)。
第二個點的“蕩漾心情”,你一看,又不是你的名,又跳過。終于在點到第10個人的時候點到了“星空”,你一看,終于到自己了(if語句的條件式為真了),你喊了“到”(輸出語句)。
不知道這樣講,這兩個條件的聯系是否清楚一些?
還有,你又提到“怎樣來表達其最大公約數與最小公倍數之比”的問題。
知道a和b的值了,可以用函數求出他們的最大公約數和最小公倍數吧。我用m表示最大公約數,n表示最小公倍數。那么,用數學符號表示,那個比值的恒等式應該是m:n=1:120。作為if語句的條件式(一定要明確這個等式要用于條件句哦~),c語言的語句是m/n==1/120。
但是為了避免誤差,我們通常要把這個式子變形為乘法式(原理是純數學問題,等式兩邊同乘上n*120),則這個等式變為m*120==n。這種用==連接的判斷語句,==兩頭的表達式誰在左誰在右都可以。所以寫成if(m*120==n)或者if(n==m*120),放在for循環里面,當等式成立,走if這個分支的時候,那就是該喊“到”的時候了。
另外,你寫的你在編這個程序的時候,“另一個數為333-a”,我想大概是筆誤吧?667-a才符合條件的。
全部
總結
以上是生活随笔為你收集整理的c语言输出三个比值为,请问如何用C语言表示数的比值的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大神进来一下看看丶
- 下一篇: 单片机c语言中的循环语句,单片机c语言教