《C語言點滴》一1 5 內功修煉

2021-09-23 16:10:56 字數 3239 閱讀 9719

c語言點滴

作為乙個門外漢,我真的不敢在這裡談論數學的話題。直到我在網上看到南京大學數學系張高飛老師的一篇文章,我決定將全文轉述在下面,下面分割線之間的就是張高飛老師那篇文章了。文章不長,但是讓我這個悲情人物找到了自信,數學裡面是有屬於我的乙個分支的,那就是計算數學!

正如大家所知,代數幾何是現代數學的主流。當代大多數一流的數學家都工作在這一領域。因此如果你覺得自己天賦異稟,並在代數、幾何與分析各方面都有著紮實的基礎,我建議你絕不要浪費自己的天賦:應義無反顧地選擇代數幾何這一專業。當然把代數、幾何與分析這三門基礎功課同時學好的人很少。比如有些同學有著很好的分析功底,但代數中的抽象思維能力卻相對顯得薄弱。如果是這樣的話,我建議你選擇分析方面的專業,比如:復分析,分形,調和分析或微分方程。

除以上三部分同學之外,還有這樣的一部分同學:他們對代數,分析與幾何都不擅長,但卻一直堅信自己在數學上仍能有所作為,並幻想有朝一日成為中國數學界的中流砥柱。如果你屬於這部分同學中的一位的話,我建議你選擇動力系統。動力系統這一學科其實就是專門為這部分同學開設的。

當然即使是動力系統也不是人人都能學的。因為動力系統需要大量的微積分。可總有那麼一部分同學還沒來得及把極限的概念搞清楚就大學畢業了(本文作者中槍)。如果你不巧就是這樣一位同學,也就是說你大學四年壓根兒就沒學數學,但仍希望自己將來能在數學上一展巨集圖的話,我建議你選擇組合數學這一專業。這一專業的特點就是它只用到中學的數學。如果你在中學時參加過數學競賽並獲過獎項的話,這一學科正是你大展身手的地方。

我想大多數同學看到這兒之前已經找到了適合自己的專業了。可若仍有人羞怯地說他在中學時早戀,因此連中學的數學也沒學好,我想告訴這部分同學不要怕。在我們系有專門為你們開設的乙個專業:統計學。這一學科只要求懂得小學數學中的加減乘除四則運算就夠了。更重要的是,選擇這一專業的大多都是女同學。在你準確無誤地把成千上萬個資料加起來並嫻熟地計算出他們的均值時,你也贏得了眾多師姐師妹的芳心:短短三年的研究生生活或許能讓你再次體會一次那如花美眷,似水流年的往事……

最後這一條是專門針對那些悲情人物的。他們連小學的數學也沒學好。不要說把上千個數加起來,就是把兩個數加起來,對他們來說都是件很吃力的事。然而這一切絲毫沒有削弱他們對數學的一片痴情。他們日日夜夜泡在圖書館裡。他們翻閱了所有的數學文獻,卻從未找到一本能讀懂的。但他們仍堅持不懈,為的就是找到乙個適合自己的專業。他們的行為感動了上帝。上世紀的某一天,上帝為他們創造了一台機器幫他們計算,這就是計算機。借助計算機,他們可以很快地進行加減乘除的運算。這就是計算數學。

張老師的文章轉述完畢,看來張老師也同意這樣一種觀點:數學學不好的學統計,統計學不好的才學計算機,這句話多少有點道理。確實,很多的計算機研究領域並不需要高深的、抽象的數學知識。但是大家千萬不要以為學計算機就可以輕視或忽略數學。關於計算機和數學的關係,我只想說兩點。第一點,數學很有用。數學對我們理解和使用資料結構和演算法有很大的幫助。數學中,不僅數值分析、集合論、概率統計與分析這些課程可以直接應用到計算機相關應用中,同時,堅實的數學基礎會給日後從事研究性質的工作帶來巨大的幫助。如果你的數學學得非常好,你不僅擁有數學的知識,更重要的是擁有數學的思維,而數學的思維對從事計算機職業來說至關重要。

第二點,如果從應用的角度來理解數學,數學很簡單。我們來舉個例子。由乙個最簡單的問題談起,我們要鋪正多邊形地磚,能夠使得拼接處沒有縫隙,正幾邊形能夠滿足這個要求?這個問題可以化解成另外乙個問題,正多邊形的乙個內角的整數倍等於360度。我們繼續推導這個問題,正n 邊形總可以分割成n -2的三角形,所以正n邊形內角和等於 (n-2)times ^}。

這樣,正n邊形的每個內角就是

假設正n邊形恰好需要m個圍繞在一起而沒有空隙,那麼就可以得到

