A. c語言循環結構-迭代
1.迭代是重復反饋過程的活動,其目的通常是為了逼近所需目標或結果。每一次對過程的重復稱為一次「迭代」,而每一次迭代得到的結果會作為下一次迭代的初始值。
重復執行一系列運算步驟,從前面的量依次求出後面的量的過程。此過程的每一次結果,都是由對前一次所得結果施行相同的運算步驟得到的。例如利用迭代法*求某一數學問題的解。
對計算機特定程序中需要反復執行的子程序*(一組指令),進行一次重復,即重復執行程序中的循環,直到滿足某條件為止,亦稱為迭代。
2.基本演算法
有些國外的教材,如《C++ Primer》第四版的中文版,會把iterative翻譯成迭代。
在java中Iterative 僅用於遍歷集合,本身並不提供盛裝對象的能力。如果需要創建Iterative對象,則必須有一個被迭代的集合。沒有集合的Iterative彷彿無本之木,沒有存在的價值。
iterative是反復的意思,所以,有時候,迭代也會指循環執行,反復執行的意思。
利用迭代演算法解決問題,需要做好以下三個方面的工作:
確定變數
在可以用迭代演算法解決的問題中,至少存在一個直接或間接地不斷由舊值遞推出新值的變數,這個變數就是迭代變數。
建立關系式
所謂迭代關系式,指如何從變數的前一個值推出其下一個值的公式(或關系)。迭代關系式的建立是解決迭代問題的關鍵,通常可以使用遞推或倒推的方法來完成。
過程式控制制
在什麼時候結束迭代過程?這是編寫迭代程序必須考慮的問題。不能讓迭代過程無休止地重復執行下去。迭代過程的控制通常可分為兩種情況:一種是所需的迭代次數是個確定的值,可以計算出來;另一種是所需的迭代次數無法確定。對於前一種情況,可以構建一個固定次數的循環來實現對迭代過程的控制;對於後一種情況,需要進一步分析出用來結束迭代過程的條件。
例1 : Fibonacci Sequence(斐波那契數列)
即這樣一個數列:0、1、1、2、3、5、8、13......,在數學上該數列定義為:
F(0)=0,F(1)=1; F(n) = F(n-1)+F(n-2) (n≥2,n∈N*)。
一般該數列可以遞歸實現,下面是用C語言 迭代 實現:
intfab(intn)
{if(n<3)
{return1;}
else
{intfirst=1,second=1,temp=0;
for(inti=0;i<n-2;i++)
{temp=first+second;
first=second;
second=temp;}
returntemp;
}
}
例2 :驗證角谷猜想。日本數學家角谷靜夫在研究自然數時發現了一個奇怪現象:對於任意一個自然數
n ,若 n 為偶數,則將其除以 2 ;若 n 為奇數,則將其乘以 3 ,然後再加
1。如此經過有限次運算後,總可以得到自然數1。人們把角谷靜夫的這一發現叫做「角谷猜想」。
要求:編寫一個程序,由鍵盤輸入一個自然數n ,把 n 經過有限次運算後,最終變成自然數 1 的全過程列印出來。
分析:定義迭代變數為 n ,按照角谷猜想的內容,可以得到兩種情況下的迭代關系式:當 n 為偶數時, n=n/2 ;當 n 為奇數時, n=n*3+1。用c 語言把它描述出來就是:
以下是引用片段:
if(n%2==0)//如果n是偶數
{
n=n/2;
}
else
{
n=n*3+1;
}
這就是需要計算機重復執行的迭代過程。這個迭代過程需要重復執行多少次,才能使迭代變數n
最終變成自然數1 ,這是我們無法計算出來的。因此,還需進一步確定用來結束迭代過程的條件。仔細分析題目要求,不難看出,對任意給定的一個自然數n
,只要經過有限次運算後,能夠得到自然數 1 ,就已經完成了驗證工作。因此,用來結束迭代過程的條件可以定義為:n=1。參考程序如下:
以下是完整程序:
#include<stdio.h>
intmain()
{
intn;
printf("Pleaseinputn= ");
scanf("%d",&n);
printf("%d ",n);
while(n!=1)
{
if(n%2==0)//如果n是偶數
{
n=n/2;
printf("->/2=%d ",n);
}
else
{
n=n*3+1;
printf("->*3+1=%d ",n);
}
}
}
B. C語言 角谷猜想 要求驗證角谷猜想,從鍵盤上輸入一個自然數n,輸出所有n到1經歷的所有數。
沒用過C語言 用PYTHON給你寫一個 你可以照著改改
num=6
print(num,end='')
while(num!=1):
if(num%2)==0:#偶數
num=num//2
else:#奇數
num=num*3+1
print(num,end='')#63105168421
C. c語言角谷定理求次數
下面的程序先從鍵盤上給我一個整數X。然後如果它是奇數就乘以3+1。否則就除以2。並且同時記錄次數,當X的值變為E的時候,停止循環輸出處理的次數。
#include <stdio.h>
int main()
{ int n=0,x;
scanf("%d",&x);
while(x!=1)
{if(x%2)x=3*x+1;
else x/=2;
n++;
}
printf("%d\n",n);
return 0;
}
D. c語言與角谷猜想
#include<stdio.h>
main()
{int
a,b,count;
printf("請輸入a的值,以便檢驗角谷猜想。\na=");
scanf("%d",&a);
b=a;
while
(a!=1)
{if
(a>1&&a%2==0)
{a=a/2
;printf
("→%d\n",a);}
else
{a=3*a+1;printf("→%d\n",a);}
count++;}printf("%d需經過%d步才得到1.",b,count);}
//如果能夠逆推出,比方說,23的下一步是70,那麼都有哪些數的下一步是70?如此逆推,就能寫成一棵"數論樹".
E. 驗證角谷猜想 c語言
if (count!=0)
printf("\b\n");加個\b退位
F. 角谷猜想,C語言,輸出過程
代碼比較簡單,各語句意義見注釋。。。
#include<stdio.h>
intmain(intargc,char*argv[])
{
inti;/*定義要處理的變數*/
scanf("%d",&i);/*輸入變數值*/
while(i!=1)
{
if(i%2)/*奇數*/
{
printf("%d*3+1=%d ",i,i*3+1);/*按題目要求的格式列印出來*/
i=i*3+1;/*更新變數值*/
}
else/*偶數*/
{
printf("%d/2=%d ",i,i/2);/*按題目要求的格式列印出來*/
i=i/2;/*更新變數值*/
}
}
printf("END ");/*最後列印END*/
return0;
}
另外幾個測試結果圖片:
G. 在C語言中什麼叫做腳骨定理
是「角谷猜想」
也叫冰雹猜想
冰雹猜想 [1] 是指:一個自然數x,如果是奇數就乘以3再加1,如果是偶數就析出偶數因數2ⁿ,這樣經過若干個次數,最終回到1。 [2]
無論這個過程中的數值如何龐大,就像瀑布一樣迅速墜落。而其他的數字即使不是如此,在經過若干次的變換之後也必然會到純偶數:16-8-4-2-1的循環。據日本和美國的數學家攻關研究,在小於7*10^11的所有的自然數,都符合這個規律。