結(jié)構(gòu)、聯(lián)合、位運(yùn)算和枚舉類型.ppt_第1頁(yè)
結(jié)構(gòu)、聯(lián)合、位運(yùn)算和枚舉類型.ppt_第2頁(yè)
結(jié)構(gòu)、聯(lián)合、位運(yùn)算和枚舉類型.ppt_第3頁(yè)
結(jié)構(gòu)、聯(lián)合、位運(yùn)算和枚舉類型.ppt_第4頁(yè)
結(jié)構(gòu)、聯(lián)合、位運(yùn)算和枚舉類型.ppt_第5頁(yè)
已閱讀5頁(yè),還剩119頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,1,主講教師:* 個(gè)人主頁(yè):,C語(yǔ)言程序設(shè)計(jì)(C99版,四川大學(xué)計(jì)算機(jī)學(xué)院,四川大學(xué)計(jì)算機(jī)學(xué)院,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,2,教材:C語(yǔ)言程序設(shè)計(jì)(C99版,陳良銀 游洪躍 李旭偉 主編 李志蜀 唐寧九 李 濤 主審 清華大學(xué)出版社 2006年9月出版,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,3,本書內(nèi)容,第1章 基礎(chǔ)知識(shí) 第2章 C語(yǔ)言的基本要素 第3章 變量名、數(shù)據(jù)類型、運(yùn)算符和表達(dá)式 第4章 C程序基本控制結(jié)構(gòu) 第5章 函數(shù) 第6章 數(shù)組和指針 第7章 遞歸 第8章 結(jié)構(gòu)、聯(lián)合、位

2、運(yùn)算和枚舉類型 第9章 預(yù)處理命令 第10章 文件 第11章 高級(jí)話題 第12章 C89 Vs C99 實(shí)驗(yàn) (待安排,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,4,枚舉類型,本章主要內(nèi)容,ARM Vector Table,FIQ,IRQ,Reserved,Data Abort,Prefetch Abort,Software Interrupt,Undefined Instruction,Reset,1,3,2,聯(lián)合,結(jié)構(gòu),4,類型定義:typedef,5,位段,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,5,本章的節(jié)本要求,本章主要介紹C語(yǔ)言的結(jié)構(gòu)、聯(lián)合、枚舉類

3、型、類型定義:typedef和段位的基本概念和使用方法。 本章要求讀者能使用結(jié)構(gòu)、聯(lián)合、枚舉類型、類型定義:typedef和段位的編寫簡(jiǎn)單的應(yīng)用程序。 希望讀者在計(jì)算機(jī)上調(diào)試運(yùn)行教材中的程序。 在網(wǎng)頁(yè):http:/,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,6,8.1 結(jié)構(gòu) 8.1.1概述,在解決實(shí)際問題中,一組數(shù)據(jù)一般具有不同的數(shù)據(jù)類型。 結(jié)構(gòu)是一種構(gòu)造類型,它由若干成員組成的,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,7,8.1.2結(jié)構(gòu)的聲明,一、結(jié)構(gòu)類型的定義 定義一個(gè)結(jié)構(gòu)的一般形式為: struct 結(jié)構(gòu)類型名 成員表列 ; 成員表由若干個(gè)成員組成,每個(gè)

4、成員都是該結(jié)構(gòu)的一個(gè)組成部分。對(duì)每個(gè)成員也必須作類型說(shuō)明,其形式為: 類型說(shuō)明符 成員名; 成員名的命名應(yīng)符合標(biāo)識(shí)符的書寫規(guī)定,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,8,8.1.2結(jié)構(gòu)的聲明,例如: struct StudentType/* 定義結(jié)構(gòu)類型 */ int num;/* 學(xué)號(hào) */ char *name;/* 姓名 */ char sex3;/* 性別 */ float score;/* 成績(jī) */,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,9,在上面的結(jié)構(gòu)定義中,結(jié)構(gòu)名為StudentType,此結(jié)構(gòu)由4個(gè)成員組成,如下圖所示。 第一個(gè)成員為n

5、um,整型變量;第二個(gè)成員為name,字符指針;第三個(gè)成員為sex,字符數(shù)組;第四個(gè)成員為score,實(shí)型變量。 注意在括號(hào)后的分號(hào)是不可缺少的。結(jié)構(gòu)定義后,即可進(jìn)行變量說(shuō)明。 凡說(shuō)明為結(jié)構(gòu)StudentType的變量都由上述4個(gè)成員組成。結(jié)構(gòu)是一種構(gòu)造的數(shù)據(jù)類型,是數(shù)目固定,類型不同的若干有序變量的集合,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,10,二、結(jié)構(gòu)類型變量的定義 以上面定義的SttudentType為例來(lái)加以說(shuō)明 1先定義結(jié)構(gòu)類型,再說(shuō)明結(jié)構(gòu)變量。 這種定義一個(gè)結(jié)構(gòu)變量的一般形式如下: struct 結(jié)構(gòu)類型名 成員表列 ; 結(jié)構(gòu)類型名 結(jié)構(gòu)變量列表,2021/3

6、/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,11,上面結(jié)構(gòu)變量列表中不同結(jié)構(gòu)變量之間用逗號(hào),隔開,例如: struct StudentType/* 定義結(jié)構(gòu)類型 */ int num;/* 學(xué)號(hào) */ char *name;/* 姓名 */ char sex3;/* 性別 */ float score;/* 成績(jī) */ ; struct StudentType boy, girl;/* 定義結(jié)構(gòu)變量 */ 上面定義了兩個(gè)變量boy和girl為StudentType結(jié)構(gòu)類型,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,12,2在定義結(jié)構(gòu)類型的同時(shí)說(shuō)明結(jié)構(gòu)變量。 這種定義一個(gè)結(jié)構(gòu)變

7、量的一般形式如下: struct 結(jié)構(gòu)類型名 成員表列 結(jié)構(gòu)變量列表,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,13,例如: struct StudentType/* 定義結(jié)構(gòu)類型 */ int num;/* 學(xué)號(hào) */ char *name;/* 姓名 */ char sex3;/* 性別 */ float score;/* 成績(jī) */ boy, girl;/* 定義結(jié)構(gòu)類型變量 */ 上面的定義與第一種方法相同,也定義了兩個(gè)變量boy和girl為StudentType結(jié)構(gòu)類型,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,14,3直接說(shuō)明結(jié)構(gòu)變量 這種定義一個(gè)結(jié)

8、構(gòu)變量的一般形式如下: struct 成員表列 結(jié)構(gòu)變量列表; 例如: struct int num;/* 學(xué)號(hào) */ char *name;/* 姓名 */ char sex3;/* 性別 */ float score;/* 成績(jī) */ boy, girl;/* 定義結(jié)構(gòu)類型變量 *,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,15,結(jié)構(gòu)類型的成員也可以又是一個(gè)結(jié)構(gòu), 即構(gòu)成了嵌套的結(jié)構(gòu)類型。例如,按下圖可給出以下結(jié)構(gòu)定義,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,16,struct DateType/* 定義結(jié)構(gòu)類型 */ int year;/* 年 */ i

9、nt month;/* 月 */ int day;/* 日 */ ; 定義結(jié)構(gòu)類型 */ int num;/* 學(xué)號(hào) */ char *name;/* 姓名 */ char sex3;/* 性別 */ struct DateType birthday/* 生日 */ float score;/* 成績(jī) */ boy, girl;/* 定義結(jié)構(gòu)類型變量 *,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,17,在ANSI C中除了允許具有相同類型的結(jié)構(gòu)變量相互賦值以外, 一般對(duì)結(jié)構(gòu)變量的使用,包括賦值、輸入、輸出、 運(yùn)算等都是通過(guò)結(jié)構(gòu)變量的成員來(lái)實(shí)現(xiàn)的,2021/3/10,主講教師:四

10、川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,18,8.1.3結(jié)構(gòu)類型變量的引用,表示結(jié)構(gòu)變量成員的一般形式是: 結(jié)構(gòu)變量名.成員名 結(jié)構(gòu)變量的賦值就是給各成員賦值。 可用輸入語(yǔ)句或賦值語(yǔ)句來(lái)完成,下面通過(guò)示例進(jìn)行說(shuō)明,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,19,例8.1 試編寫為結(jié)構(gòu)變量賦值并輸出其值的程序。 S8_1.C /* 為結(jié)構(gòu)變量student賦值 */ student.num= 10101; /* 為num賦值 */ = 德華劉; /* 為name賦值 */ strcpy(student.sex, 男);/* 為sex復(fù)制賦值 */ student.bir

11、thday.year= 1962;/* 為year賦值 */ student.birthday.month= 8;/* 為month賦值 */ student.birthday.day= 18;/* 為day賦值 */ student.score= 98.1;/* 為score賦值 *,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,20,* 輸出結(jié)構(gòu)變量student */ printf(學(xué)號(hào):%dn, student.num);/* 輸出num */ printf(姓名:%sn, );/* 輸出name */ printf(性別:%sn, student.

12、sex);/* 輸出sex */ printf(生日:%d年,%d月,%d日n,/* 輸出birthday */ student.birthday.year, student.birthday.month, student.birthday.day); printf(成績(jī):%4.1fn, student.score);/* 輸出score *,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,21,程序運(yùn)行結(jié)果如下,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,22,8.1.4結(jié)構(gòu)變量的初始化,結(jié)構(gòu)體變量也與其他為變量一樣,可以在定義的同時(shí)進(jìn)行初始化,下面通過(guò)示例加以說(shuō)明。

13、 例 8.2 對(duì)結(jié)構(gòu)變量初始化并輸出其值。S8_2.C struct StudentType student = /* 定義結(jié)構(gòu)類型變量并同時(shí)進(jìn)行初始化 */ 10168,/* 初始化num */ 學(xué)友張,/* 初始化name */ 男,/* 初始化sex */ 1963, 6, 18,/* 初始化birthday */ 99.8/* 初始化score */,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,23,8.1.4結(jié)構(gòu)變量的初始化,* 輸出結(jié)構(gòu)變量student */ printf(學(xué)號(hào):%dn, student.num);/* 輸出num */ printf(姓名:%sn,

14、 );/* 輸出name */ printf(性別:%sn, student.sex);/* 輸出sex */ printf(生日:%d年%d月%d日n, /* 輸出birthday */ student.birthday.year, student.birthday.month, student.birthday.day); printf(成績(jī):%4.1fn, student.score);/* 輸出score *,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,24,8.1.4結(jié)構(gòu)變量的初始化,程序運(yùn)行結(jié)果如下,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)

15、學(xué)院 陳良銀,25,8.1.5結(jié)構(gòu)數(shù)組,數(shù)組元素也可以是結(jié)構(gòu)類型的。 可以構(gòu)成結(jié)構(gòu)型數(shù)組。結(jié)構(gòu)數(shù)組的每一個(gè)元素都是具有相同結(jié)構(gòu)類型的下標(biāo)結(jié)構(gòu)變量。 在實(shí)際應(yīng)用中,經(jīng)常用結(jié)構(gòu)數(shù)組來(lái)表示具有相同結(jié)構(gòu)的一個(gè)群體。如一個(gè)班的學(xué)生信息,一個(gè)車間職工信息等,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,26,一、結(jié)構(gòu)數(shù)組的定義 結(jié)構(gòu)數(shù)組的定義方法和結(jié)構(gòu)變量相似,只需說(shuō)明它為數(shù)組類型即可。例如: #define N 3 struct StudentType/* 定義結(jié)構(gòu)類型 */ int num;/* 學(xué)號(hào) */ char *name;/* 姓名 */ char sex3;/* 性別 */ in

16、t age;/* 年齡 */ float score;/* 成績(jī) */ ; struct StudentType studentN;/* 定義結(jié)數(shù)組 *,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,27,上面定義了數(shù)組student,元素類型為StduentType,數(shù)組共有N個(gè)元素,讀者也可象定義結(jié)構(gòu)類型變量一樣進(jìn)行直接定義,例如: #define N 3 struct StudentType/* 定義結(jié)構(gòu)類型 */ int num;/* 學(xué)號(hào) */ char *name;/* 姓名 */ char sex3;/* 性別 */ int age;/* 年齡 */ float sc

17、ore;/* 成績(jī) */ studentN;/* 定義結(jié)構(gòu)數(shù)組 *,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,28,或 #define N 3 struct int num;/* 學(xué)號(hào) */ char *name;/* 姓名 */ char sex3;/* 性別 */ int age;/* 年齡 */ float score;/* 成績(jī) */ studentN;/* 定義結(jié)構(gòu)數(shù)組 *,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,29,如下圖所示,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,30,二、結(jié)構(gòu)數(shù)組的初始化 與其他類型的數(shù)組一樣,對(duì)結(jié)構(gòu)數(shù)組可

18、以作初始化賦值,下面通過(guò)示例加以說(shuō)明。 例 8.3 對(duì)結(jié)構(gòu)數(shù)組初始化并輸出結(jié)構(gòu)變量。S8_3.C struct StudentType studentN = /* 定義結(jié)數(shù)組并進(jìn)行初始化 */ 10101, 德華劉, 男, 42, 98.1, 10102, 靚影張, 女, 22, 99.8, 10103, 學(xué)友張, 男, 43, 96.5 ; /* 輸出結(jié)構(gòu)數(shù)組student */ for (i = 0; i N; i+) /* 輸出第i個(gè)學(xué)生信息 */ printf(%8d, studenti.num);/* 輸出num */ printf(%12s, );/* 輸

19、出name */ printf(%6s, studenti.sex);/* 輸出sex */ printf(%6d, studenti.age); /* 輸出age */ printf(%8.1fn, studenti.score);/* 輸出score */,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,31,程序運(yùn)行結(jié)果如下,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,32,定義結(jié)構(gòu)數(shù)組時(shí),可不指定元素個(gè)數(shù),例如 struct StudentType student = /* 定義結(jié)數(shù)組并進(jìn)行初始化 */ 10101, 德華劉, 男, 42, 98.1, 1010

20、2, 靚影張, 女, 22, 99.8, 10103, 學(xué)友張, 男, 43, 96.5,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,33,在編譯時(shí),系統(tǒng)將根據(jù)初始結(jié)構(gòu)個(gè)數(shù)自動(dòng)地確定數(shù)組元素個(gè)數(shù),當(dāng)然也可采用如下的直接定義結(jié)構(gòu)數(shù)組并初始化的形式: struct StudentType/* 定義結(jié)構(gòu)類型 */ int num;/* 學(xué)號(hào) */ char *name;/* 姓名 */ char sex3;/* 性別 */ int age;/* 年齡 */ float score;/* 成績(jī) */ student = /* 定義結(jié)數(shù)組并進(jìn)行初始化 */ 10101, 德華劉, 男, 4

21、2, 98.1, 10102, 靚影張, 女, 22, 99.8, 10103, 學(xué)友張, 男, 43, 96.5,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,34,或 struct int num;/* 學(xué)號(hào) */ char *name;/* 姓名 */ char sex3;/* 性別 */ int age;/* 年齡 */ float score;/* 成績(jī) */ student = /* 定義結(jié)數(shù)組并進(jìn)行初始化 */ 10101, 德華劉, 男, 42, 98.1, 10102, 靚影張, 女, 22, 99.8, 10103, 學(xué)友張, 男, 43, 96.5,2021/

22、3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,35,三、結(jié)構(gòu)數(shù)組實(shí)例 下面將舉一些簡(jiǎn)單的說(shuō)明性示例說(shuō)明結(jié)構(gòu)數(shù)組的使用方法。 例8.4計(jì)算學(xué)生的平均成績(jī)以及及格的人數(shù)。S8_4.C /* 計(jì)算平均成績(jī)及及格學(xué)生人數(shù) */ for (i = 0; i = 60) /* 及格, numOfPass自加1 */ countOfPass+; av = sum / N,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,36,程序運(yùn)行結(jié)果如下,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,37,例8.5 建立同學(xué)通訊錄。S8_5.C for (i = 0; i NUM; i+) /*

23、輸入通訊信息 */ printf(n輸入第%d個(gè)人通訊信息:n, i + 1); printf(輸入姓名:); gets(); printf(輸入電話號(hào)碼:); gets(menberi.phone); printf(nn姓名ttt電話號(hào)碼nn); for (i = 0; i NUM; i+) /* 輸出個(gè)人通訊信息 */ printf(%sttt%sn,,menberi.phone);,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,38,程序參考運(yùn)行結(jié)果如下,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,39,8.1.5

24、指向結(jié)構(gòu)類型的指針,一、指向結(jié)構(gòu)變量的指針 當(dāng)指針變量用來(lái)指向一個(gè)結(jié)構(gòu)變量時(shí),這樣的指針變量稱之為結(jié)構(gòu)指針變量。結(jié)構(gòu)指針變量中的值就是所指向的結(jié)構(gòu)變量的首地址。讀者可通過(guò)結(jié)構(gòu)指針訪問該結(jié)構(gòu)變量,結(jié)構(gòu)指針變量說(shuō)明的一般形式為: 結(jié)構(gòu)類型名 *結(jié)構(gòu)指針變量名 例如,在前面的例8.1定義了StudentType這個(gè)結(jié)構(gòu)類型, 如要說(shuō)明一個(gè)指向StudentType的指針變量pStudent,可寫為: struct StudentType *pStudent,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,40,也可在定義結(jié)構(gòu)類型的同時(shí)說(shuō)明pStudent,例如: struct Studen

25、tType/* 定義結(jié)構(gòu)類型 */ int num;/* 學(xué)號(hào) */ char *name;/* 姓名 */ char sex3;/* 性別 */ DateType birthday;/* 生日 */ float score;/* 成績(jī) */ *pStudent,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,41,或 struct int num;/* 學(xué)號(hào) */ char *name;/* 姓名 */ char sex3;/* 性別 */ DateType birthday;/* 生日 */ float score;/* 成績(jī) */ *pStudent,2021/3/10,主講教

26、師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,42,結(jié)構(gòu)指針變量必須要賦值之后才能使用,賦值是將結(jié)構(gòu)變量的首地址賦予該指針變量, 不能將結(jié)構(gòu)類型名的地址賦值給指針變量,例如: struct StudentType/* 定義結(jié)構(gòu)類型 */ int num;/* 學(xué)號(hào) */ char *name;/* 姓名 */ char sex3;/* 性別 */ DateType birthday;/* 生日 */ float score;/* 成績(jī) */ ; struct StudentType boy, *pStudent;/* boy為結(jié)構(gòu)變量,pStudent為 結(jié)構(gòu)指針變量 */ pStudent = 錯(cuò)誤,不能

27、將結(jié)構(gòu)類型名的地址賦值給pStudent *,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,43,有了結(jié)構(gòu)指針變量,就能更方便地訪問結(jié)構(gòu)變量的各個(gè)成員。其訪問的一般形式為: (*結(jié)構(gòu)指針變量).成員名 或 結(jié)構(gòu)指針變量-成員名,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,44,例如: (*pStudent).num 或 pStudent-num 注意:(*pStudent)兩側(cè)的括號(hào)不可少,這是由于成員符.的優(yōu)先級(jí)高于*。如去掉括號(hào)寫作*pStudent.num則等效于*( pStudent.num),意義是完全不對(duì)了。下面通過(guò)例子來(lái)說(shuō)明結(jié)構(gòu)指針變量的具體說(shuō)明和使用方

28、法,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,45,例8.6 結(jié)構(gòu)指示使用示例。 S8_6.C 說(shuō)明:在C語(yǔ)言中,pStudent-num與(*pStudent).num等價(jià),但前者更直觀,希望讀者多使用前者的形式。 struct StudentType/* 定義結(jié)構(gòu)類型 */ int num;/* 學(xué)號(hào) */ char *name;/* 姓名 */ char sex3;/* 性別 */ struct DateType birthday;/* 生日 */ float score;/* 成績(jī) */ ; struct StudentType student;/* 定義結(jié)構(gòu)類型變量s

29、tudent */ struct StudentType *pStudent;/* 結(jié)構(gòu)指針變量pStudent *,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,46,pStudent = /* 為score賦值 *,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,47,* 輸出學(xué)生信息 */ printf(學(xué)號(hào):%dn, pStudent-num);/* 輸出num */ printf(姓名:%sn, pStudent-name);/* 輸出name */ printf(性別:%sn, pStudent-sex);/* 輸出sex */ printf(生日:%d年,%

30、d月,%d日n, /* 輸出birthday */ pStudent-birthday.year, pStudent-birthday.month, pStudent-birthday.day); printf(成績(jī):%4.1fn, pStudent-score);/* 輸出score */ 說(shuō)明:在C語(yǔ)言中,pStudent-num與(*pStudent).num等價(jià),但前者更直觀,希望讀者多使用前者的形式,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,48,二、指向結(jié)構(gòu)數(shù)組變量的指針 前面已介紹過(guò)可使用指向數(shù)組元素的指針,同樣地對(duì)于結(jié)構(gòu)數(shù)組,也可用指針來(lái)指向結(jié)構(gòu)數(shù)組元素,設(shè)pS

31、tudent為指向結(jié)構(gòu)數(shù)組元素的指針變量,則pStudent也指向該結(jié)構(gòu)數(shù)組的1個(gè)元素,pStudent + 1指向2號(hào)元素,pStudent + i則指向i+1號(hào)元素。 這與普通數(shù)組的情況是一致的,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,49,例8.7 用指針變量輸出結(jié)構(gòu)數(shù)組。 S8_7.C /* 輸出結(jié)構(gòu)數(shù)組student */ for (pStudent = student; pStudent num);/* 輸出num */ printf(%12s, pStudent-name);/* 輸出name */ printf(%6s, pStudent-sex);/* 輸出

32、sex */ printf(%6d, pStudent-age); /* 輸出age */ printf(%8.1fn, pStudent-score);/* 輸出score */ 程序運(yùn)行結(jié)果如下所示,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,50,8.2 聯(lián)合 8.2.1聯(lián)合的概念,與結(jié)構(gòu)類型一樣,聯(lián)合類型也是一種構(gòu)造類型。 在一個(gè)聯(lián)合類型內(nèi)可以定義多種不同的數(shù)據(jù)類型,在一個(gè)被說(shuō)明為該聯(lián)合類型的變量中,各個(gè)成員共享同一個(gè)存儲(chǔ)空間。 聯(lián)合類型與結(jié)構(gòu)類型有一些相似之處。但兩者有本質(zhì)上的不同。在結(jié)構(gòu)類型中各成員有各自的內(nèi)存空間, 一個(gè)結(jié)構(gòu)變量的總長(zhǎng)度是各成員長(zhǎng)度之和。而在聯(lián)合類型

33、中,各成員共享一段內(nèi)存空間, 一個(gè)聯(lián)合變量的長(zhǎng)度等于各成員中最長(zhǎng)的長(zhǎng)度,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,51,8.2.2 聯(lián)合的定義,定義一個(gè)聯(lián)合類型的一般形式為: union 聯(lián)合類型名 成員表 ; 成員表中含有若干成員,成員的一般形式為: 類型說(shuō)明符 成員名; 成員名的命名應(yīng)符合標(biāo)識(shí)符的規(guī)定,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,52,例如: union ClassOrOfficeType int clas;/* 班級(jí) */ char office10;/* 教研室 */,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,53,8.2.

34、3聯(lián)合變量的說(shuō)明,1)選定義聯(lián)合類型,再說(shuō)明聯(lián)合變量 union ClassOrOfficeType int clas;/* 班級(jí) */ char office10;/* 教研室 */ ; union ClassOrOfficeType classOrOffice,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,54,2)定義聯(lián)合類型的同時(shí)說(shuō)明聯(lián)合變量 union ClassOrOfficeType int clas;/* 班級(jí) */ char office10;/* 教研室 */ classOrOffice; (3)和直接說(shuō)明聯(lián)合變量。 union int clas;/* 班級(jí) *

35、/ char office10;/* 教研室 */ classOrOffice,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,55,經(jīng)說(shuō)明后的classAndOffice變量為ClassAndOfficeType類型。 它們的內(nèi)存分配示意圖如下圖所示,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,56,8.2.4聯(lián)合變量的賦值和使用,對(duì)聯(lián)合變量的賦值,只能對(duì)變量的成員進(jìn)行賦值。 聯(lián)合變量的成員表示為: 聯(lián)合變量名.成員名 例如,classOrOffice被說(shuō)明為ClassOrOfficeType類型的變量之后,可對(duì)classOrOffice.clas或classOrOf

36、fice.office進(jìn)行賦值。 不允許對(duì)聯(lián)合變量作初始化賦值,賦值只能在程序中進(jìn)行。還要再?gòu)?qiáng)調(diào)說(shuō)明的是,一個(gè)聯(lián)合變量, 每次只能賦予一個(gè)成員值。換句話說(shuō),一個(gè)聯(lián)合變量的值就是聯(lián)合變員的某一個(gè)成員值,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,57,例8.8設(shè)有一個(gè)教師與學(xué)生通用的表格,教師數(shù)據(jù)有姓名,年齡,身份,教研室四項(xiàng)。學(xué)生有姓名,年齡,身份,班級(jí)四項(xiàng)。編程輸入人員數(shù)據(jù), 再以表格輸出。 S8_8.C /* 輸入個(gè)人個(gè)息 */ for (i = 0; i N; i+) /* 輸入第i+1個(gè)人信息 */ printf(“第%d個(gè)人的輸入姓名,年齡,身份,班級(jí)或教 研室n, i

37、 + 1); scanf(%s %d %c, ,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,58,* 輸出個(gè)人個(gè)息 */ printf(nn姓名t年齡t身份t班級(jí)/教研室n); for (i = 0; i N; i+) /* 輸出第i+1個(gè)人的信息 */ if (personi.identity = s) /* 輸出學(xué)生信息 */ printf(%st%3dt%3ct%dn, , personi.age ,personi.identity, personi.classOrOffice.clas); else /* 輸出教師信息 */

38、 printf(%st%3dt%3ct%dn, , personi.age ,personi.identity, personi.classOrOffice.office);,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,59,程序運(yùn)行結(jié)果如下所示,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,60,8.3 枚舉類型,在實(shí)際問題中, 有些變量的取值被限定在一個(gè)有限的范圍內(nèi)。為此,語(yǔ)言提供了一種所謂的枚舉的類型。在枚舉類型的定義中列舉出所有可能的取值, 被說(shuō)明為該枚舉類型的變量取值不能超過(guò)定義的范圍。應(yīng)該說(shuō)明的是, 枚舉類型是一種基本數(shù)據(jù)類型,而不

39、是一種構(gòu)造類型, 因?yàn)樗荒茉俜纸鉃槿魏位绢愋?2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,61,8.3.1枚舉類型的定義和枚舉變量的說(shuō)明,一、枚舉類型的定義 枚舉類型定義的一般形式為: enum 枚舉類型名 枚舉值表 ; 在枚舉值表中應(yīng)羅列出所有可用值。這些值也稱為枚舉元素,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,62,例如: enum WeekdayType sun, mou, tue, wed, thu, fri, sat ; 此枚舉類型名為WeekdayType,枚舉值共有7個(gè),即一周中的七天。 凡被說(shuō)明為WeekdayType類型變量的取值只能是七天

