C語言基礎10

2021-08-18 14:45:33 字數 1813 閱讀 2355

9、結構體、共用體、列舉、巨集定義、預處理

9.1、結構體

9.1.1、為什麼需要結構體?

沒有結構體之前,在c語言中,資料的組織依靠:變數+陣列。

最初最簡單的時候,只需要使用基本資料型別(int char float double)來定義單個變數,需要幾個變數就定義幾個。

後來情況變複雜了,有時需要很多意義相關的變數(譬如需要儲存及運算乙個班級的學生分數)這時候陣列出現了。陣列解決了需要很多態別相同、意義相關的變數的問題。

但是陣列是有限制的。陣列最大的不足在於,乙個陣列只能儲存很多個資料型別相同的變數。

所以碰到需要封裝幾個型別不同的變數的時候,陣列就無能為力。

譬如對於題目:使用乙個資料結構來儲存乙個學生的所有資訊:姓名 學號 性別

這時候就需要結構體。

9.2、什麼是結構體?

結構體是乙個集合,集合中包含很多個元素,這些元素的資料型別可以相同,也可以不相同。所以結構體是一種資料封裝的方法。結構體存在的意義就在於,把很多資料型別不相同的變數封裝在一起,組成乙個大的新的資料型別。

資料結構:把龐大複雜的資料用一定的方式組織管理起來,便於操作(查詢,增加,刪除等)這就叫資料結構。

9.3、結構體和陣列的關聯:陣列是一種特殊的結構體,特殊之處在於封裝內的各個元素型別是相同的。結構體和陣列都是對一些子元素的封裝,因此定義的時候都是封裝作為整體定義,但是使用的時候,都是使用封裝中的子元素。一般結構體變數和陣列變數都不會作為乙個整體操作。

9.4、使用結構體的步驟:

第一步:定義結構體型別。結構體型別的定義是在函式外面(函式外面 == 全域性)的

第二步:使用第一步定義的型別來定義結構體變數。

第三步:使用變數。實際上使用結構體變數的時候,使用的是結構體變數中封裝的各個子元素,而不是結構體變數本身。

9.5、結構體的初始化

結構體變數和普通變數一樣,作為區域性變數時,如果定義的時候無初始化也無顯式賦值,則結構體變數中的子元素的值是隨機的。

發現2種c語言接受的結構體初始化方式。

第一種,完全初始化。;

第二種,部分初始化。

;新增關鍵字: struct

新增操作符: .

9.6、巨集定義

#define n 321//巨集定義的格式

巨集定義要注意的問題:

1、巨集定義一般是在函式的外面

2、巨集定義必須要先定義,再使用巨集。如果先使用就會編譯報錯。

3、巨集定義中巨集名一般用大寫。不是語法規定的,是一般約定俗成的。

為什麼使用巨集定義?

在c語言中,一般使用常數的時候,都不是直接使用,而是先把該常數定義為乙個巨集,然後在程式中使用該巨集名。這樣做的好處是,等我們需要修改這個常數時,只需要在巨集定義處修改一次即可。而不用到**中到處去尋找,看**都用過該常數。

9.7、列舉

9.6、共用體(union,聯合,聯合體)

9.6.1、共用體union在定義和使用形式上,和結構體struct很相似。但是兩種資料結構是完全不同的兩類東西。

結構體,是對多個資料的組合與封裝。

共用體,共用體中只有乙個東西,只是它被好幾個名字(和型別)共用。

char -128 ~ 127

int -***x ~ + ***x

新增關鍵字:union

基礎知識:

1、double float用%f列印,char用%c和%d列印,int用%d,字串用%s列印,指標用%p列印

2、c語言基礎大模組:

資料型別

運算子三種程式結構

函式陣列

指標結構體、公用體、列舉、巨集定義、預處理

基礎知識 + 推斷能力

學習 = 基礎知識 + 合理推論

C語言練習10

5位運動員參加了10公尺臺跳水比賽,有人讓他們 比賽結果 a選手說 b第二,我第三 b選手說 我第二,e第四 c選手說 我第一,d第二 d選手說 c最後,我第三 e選手說 我第四,a第一 比賽結束後,每位選手都說對了一半,請程式設計確定比賽的名次。思路 生成每個選手的所有名次可能性,然後進行邏輯判斷...

C語言作業10

問題 答案這個作業屬於哪個課程 c語言設計1 這個作業要求在哪 我在這個課程的目標是 熟悉編譯器的操作 這個作業在哪個具體方面幫助我實現目標 基本語言和格式 參考文獻 提問的智慧型 pta系統常見問題解答 輸入資料 輸出資料 說明b 6 bc c d d c c b ba 正常b 5 bc c d ...

C語言 作業10

這個作業要求在 我在這個課程的目標是 學習更多的知識 這個作業在那個具體方面幫助我實現目標 語句的理解和c語言的精髓之處 參考文獻 1.1輸出三角形字元陣列 輸入格式 輸入在一行中給出乙個正整數n 1 n 7 輸出格式 輸出n行由大寫字母a開始構成的三角形字元陣列。格式見輸出樣例,其中每個字母後面都...