經過簡單地推導,最後可以得到(m−2)(n−2)=4,其中m和n必須為正整數,經過簡單的口算,你就可以得到n只能是3,4,6。與之對應的是三角形,正方形,和正六邊形。正八邊形好像是滿足要求,但是如果你嘗試鋪一下,就會發現這是不行的。也就是說,能夠無縫隙的平鋪一塊地方的正多邊形中,最大的就是正六邊形。通常情況下,邊數越多,周長相等的情況下所佔面積就越大。所以……所以你想到了什麼沒有?蜂巢!沒錯,就是蜂巢。聰明的蜜蜂早就知道了這一原理,把自己的巢建成正六邊形,如圖1-14所示;另外,我們的手機採用的都是蜂窩網,這回你知道為什麼了吧!怎麼樣,數學真的不難,而且非常有用吧。

既然正六邊形有如此優良的特性,為什麼我們超市裡面裝牛奶的盒子都是正方形,而不是正六邊形的呢?這是因為牛奶一般都是放到貨架上,正方形可以保證你能很方便地抽取出來啊!那為什麼不設計成圓形呢?因為牛奶必須需要放到冰櫃裡,正方形可以保證最大限度地利用冰櫃的空間啊!那為什麼可樂瓶子都是圓的啊?因為一般可樂都是用手拿著喝的啊!那為什麼……。好了,為了系統回答你的所有問題,我需要引入一門新的課程,這門課程叫做《軟體工程》。他包含了商業、溝通、管理、市場、開發等方方面面。乙個軟體產品,技術很重要,但不是全部。這一點,蘋果的賈伯斯應該深有體會,下面我就叨咕叨咕軟體工程這個東西。

圖1-14 蜂巢

對於軟體工程,有一句表揚它的話,那就是:「懂得軟體工程的程式設計師就不再是妓女了!」這句話**於程式設計師圈內用於自嘲的乙個模擬,那就是程式設計師和妓女都是吃青春飯的。不過說句實話,我對表揚軟體工程的這句話理解的並不是很透徹。

話說回來,軟體工程這東西,真的很重要。如果有乙個產業,大家都很努力工作,但是結果卻會很差,那就是軟體這個行業了。開發乙個軟體包含很多步驟,從需求設計與分析、系統設計,到軟體實現、軟體測試、部署和維護,其中每乙個步驟又涉及到很多人,從使用者到銷售,從經理到程式設計師,從架構師到測試人員等。乙個常見的情況就是程式設計師不了解使用者,使用者也不了解程式設計師;大部分時候,使用者也不了解自己。這就造成了如圖1-15所示的乙個專案悲催的一生。

圖1-15 乙個軟體專案悲催的一生

說到軟體工程,不能不提到cmm(軟體能力成熟度模型),這個是軟體工程和軟體管理的乙個比較主流的模型。我曾經聽過乙個故事,國內的乙個企業曾經派一些資深的員工去印度一家公司學習cmm模型。學習一年回國以後,中國員工並沒有學會cmm,但是印度那家公司從此卻不用cmm,改用中國模式了!後來這個公司改變了戰略,第二次派了一批剛從學校畢業的學生去學習,終於取得真經,修成正果。從這個故事中,大家得到了什麼結論呢?

還有乙個真實的案例那就是微軟公司,它開發軟體的時候不用cmm進行管理,而是使用開發、測試、專案經理三個團隊互相配合的方式來進行管理。

看來cmm這個東西也並不是傳說中的那麼神。就像炒菜一樣,只要好吃就行,沒必要偏得按照菜譜來。關於軟體工程,我基本上不懂,所以也只給大家介紹這麼多了。

我個人的乙個感覺就是,軟體工程這個東西很賺錢,而且無論是從課本上,還是從課堂上,你都學不來。

C 內功修煉 物件導向概述

物件導向三大特性?物件導向的三個基本特徵是 封裝 繼承 多型。封裝封裝最好理解了。封裝是物件導向的特徵之一,是物件和類概念的主要特性。封裝,也就是把客觀事物封裝成抽象的類,並且類可以把自己的資料和方法只讓可信的類或者物件操作,對不可信的進行資訊隱藏。繼承物件導向程式設計 oop 語言的乙個主要功能就...

修煉演算法內功 選擇排序(一)

內容 1 簡單的選擇排序 2 使用模板 泛型 使演算法更加靈活 3 使用結構體完成學生的name和score屬性的排序 4 隨機生成演算法測試用例。寫在前面 為什麼學習o n 2 的排序演算法?基礎 1 selection sort 選擇排序 基本思路 如 8 6 2 3 1 5 7 4 對乙個序列...

內功修煉之O n 的排序演算法(一)

本文參考程式設計師內功修煉課程,所有實現 均能在github上找到。一 選擇排序 selection sort 1 基本思想 給定陣列int arr 第 1趟排序,在待排序資料arr 1 arr n 中選出最小的 資料,將它與arr 1 交換 第 2趟,在待排序 資料arr 2 arr n 中選出最...