物件導向程式設計寒假作業1問答題

2022-08-04 22:27:22 字數 2267 閱讀 3102

這個作業屬於哪個課程

2023年物件導向程式設計 (福州大學 - 數學與電腦科學學院)

這個作業要求在**

物件導向程式設計寒假作業1

這個作業的目標

1.安裝c++開發環境(見附錄)

2.完成問答題、實踐題及程式設計題

3.發布部落格

作業正文

物件導向程式設計寒假作業1問答題

其他參考文獻

《轉》簡述c語言的優缺點

c語言的優點和缺點

c語言編譯過程詳解,預處理,編譯,彙編,鏈結(乾貨滿滿)

c語言的編譯過程

答:由於我是開學才接觸c語言,並對c++的了解較少(雖然最近在開始看《c++ primer plus》),故在此回答第一小題的問題。

(1)標頭檔案中缺少包含一些實際常用的函式(預設函式較少)

首先,在我解答相應程式設計題的時候一直有乙個煩惱,就比如排序吧。雖然我們已經知道如何打關於排序的**。但是,在每一次使用排序時我們都必須打相應的**,而並沒有相應的函式包含於標頭檔案中,讓我們直接去呼叫。可能你會說,那我們可以編寫乙個函式到時候去呼叫即可。但是,在這時候我們仍然要去編寫相應函式從而去呼叫,仍會浪費一些時間。在我這幾天學習中,我知道了c++stl庫中包含sort函式可以讓我們直接呼叫,我認為這就可以解決我們c語言無法做到的問題,從而更加方便。

(2)c語言使用指標,所涉及指標的程式設計錯誤往往難以發覺

關於這一點,我是參考了《c primer plus》中的缺點。確實在我使用c語言解決程式設計問題時,在運用指標方面,常會發現一些小的錯誤難以發現,就比如在使用指標存位址時,有時候會多用了乙個「」造成如「p=&a;」的錯誤。有句話說的好:想要擁有自由就必須時刻保持警惕。

(3)c語言資料的安全性存在很大缺陷

針對這一點,是我在參考一些博文與資料時得到的結論(參考文獻已在提交作業中進行標註)就比如:對於陣列的下標越界,未作檢查,導致執行其所寫程式時的資料溢位錯誤,有可能導致計算機系統底層的執行崩潰,使資料丟失,造成嚴重的後果。這是在它的資料封裝性上使得c語言資料的安全性存在很大缺陷。這確實,在我們做過的程式設計題中,就存在資料溢位,我記得那是一題解決密碼加密與解密的問題,當我們在比較字母是否為小寫字母時,若設變數再加上32後有些變數會造成資料溢位(可能我的表述存在一些問題)從而顯示如「\273」等情況,而這也就是我認為c語言資料在運用中存在的安全問題。同時,我在使用gets函式接收字串,並執行程式後,我使用的xcode的執行框會彈出這樣一段話「warning: this program uses gets(), which is unsafe.」在查閱資料後,我知道了不安全是因為你給了他乙個緩衝區,但是你卻沒有告訴它這個緩衝區到底有多大,也不知道輸入的內容到底有多大,輸入的內容可能超出緩衝區的結尾,引起你的程式崩潰,使用fgets會好一些,因為你會指定它的緩衝區大小。這也是我認為在使用c語言中體現出來的不安全。

(4)執行時型別檢查是不可用

在c語言沒有規定執行時型別檢查,比如我傳遞浮點值,而接收引數為整數型別那麼值將會被改變,它不會給任何型別的錯誤資訊。

(5)命名空間功能

c不提供的命名空間功能,讓你不能夠在乙個範圍內再次使用相同的變數名。如果命名空間功能可用的話,那麼你可以能夠重複使用相同的變數名。

以上就是我對於c語言缺點的看法,可能存在一些錯誤,希望大家可以批評指正,同時也希望深入學習c++進一步比較出兩者語言中的優缺點,並在今後學習中加以應用。

(1)預處理,展開標頭檔案/巨集替換/去掉注釋/條件編譯

比如:我們常用的「#include」 尖括號是預處理到系統規定的路徑中去獲得這個檔案(即 c 編譯系統所提供的並存放在指定的子目錄下的標頭檔案)。找到檔案後,用檔案內容替換該語句。

還有常用的「#define」可以替換常量。

(2)編譯,檢查語法,生成彙編

預編譯程式所要做的工作就是通過詞法分析和語法分析,在確認所有的指令都符合語法規則之後,將其翻譯成等價的中間**表示或彙編**。可以說,這一步在編譯過程中,至關重要(個人意見)。

(3)彙編,彙編**轉換機器碼

彙編過程實際上指把組合語言**翻譯成目標機器指令的過程。對於被翻譯系統處理的每乙個c語言源程式,都將最終經過這一處理而得到相應的目標檔案。目標檔案中所存放的也就是與源程式等效的目標的機器語言**。

(4)鏈結,鏈結到一起生成可執行程式

由匯程式設計序生成的目標檔案並不能立即就被執行,其中可能還有許多沒有解決的問題。例如,某個原始檔中的函式可能引用了另乙個原始檔中定義的某個符號(如變數或者函式呼叫等);在程式中可能呼叫了某個庫檔案中的函式,等等。所有的這些問題,都需要經鏈結程式的處理方能得以解決。鏈結程式的主要工作就是將有關的目標檔案彼此相連線,也即將在乙個檔案中引用的符號同該符號在另外乙個檔案中的定義連線起來。

寒假作業1 問答題

首先我個人認為最突出的缺陷,是c語言的語法較為不嚴格,如並不對陣列下標越界做檢查,這經常會導致一些意想不到的錯誤,對程式的安全性有比較大的影響。在初學c語言時這一點給我帶來了不小的困擾。還有一些奇奇怪怪的問題,比如說c語言中的等於用的是 這一點我在初學c語言時經常犯錯,時常看了十幾二十分鐘沒看出來 ...

寒假作業1 問答題

2 簡述一下c 的編譯過程。資料 需要經過 預處理 編譯 彙編 鏈結 一系列流程 首先是預處理,它相當於組裝新的程式,對源程式中的偽指令 以 開頭的指令 進行處理,刪掉注釋 新增行號和檔名標識,以及保留所有 pragma編譯器指令 接著是編譯,將預處理完的檔案進行一系列詞法分析 語法分析 語義分析及...

寒假作業1之問答題

這個作業屬於哪個課程 2020年物件導向程式設計 這個作業要求在 寒假作業1 作業正文 問答題其他參考文獻 c語言有什麼缺陷 c語言的編譯過程 問答題 1.c語言有什麼缺陷 1.編譯預處理。讀取c源程式,對其中的偽指令 以 開頭的指令 和特殊符號進行處理。預編譯程式所完成的基本上是對源程式的 替代 ...