首页
/
每日頭條
/
生活
/
c語言編程常用10個知識點
c語言編程常用10個知識點
更新时间:2026-01-02 00:18:04

上一節介紹了 C 語言的 “遞歸函數”,給出了求 n! 的程序并分析了它的執行流程。其實,每次遞歸調用都是在重複做同樣一件事,都是計算 n x (n-1)!。當然了,雖說是“同樣一件事”,還是略有不同的(n的值每次都不通),稱呼其為“叠代”更恰當一點。

c語言編程常用10個知識點(c語言入門10這件事)1

計算機特别擅長處理重複叠代的工作,這也是我們人類使用計算機的原因之一,因為人類最不擅長,也不喜歡重複叠代的工作。有了計算機,程序員通過編程告訴計算機怎樣做就可以了。

C 語言中的 while 循環語句

雖然叠代用遞歸可以解決,但是 C 語言提供的循環語句更符合我們人類的使用習慣,用起來更習慣,我們先來看看 C 語言中的 while 語句。它的語法為:

while(條件表達式){ 語句; }

c語言編程常用10個知識點(c語言入門10這件事)2

到達 while 語句時,程序會判斷“條件表達式”的真假,若假則跳過 while 語句塊。若真,則執行 while 語句塊裡的内容,到達語句塊末尾時,程序會回到“條件表達式”處,再次判斷真假。好了,現在知道了 while 循環語句的用法,我們來用它計算 n 的階乘,代碼可以如下寫:

int factorial(int n) { int result = 1; while (n > 0) { result = result * n; n = n - 1; } return result; }

同樣的,我們以 factorial(3) 為例,說說它的執行流程。程序第一次到達 while 處,n=3,顯然大于 0,于是 result=1 x 3,接着 n=2;回到 while 處,n 依然大于 0,于是 result = 1 x 3 x 2;接着 n=1,回到 while 處,n 依然大于 0,于是 result = 1 x 3 x 2 x 1,接着 n = 0;回到 while 處,0 不大于 0,于是跳過 while 語句,factorial 函數返回 result = 6。

很多程序員習慣稱呼 n 為循環變量,因為它控制着循環體是循環還是結束。

c語言編程常用10個知識點(c語言入門10這件事)3

C 語言的循環和遞歸

上一節,我們提到“遞歸和循環是等價的”,這裡就是一個例子。但是遞歸和循環解決問題的思路不一樣,用遞歸解決這個問題靠的是遞推關系n!=n·(n-1)!,用循環解決這個問題則更像是把這個公式展開了:n!=n·(n-1)·(n-2)·…·3·2·1。把公式展開了理解會更直觀一些,所以有些時候循環程序比遞歸程序更容易理解。

在整個遞歸調用過程中,雖然分配和釋放了很多變量,但是所有的變量都隻在初始化時賦值,沒有任何變量的值發生過改變,而上面的循環程序則是通過對n和result這兩個變量多次賦值來達到同樣目的的。

使用 while 的注意事項

既然“遞歸和循環是等價的”,而遞歸函數如果寫的不恰當就會造成無限遞歸,導緻程序最後崩潰,那對應的,while 循環語句如果寫的不恰當,也會造成無限循環,程序員們常常稱其為“死循環”。造成 while 語句死循環的原因很簡單,就是 while 的條件表達式不可能為假,程序跳不出 while 循環了。

c語言編程常用10個知識點(c語言入門10這件事)4

上面的例子中,正整數 n 不斷減 1,最後 n 必定會等于 0 的,n>0 必定有為假的時刻,所以不會導緻死循環。如果不小心把 n = n-1 這條語句漏掉了,那程序永遠都不會跳出 while 循環體了。不過與無限遞歸不同,程序一般不會因為死循環崩潰。所以,在使用 while 循環語句之前,要确保 while 的條件表達式有機會為假,除非,你故意希望有一個死循環。

不過,有時候死循環并不是那麼一目了然的,例如下面這個著名的 3x 1 問題:

while (n != 1) { if (n % 2 == 0) { n = n / 2; } else { n = n * 3 1; } }

循環體所做的事情是:如果n是偶數,就把n除以2,如果n是奇數,就把n乘3加1。一般的循環變量要麼遞增要麼遞減,可是這個例子中的n一會兒變大一會兒變小,最終會不會變成1呢?可以找個數試試,例如一開始n等于7,每次循環後n的值依次是:7、22、11、34、17、52、26、13、40、20、10、5、16、8、4、2、1。最後n确實等于1了。讀者可以再試幾個數都是如此,但無論試多少個數也不能代替證明,目前世界上還無人能證明。

c語言編程常用10個知識點(c語言入門10這件事)5

許多世界難題都是這樣的:描述無比簡單,連小學生都能看懂,但證明卻無比困難。

歡迎在評論區一起讨論,質疑。文章都是手打原創,每天最淺顯的介紹C語言,喜歡我的文章就關注一波吧,可以看到最新更新和之前的文章哦。

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
貼金家具保養
貼金家具保養
對于金箔,隻能談及護理,它不像地闆、瓷磚或其它的給予打蠟進行保養工作,所以隻能在日常生活中盡量減少磕碰或間接的人為破壞。貼金部分是由厚度為0.1微米左右的24K金和一種特殊的5種成份合成的溶液,經人工塗描于實木雕刻而成的飾花上,整個過程需6小時,貼好金箔48小時後方可達到滿意的硬度,其貼金表層平整光...
2026-01-02
室内套裝門的保養小常識
室内套裝門的保養小常識
套裝門是現代家居裝飾中的一種新型潮流裝飾室内門,其相對于其他的室内門而言最突出的優勢特點便是其一般都是将門套、門框、門扇等等各個部件進行成套的銷售,這樣給消費者們也帶來了相當方便的安裝。然而對于室内的套裝門産品,使用較頻繁,也容易被損壞,消費者在使用過程中如何對其進行保養?平時若能多動一些腦筋,家居...
2026-01-02
國考一般多少進面試?
國考一般多少進面試?
國考每一年的考試情況不同,分數線也不同。近幾年一般115分以上可以進入面試,但一些競争較為激烈的部門需要150分以上才能進面試。國考全稱國家公務員考試,指中央、國家機關公務員考試,是國家部、委、署、總局招考在中央國家機關的工作人員的一種方式。國家公務員考試招考條件相對比較苛刻、嚴格,一般均要求全日制...
2026-01-02
開關、插座、燈罩清潔
開關、插座、燈罩清潔
電燈開關上留下手印痕迹,用橡皮一擦,即可幹淨如新。插座上如果沾染了污垢,可先拔下電源,然後用軟布蘸少許去污粉擦拭。清潔帶有皺紋的布制燈罩時,用一種毛頭較軟的牙刷做工具,不易傷燈罩。清潔用丙烯制的燈罩,可抹上洗滌劑,再用水洗去洗滌劑,然後擦幹。普通燈泡用鹽水擦拭即可。
2026-01-02
榆木家具保養七法
榆木家具保養七法
榆木質地硬朗、紋理直而粗犷而豪爽和質樸天然色澤、無不與古人所推崇的做人理念相契合,所以,從古到今榆木倍受歡迎,上至達官貴人、文人雅士、下至黎民百姓制作家具的首選。【1】保持溫度濕度恒定與硬木家具相比,榆木家具的密度低,因此幹縮濕漲的幅度還要大。另外,現在的榆木家具大多不上漆,隻燙蠟。因此,榆木家具相...
2026-01-02
Copyright 2023-2026 - www.tftnews.com All Rights Reserved