40、中的某一天,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,63,二、枚舉變量的說(shuō)明 (1)先定義后說(shuō)明 enum WeekdayType sun, mou, tue, wed, thu, fri, sat ; enum WeekdayType today, yesterday, tomorrow,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,64,2)同時(shí)定義說(shuō)明 enum WeekdayType sun, mou, tue, wed, thu, fri, sat today, yesterday, tomorrow; (3)直接說(shuō)明 enum sun, mou, tu

41、e, wed, thu, fri, sat today, yesterday, tomorrow,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,65,三、枚舉類型變量的使用 枚舉類型在使用中有以下規(guī)定: 1枚舉值是常量,不是變量。不能在程序中用賦值語(yǔ)句再對(duì)它賦值。例如對(duì)枚舉WeekdayType的元素再作以下賦值: sun = 5; mon = 2; sun = mon; 都是錯(cuò)誤的。 2枚舉元素本身由系統(tǒng)定義了一個(gè)表示序號(hào)的數(shù)值,缺省從0 開始順序定義為0,1,2。如在WeekdayType中,sun值為0,mon值為1, ,sat值為6,2021/3/10,主講教師:四川大學(xué)計(jì)

42、算機(jī)學(xué)院 陳良銀,66,例8.9 枚舉元素值示例S8_9.C enum WeekdayType /* 定義枚舉類型 */ sun, mon, tue, wed, thu, fri, sat ; enum WeekdayType weekday;/* 定義枚舉變量 */ weekday = sun; printf(%6dn, weekday);/* 輸出sum值 */ weekday = mon; printf(%6dn, weekday);/* 輸出mon值 */ weekday = tue; printf(%6dn, weekday);/* 輸出tue值 */ weekday = wed;

