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