C語言靈魂——算法!

程序的靈魂—算法


一個程序應包括:

對數據的描述。在程序中要指定數據的類型和數據的組織形式,即數據結構(data?structure)。

對操作的描述。即操作步驟,也就是算法(algorithm)。

Nikiklaus?Wirth提出的公式:

數據結構+算法=程序

教材認為:

程序=算法+數據結構+程序設計方法+語言工具和環境

這4個方面是一個程序涉及人員所應具備的知識。

本課程的目的是使同學知道怎樣編寫一個C程序,進行編寫程序的初步訓練,因此,只介紹算法的初步知識。

2.1?算法的概念

做任何事情都有一定的步驟。為解決一個問題而采取的方法和步驟,就稱為算法。

計算機算法:計算機能夠執行的算法。

計算機算法可分為兩大類:

數值運算算法:求解數值;

非數值運算算法:事務管理領域。

有喜歡C語言或者想要學習C語言的小伙伴可以加一下我自己的C語言交流群815393895

2.2?簡單算法舉例

【例2.1】求1×2×3×4×5。

最原始方法:

步驟1:先求1×2,得到結果2。

步驟2:將步驟1得到的乘積2乘以3,得到結果6。

步驟3:將6再乘以4,得24。

步驟4:將24再乘以5,得120。

這樣的算法雖然正確,但太繁。

改進的算法:

S1:?使t=1

S2:?使i=2

S3:?使t×i,?乘積仍然放在在變量t中,可表示為t×it

S4:?使i的值+1,即i+1i

S5:?如果i≤5,?返回重新執行步驟S3以及其后的S4和S5;否則,算法結束。

如果計算100!只需將S5:若i≤5改成i≤100即可。

如果該求1×3×5×7×9×11,算法也只需做很少的改動:

S1:?1t

S2:?3i

S3:?t×it

S4:?i+2t

S5:若i≤11,?返回S3,否則,結束。

該算法不僅正確,而且是計算機較好的算法,因為計算機是高速運算的自動機器,實現循環輕而易舉。

思考:若將?S5寫成:S5:若i<11,?返回S3;否則,結束。

【例2.2】有50個學生,要求將他們之中成績在80分以上者打印出來。

如果,n表示學生學號,ni表示第個學生學號;g表示學生成績,gi表示第個學生成績;

則算法可表示如下:

S1:?1i

S2:?如果gi≥80,則打印ni和gi,否則不打印

S3:?i+1i

S4:若i≤50,?返回S2,否則,結束。


【例2.3】判定2000?—?2500年中的每一年是否閏年,將結果輸出。

潤年的條件:

1)?能被4整除,但不能被100整除的年份;

2)?能被100整除,又能被400整除的年份;

設y為被檢測的年份,則算法可表示如下:

S1:?2000y

S2:若y不能被4整除,則輸出y“不是閏年”,然后轉到S6

S3:若y能被4整除,不能被100整除,則輸出y“是閏年”,然后轉到S6

S4:若y能被100整除,又能被400整除,輸出y“是閏年”?否則輸出y“不是閏年”,然后轉到S6

S5:輸出y“不是閏年”。

S6:y+1y

S7:當y≤2500時,?返回S2繼續執行,否則,結束。

【例2.4】求?。

算法可表示如下:

S1:?sigh=1

S2:?sum=1

S3:?deno=2

S4:?sigh=(-1)×sigh

S5:?term=?sigh×(1/deno?)

S6:?term=sum+term

S7:?deno=?deno?+1

S8:若deno≤100,返回S4;否則,結束。


【例2.5】對一個大于或等于3的正整數,判斷它是不是一個素數。

算法可表示如下:

S1:?輸入n的值

S2:?i=2

S3:?n被i除,得余數r

S4:如果r=0,表示n能被i整除,則打印n“不是素數”,算法結束;否則執行S5

S5:?i+1i

S6:如果i≤n-1,返回S3;否則打印n“是素數”;然后算法結束。

改進:

S6:如果i≤?,返回S3;否則打印n“是素數”;然后算法結束。