43、printf(%6dn, weekday);/* 輸出wed值 *,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,67,程序運(yùn)行結(jié)果如下所示,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,68,要使枚舉值從1到7,可使用如下方式定義: enum WeekdayType /* 定義枚舉類型 */ sun = 1, mon, tue, wed, thu, fri, sat,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,69,3只能將枚舉值賦予枚舉變量,不能把元素的數(shù)值直接賦予枚舉變量。例如: weekday = sun; 是正確的,而 weekday = 0;

44、是錯(cuò)誤的。 如一定要把數(shù)值賦予枚舉變量,則必須用強(qiáng)制類型轉(zhuǎn)換,如: weekday = ( WeekdayType)6; 其意義是將順序號(hào)為6的枚舉元素賦予枚舉變量weekday,相當(dāng)于: weekday = sat; 還應(yīng)該說(shuō)明的是枚舉元素是標(biāo)識(shí)符,而不是字符常量也不是字符串常量, 使用時(shí)不要加單、雙引號(hào),2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,70,例8.10 在口袋中裝有紅、黃、藍(lán)和白4種顏色的小球苦干個(gè),每次從口袋中先后取出3個(gè)小球,試編程輸出在得到的3種不同色的球的可能取法的排列情況。S8_10.C 用枚舉類型來(lái)表示不同的顏色,用count對(duì)不同色球的排列進(jìn)行計(jì)數(shù),