2.3?算法的特性

有窮性:一個算法應包含有限的操作步驟而不能是無限的。

確定性:算法中每一個步驟應當是確定的,而不能應當是含糊的、模棱兩可的。

有零個或多個輸入。

有一個或多個輸出。

有效性:算法中每一個步驟應當能有效地執行,并得到確定的結果。

對于程序設計人員,必須會設計算法,并根據算法寫出程序。

2.4?怎樣表示一個算法

2.4.1?用自然語言表示算法

除了很簡單的問題,一般不用自然語言表示算法。

2.4.5?用偽代碼表示算法

偽代碼使用介于自然語言和計算機語言之間的文字和符號來描述算法。

2.4.6?用計算機語言表示算法

??我們的任務是用計算機解題,就是用計算機實現算法;

??用計算機語言表示算法必須嚴格遵循所用語言的語法規則。

【例2.20】求1×2×3×4×5用C語言表示。

main()

printf(“%d”,t);

}

【例2.21】求級數的值。

main()

{

int?sigh=1;

floatdeno=2.0,sum=1.0,term;

while(deno

{?sigh=?-sigh;

term=?sigh/?deno;

sum=sum+term;

deno=deno+1;

}

printf(“%f”,sum);

}

2.5?結構化程序設計方法

自頂向下;

逐步細化;

模塊化設計;

結構化編碼。

算法是程序的靈魂,也是C語言的靈魂。C語言是面向過程的編程語言,算法對C語言的作用尤為重要。這是C語言的基礎,小編希望大家在入門的時候,一定要打好基礎,往后的學習才事半功倍。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/531163.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/531163.shtml
英文地址,請注明出處:http://en.pswp.cn/news/531163.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

為什么會有那么多人放棄編程?

為什么許多編程人員最后都放棄了呢?小編幫你理清下原因,主要有以下幾個 為什么這么多人選擇放棄學習編程? 加班加點是家常便飯 在軟件行業不加班的公司不是很多,區別就是加班強度。為什么程序員需要加這么多班,軟件是一…

C語言基礎知識梳理

C語言是面向過程的,而C++是面向對象的 C和C的區別: C是一個結構化語言,它的重點在于算法和數據結構。C程序的設計首要考慮的是如何通過一個過程,對輸入(或環境條件)進行運算處理得到…

很多人大一就開始學習C語言,你真的學到了嗎?

好多人大一就學了C語言,但你有沒有感覺學的不深,不扎實。或者說越學越迷茫,不知道它能做什么 我相信,這可能是很多朋友的問題,其實,這是很多初學者都會踩到的一個坑!C語言本身是一門很簡單的語言…

C語言發展歷史,C語言特點,C語言利于弊,入門須知三招

C語言是面向過程的,而C++是面向對象的 這些是C/C能做的 服務器開發工程師、人工智能、云計算工程師、信息安全(黑客反黑客)、大數據 、數據平臺、嵌入式工程師、流媒體服務器、數據控解、圖像處理、音頻視頻開發工程…

程序員怎么看待C語言?最偉大?最落后?

一,前言 對我來說,C語言應該可以算得上是世界上最偉大的編程語言。全中國口氣最大的程序員,業界稱之為“垠神”,曾經發過文章吐槽過業界各種主流的編程語言(對Java,的Python稍微寬容一些)&…

如何學習C語言?就是這么簡單粗暴!

C語言是面向過程的,而C++是面向對象的。 C和C的區別: C是一個結構化語言,它的重點在于算法和數據結構。C程序的設計首要考慮的是如何通過一個過程,對輸入(或環境條件)進行運算處理…

C/C++對編程的重要性!其他編程語言都是弟弟!

C語言是面向過程的,而C++是面向對象的 C和C的區別: C是一個結構化語言,它的重點在于算法和數據結構。C程序的設計首要考慮的是如何通過一個過程,對輸入(或環境條件)進行運算處理得…

C語言其實不難,只是你沒有找對方法!

C語言是面向過程的,而C++是面向對象的 C和C的區別: C是一個結構化語言,它的重點在于算法和數據結構。C程序的設計首要考慮的是如何通過一個過程,對輸入(或環境條件)進行運算處理得…

想學好C語言?先把基礎打好再說吧!

C語言是面向過程的,而C++是面向對象的 C和C的區別: C是一個結構化語言,它的重點在于算法和數據結構。C程序的設計首要考慮的是如何通過一個過程,對輸入(或環境條件)進行運算處理得…

C語言新手最常見的問題!你在這里跌倒過嗎?

C語言是面向過程的,而C++是面向對象的 C和C的區別: C是一個結構化語言,它的重點在于算法和數據結構。C程序的設計首要考慮的是如何通過一個過程,對輸入(或環境條件)進行運算處理得…

用C語言做出你自己的七夕表白程序!

C語言是面向過程的,而C++是面向對象的 C和C的區別: C是一個結構化語言,它的重點在于算法和數據結構。C程序的設計首要考慮的是如何通過一個過程,對輸入(或環境條件)進行運算處理得…

C語言/C++編程的起源與能力學習

C語言是面向過程的,而C++是面向對象的 C和C的區別: C是一個結構化語言,它的重點在于算法和數據結構。C程序的設計首要考慮的是如何通過一個過程,對輸入(或環境條件)進行運算處理得…

Windows下設置自動關機的命令指示符

(請先看置頂博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 Windows定時操作命令:superR,輸入:??:??shutdown -s ”??“代表時間…

Win7系統轉到Win10系統的裝機方法

Windows 10的版本最好是家庭版。 1.進入PC的BIOS。進入方法與PC品牌有關,可根據對應的品牌查尋進入方法。 2.將Boot List Option 選為UEFI。有些電腦在切換UEFI后即可顯示列表,因此可跳過第三步,反之則繼續第三步的操作。 3.重啟PC&#x…

Ubuntu16.04amp;amp;Windows 10雙系統安裝教程(UEFI模式)

相信來這里的各位,都是想在Windows 10的PC上安裝Linux Ubuntu16.04,來達到雙系統并用的目的。 那么接下來,我就在默認已安裝Windows 10的基礎上介紹如何以UEFI的方式安裝Ubuntu16.04!我的PC是聯想小新潮7000—13。在裝雙系統之前…

利用軟碟通軟件制作Ubuntu16.04系統啟動盤

以下操作均在Windows系統下進行!Windows系統的啟動盤和Linux的啟動盤要分開,即需要兩個U盤來制作和存儲。(似乎無法共存于一個U盤里) (系統盤制作軟件會U盤格式化,所以U盤提前做好備份工作) 1…

Linux Ubuntu16.04界面美化

(請先看置頂博文)本博打開方式,請詳讀_liO_Oil的博客-CSDN博客_怎么把androidstudio卸載干凈 很多人在安裝系統之后可能對其外觀、主題或是桌面壁紙不滿意,本文給大家介紹幾種美化方法和插件! 1.可以將左側的“熱區”…

Linux16.04和Windows 10雙系統下,解決時間不一致問題

裝完雙系統,你可能會發現某一個系統的時間與現在時間不一致(中國相差八個小 時),那么如何解決這個問題呢? 1.將某一個系統的設置時間更新方式設置為“手動”,而不是“從互聯網自動獲取”。 2.進入PC的BIO…

Linux Ubuntu 16.04系統下可用的Windows應用

眾所周知,Linux系統下的生態環境不是很好,很多可以在Windows 10系統下運行的 軟件都不能在Linux下運行,那么接下來為大家推薦部分可以應用的軟件: A.Google-Chrome. 最簡單的方法是到https://www.google.cn/chrome/下載對應的Lin…

基于Vitual Box建立虛擬機,虛擬機系統為Linux Ubuntu16.04

相比于為PC機安裝雙系統,安裝虛擬機在達到相同目的的時候顯得更為方便。 那本文就詳細的為大家介紹如何在Windows 10的系統下,安裝Vitual Box,進而安裝虛擬機。 一、下載Vitual Box虛擬機制作軟件及鏡像文件 Vitual Box網址為:…