45、2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,71,* 顯示顏色color */ void PrintColor(enum ColorType color) switch (color) case red:/* 顯示紅色 */ printf(%-10s, red); break; case yellow:/* 顯示黃色 */ printf(%-10s, yellow); break; case blue:/* 顯示藍(lán)色 */ printf(%-10s, blue); break; case white:/* 顯示白色 */ printf(%-10s, white); break;,

46、2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,72,for (i = 0; i 4; i+) color_i = (enum ColorType)i;/* 強(qiáng)制轉(zhuǎn)換成枚舉類型 */ for (j = 0; j 4; j+) color_j = (enum ColorType)j;/* 強(qiáng)制轉(zhuǎn)換成枚舉類型 */ if (color_i != color_j) for (k = 0; k 4; k+) color_k = (enum ColorType)k; /* 強(qiáng)制轉(zhuǎn)換成枚舉類型 */ if (color_k != color_i /* 換行 */,2021/3/10,主講教師:四

47、川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,73,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,74,8.4 類型定義:typedef,可使用typedef聲明新的類型名來(lái)代替已有的類型名。 typedef定義的一般形式為: typedef 原類型名 新類型名; 例如,在一個(gè)程序中,如果一個(gè)整型變量用來(lái)計(jì)數(shù),可將整型int聲明為CountType,具體代碼如下: typedef int CountType; 這樣在程序中使用聲明: CountType i; 定義CountType類型的變量i,其意義更加明確,可讀性更強(qiáng),2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,75,可以聲明結(jié)構(gòu)類型

48、如下: typedef struct int num;/* 學(xué)號(hào) */ char *name;/* 姓名 */ char sex3;/* 性別 */ int age;/* 年齡 */ float score;/* 成績(jī) */ StudentType; 可用新聲明的類型名StudentType代替上面的結(jié)構(gòu)類型,進(jìn)行如下的變量聲明: StudentType person;/* person為結(jié)構(gòu)變量 */ StudentType *pStudent;/* pStudent為指向結(jié)構(gòu)類型的指針 *,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,76,如下聲明是錯(cuò)誤。 struct St

49、udentType person; 可用typedef來(lái)聲明數(shù)組,例如如下的數(shù)組聲明: int aN, bN, cN, dN, eN, fN, gN, hN; 這些數(shù)組都是一維數(shù)組,元素個(gè)數(shù)都相同,可以先為數(shù)組聲明一個(gè)新類型名: typedef int ArrayTypeN; 然后再用ArrayType去定義數(shù)組變量: ArrayType a, b, c, d, e, f, g, h,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,77,使用typedef有利于程序的移植,例如在有些計(jì)算機(jī)系統(tǒng)中,int型數(shù)據(jù)占用兩個(gè)字符,而在另外一些計(jì)算機(jī)系統(tǒng)中確占用4個(gè)字節(jié),如果將一個(gè)C程序從一個(gè)

50、以4個(gè)字節(jié)存放的int數(shù)的計(jì)算機(jī)系統(tǒng)移植到以兩個(gè)字節(jié)存放int數(shù)的計(jì)算機(jī)系統(tǒng),一般的辦法是將程序中的所有int都改為long,例如將: int i, j, k; 改為: long i, j, k; 實(shí)際上可用INTEGER來(lái)聲明int: typedef int INTEGER; 在程序中所有int型變量都用INTEGER來(lái)定義,在移植時(shí)只需改動(dòng)typedef定義即可: typedef long INTEGER,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,78,8.5 位運(yùn)算符,前面介紹的各種運(yùn)算都是以字節(jié)為最基本存儲(chǔ)單元進(jìn)行進(jìn)行操作的。 但在很多系統(tǒng)程序中常要求在位(bit)一級(jí)

51、進(jìn)行運(yùn)算或處理。語(yǔ)言為此提供了位運(yùn)算的功能, 這使得語(yǔ)言也能像匯編語(yǔ)言一樣用來(lái)編寫系統(tǒng)程序,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,79,語(yǔ)言位運(yùn)算符提供了六種位運(yùn)算符,如下表所示,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,80,8.6.1 位運(yùn)算符介紹,1按位與運(yùn)算 c = a /* 返回值0 */ 運(yùn)行結(jié)果如下,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,84,2按位或運(yùn)算| 按位或運(yùn)算符|是雙目運(yùn)算符。功能是將參與運(yùn)算的兩數(shù)各對(duì)應(yīng)的二進(jìn)位相或。只要對(duì)應(yīng)的兩個(gè)兩個(gè)二進(jìn)位有一個(gè)為1時(shí),結(jié)果位就為1,否則為0,也就是: 0 | 0 = 0 1 |

52、 0 = 1 0 | 1= 1 1 | 1= 1,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,85,例8.12 計(jì)算9 | 5。 S8_12.C 可寫算式如下: 00001001 | 00000101,具體運(yùn)算如下。 可知00001001 | 00000101=00001101,也就是9 | 5=13,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,86,int main(void)/* 主函數(shù)main(void) */ int a = 9, b = 5, c; c = a | b; printf(%d | %d = %dn, a, b, c); system(PAUS

53、E);/* 調(diào)用庫(kù)函數(shù)system() */ return 0; /* 返回值0 */ 運(yùn)行結(jié)果如下,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,87,3按位異或運(yùn)算 按位異或運(yùn)算符是雙目運(yùn)算符。功能是參與運(yùn)算的兩數(shù)各對(duì)應(yīng)的二進(jìn)位相異或,當(dāng)對(duì)應(yīng)的二進(jìn)位相異時(shí),結(jié)果為1,否則結(jié)果為0,也就是: 0 0 = 0 1 0 = 1 0 1= 1 1 1= 0,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,88,例8.13 計(jì)算9 5。S8_13.C 可寫算式如下: 00001001 00000101,具體運(yùn)算如下。 可知00001001 00000101=00001100,也

54、就是9 | 5=12,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,89,int main(void)/* 主函數(shù)main(void) */ int a = 9, b = 5, c; c = a b; printf(%d %d = %dn, a, b, c); system(PAUSE);/* 調(diào)用庫(kù)函數(shù)system() */ return 0; /* 返回值0 */ 運(yùn)行結(jié)果如下,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,90,4求反運(yùn)算 求反運(yùn)算符為單目運(yùn)算符,功能是對(duì)參與運(yùn)算的數(shù)的各二進(jìn)位按位求反。 例9.14 計(jì)算9。S8_14.C 計(jì)算9的算式如下,202

55、1/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,91,即(00000000000000000000000000001001)結(jié)果為:11111111111111111111111111110110,計(jì)算機(jī)內(nèi)部以補(bǔ)碼表示一個(gè)數(shù),由補(bǔ)碼求原碼的規(guī)則是: (1)正數(shù)的原碼與補(bǔ)碼相同; (2)負(fù)數(shù)的原碼是除符號(hào)位外,各位取反,再加1。 由此可知11111111111111111111111111110110的原碼為: 10000000000000000000000000001010 其中最高位是符號(hào)位,1表示負(fù)數(shù),0表示正數(shù),可知10000000000000000000000000001010為十

56、進(jìn)制數(shù)的-10,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,92,int main(void)/* 主函數(shù)main(void) */ int a = 9, b; b = a; printf(%d = %dn, a, b); system(PAUSE);/* 調(diào)用庫(kù)函數(shù)system() */ return 0; /* 返回值0 */ 運(yùn)行結(jié)果如下,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,93,5左移運(yùn)算 左移運(yùn)算符是雙目運(yùn)算符。功能是將左邊的操作數(shù)的各二進(jìn)位全部左移若干位,由右邊的數(shù)指定移動(dòng)的位數(shù),高位丟棄,低位補(bǔ)0。 例8.15 設(shè)a = 3,計(jì)算a 4。S8_

57、15.C a的二進(jìn)制可表示為00000011,將00000011左移4位后為00110000(十進(jìn)制48,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,94,int main(void)/* 主函數(shù)main(void) */ int a = 3, b = 4, c; c = a b; printf(%d %d = %dn, a, b, c); system(PAUSE);/* 調(diào)用庫(kù)函數(shù)system() */ return 0; /* 返回值0 */ 運(yùn)行結(jié)果如下,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,95,6右移運(yùn)算 右移運(yùn)算符是雙目運(yùn)算符。功能是將左邊的操作

58、數(shù)的各二進(jìn)位全部右移若干位,右邊的數(shù)指定移動(dòng)的位數(shù)。 例8.16 設(shè)a = 15,計(jì)算a 2。S8_16.C a的二進(jìn)制可表示為000001111,表示把000001111右移2位變?yōu)?0000011(十進(jìn)制3,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,96,int main(void)/* 主函數(shù)main(void) */ int a = 15, b = 2, c; c = a b; printf(%d %d = %dn, a, b, c); system(PAUSE);/* 調(diào)用庫(kù)函數(shù)system() */ return 0; /* 返回值0 */ 運(yùn)行結(jié)果如下,2021/

59、3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,97,8.6.2 位運(yùn)算綜合舉例,例8.17 輸入一個(gè)無(wú)符號(hào)整數(shù)a,取出從右端開始的58位。S8_17.C 可按如下的操作實(shí)現(xiàn): (1)可先將a右移5位,如下圖所示,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,98,右移5位可用下面的方法實(shí)現(xiàn): a 5 (2)設(shè)置一個(gè)低4位全為1,其余各位全為0的數(shù),可用如下方法實(shí)現(xiàn): (0 5) printf(用十六進(jìn)制數(shù)輸入a:); scanf(%x, /* 返回值0 */,2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,100,程序運(yùn)行結(jié)果如上所示。 D9的二進(jìn)制表示為0000000

60、0000000000000000011011001,取出從右端開始的58位為0110,也就是十進(jìn)制數(shù)的6。 說(shuō)明:按上面同樣思想易知對(duì)一個(gè)無(wú)符號(hào)整數(shù)a,取出任意指定的右邊開始的第m位到第n位,中需將程序中的“b = a 5”換為“b = a m”,將“c = (0 4)”改為“c = (0 (n m +1)”即可實(shí)現(xiàn),2021/3/10,主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院 陳良銀,101,例8.18 試編程實(shí)現(xiàn)以二進(jìn)制形式顯示無(wú)符號(hào)整數(shù)。 S8_18.C 按位與運(yùn)算通常與一個(gè)稱為屏蔽字(mask)的操作數(shù)一起使用,當(dāng)屏蔽字某位設(shè)置為1時(shí),用來(lái)選擇某位,如為0,則用來(lái)隱藏某位,設(shè)字長(zhǎng)為n位,下面的程序

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論