




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
汽車計算機基礎
配套教材:索明何、汪東明
等編著多資源、立體化、新形態教材《汽車計算機基礎》機械工業出版社,2023ISBN:978-7-111-72416-2
本書結合汽車技術電動化、智能化、網聯化、共享化的“四化”發展和汽車類專業特點,按照“由簡到難、循序漸進”的原則,共設置了“緒論”“汽車程序設計基礎篇”“汽車嵌入式技術基礎篇”“車載網絡技術基礎篇”4部分內容。通過本書的學習,可以從整體上加深理解汽車電子控制系統的組成和工作原理,對汽車電子控制技術和智能網聯汽車技術學習奠定良好的汽車計算機基礎。
本書特色:任務驅動,理實一體,學以致用。內容組織由簡到難、循序漸進,靈活采用對比法、類比法、啟發法、實驗法等多種教學方法,有效降低教學難度和學習難度。
本書可作為高職院校汽車類專業的汽車計算機基礎教材,也可供從事相關技術的工程人員參考。第1單元:C語言程序設計入門第2單元:利用三種程序結構解決簡單問題第3單元:利用數組處理同類型的批量數據第4單元:利用函數實現模塊化程序設計第5單元:靈活使用指針處理問題第6單元:利用復雜的構造類型解決實際問題汽車程序設計基礎篇
第6單元利用復雜的構造類型解決實際問題
本單元學習目標:能利用結構體變量和結構體數組分別處理一組數據,并學會使用結構體指針引用結構體數據;能理解含有共用體類型和枚舉類型的程序;能用typedef聲明類型別名。
數組是將相同類型的多個數據組合在一起。對于不同類型的一組數據,如一名學生的學號為整型,姓名為字符型,性別為字符型,成績為實型,能否用數組存放該學生的這些信息呢?——可用結構體類型將不同類型的若干個數據組合在一起。
有時需要將多個不同類型的變量存放到同一段內存單元中,以便節省內存的開銷——可用共用體類型來實現。【單元導讀】
有些變量的取值僅限于幾種可能的列舉值,例如一星期只有7天,這種變量可聲明為枚舉類型。C語言允許用戶自己建立由不同類型(或同類型)數據組成的組合型數據結構——“結構體”。任務6.1聲明一個結構體類型【課堂練習】聲明同步練習6-1中的商品結構體類型。任務6.2利用結構體變量處理一組數據6.2.1定義結構體變量的方法
在聲明類型后可以隨時定義變量,使用靈活。
聲明的結構體類型,僅相當于一個模型,其中并無具體數據,系統并不對其分配內存空間。系統只對變量或數組分配內存空間,因此為了能在程序中使用結構體類型的數據,應當定義結構體類型的變量或數組。
能直接看到結構體的結構,較為直觀,在編寫小程序時常用此方法。
沒有結構體名,不能再用此結構體類型去定義其他變量,實際應用較少。注意:結構體變量在程序執行期間,所有成員一直駐留在內存中。【課后作業】用sizeof運算符測試結構體類型
structStudent
的長度。
定義的兩個變量stu1和stu2都具有structStudent類型的結構:(1)先聲明結構體類型
再定義結構體變量(2)在聲明結構體類型的
同時定義結構體變量
(3)不指定結構體名而
直接定義結構體變量6.2.1定義結構體變量的方法任務6.2利用結構體變量處理一組數據說明:
(1)結構體中的成員也可以是一個結構體類型的變量。例如:(2)結構體中的成員名可與程序中其它變量同名,但二者代表不同的對象,互不干擾。【課后作業】同步練習6-2:知識鞏固。6.2.2結構體變量的初始化任務6.2利用結構體變量處理一組數據
和其他類型的變量一樣,結構體變量可以在定義時進行初始化賦值。初始化列表是用花括號括起來的一些常量(依次賦給結構體變量中的成員)。6.2.3結構體變量的引用
在定義結構體變量以后,便可引用該變量。C允許具有相同類型的結構體變量相互賦值;而對結構體變量的輸入、輸出及各種運算都是通過結構體變量的成員來實現的。任務6.2利用結構體變量處理一組數據
結構體變量成員的引用形式:結構體變量名.成員名
若成員本身又是一個結構體類型,則必須逐級找到最低級的成員才能使用。例如:stu1.birthday.month為第1名學生出生的月份例如:stu1.stu_ID即第一名學生的學號
stu2.sex
即第二名學生的性別
成員(分量)運算符“.”的優先級最高。stu1.stu_ID作為一個整體看待。說明:
(1)結構體變量成員可以和普通變量一樣進行各種運算。
(2)可以引用結構體變量成員的地址,也可以引用結構體變量的地址。6.2.3結構體變量的引用任務6.2利用結構體變量處理一組數據【例6.1】結構體變量的初始化和引用。#include
<stdio.h>#include
<string.h>structStudent
//聲明結構體類型{
int
stu_ID;
//學號
charname[20];//姓名
floatscore;
//成績};intmain(void){
structStudent
stu1
=
{1001,"SunLi",75.0};//定義stu1變量并初始化
structStudentstu2,
stu3;//定義stu2、stu3變量
stu2.stu_ID=
1002;
//引用結構體變量成員,并賦值strcpy(stu2.name,
"ZhangPing");
stu2.score
=
80.0;
stu3
=
stu1;
//結構體變量相互賦值printf("學號\t姓名\t\t成績\n");printf("%d%-20s%4.1f\n",stu1.stu_ID,stu1.name,stu1.score);printf("%d%-20s%4.1f\n",stu2.stu_ID,stu2.name,stu2.score);printf("%d%-20s%4.1f\n",stu3.stu_ID,stu3.name,stu3.score);}6.3.1指向結構體變量的指針
定義結構體指針變量的一般形式為:
struct結構體名
*結構體指針變量名;
例如:structStudent*pstu;
指針變量pstu就可以用來指向structStudent類型的變量。
結構體指針是用來指向結構體數據的指針,若把一個結構體數據的起始地址賦給一個指針變量,則該指針變量就指向這個結構體數據。任務6.3利用結構體指針引用結構體數據6.3.1指向結構體變量的指針任務6.3利用結構體指針引用結構體數據【例6.2】通過3種方式訪問結構體變量中的成員。
若結構體指針變量指向了一結構體數據(結構體變量或結構體數組元素),則訪問結構體數據的成員有3種形式:(1)結構體變量名.成員名
例如stu1.name
或
結構體數組元素名.成員名(2)(*結構體指針變量名).成員名例如(*pstu).name(3)結構體指針變量名->成員名例如pstu->name#include
<stdio.h>structStudent
//聲明結構體類型{
int
stu_ID;
//學號
charname[20];//姓名
float
score;
//成績};intmain(void){
structStudent
stu1
=
{1002,
"張三強",
78.5};//定義結構體變量stu1并賦值
structStudent*pstu
=
&stu1;//定義結構體指針變量pstu,并指向變量stu1printf("學號姓名成績\n");printf("%d%s%.1f\n",stu1.stu_ID,stu1.name,stu1.score);printf("%d%s%.1f\n",(*pstu).stu_ID,(*pstu).name,(*pstu).score);printf("%d%s%.1f\n",pstu->stu_ID,pstu->name,pstu->score);}【課后作業】同步練習6-3:知識鞏固。stu1pstu【例6.3】用結構體指針變量作函數參數,輸出結構體變量的值。6.3.2結構體指針變量作函數參數
將一個結構體數據傳遞給另一個函數時,若采用“地址傳遞”的方式(用指向結構體數據的指針變量作函數參數,將結構體數據的起始地址傳遞給形參),則會減少時間和空間上的開銷,大大提高程序執行效率。任務6.3利用結構體指針引用結構體數據#include<stdio.h>structStudent
//聲明結構體類型{
intstu_ID;
//學號
charname[20];
//姓名
floatscore;
//成績};voidoutput(structStudent
*p);
//函數聲明intmain(void){ structStudentstu1={1002,"張三強",
78.5};
//定義結構體變量stu1并賦值
structStudent
*pstu
=
&stu1;//定義結構體指針變量pstu,并指向變量stu1
output(pstu);
//調用函數,結構體指針變量作函數實參}voidoutput(structStudent
*p)
//結構體指針變量作函數形參{
printf("學號姓名成績\n");printf("%d%s%.1f\n",p->stu_ID,p->name,p->score);}6.4.1共用體類型
將變量c、i、j放在同一地址2000開始的內存單元中。這種使多個不同的變量共用一段內存的結構,稱為“共用體”——實現多個變量分時復用內存。聲明共用體類型的一般形式:
union共用體名
{
成員列表
};任務6.4熟悉共用體類型和枚舉類型6.4.1共用體類型1、定義共用體變量的方法任務6.4熟悉共用體類型和枚舉類型(1)先聲明共用體類型
再定義共用體變量(2)在聲明共用體類型的
同時定義共用體變量(3)不指定共用體名而
直接定義共用體變量2、共用體變量的引用方法
引用共用體變量成員的形式:共用體變量名.成員名
例如,d1.c、d1.i、d1.j分別表示引用共用體變量d1的3個成員。3、結構體與共用體的比較
結構體變量(所有成員共存)所占內存長度是各成員長度之和。
共用體變量(各個成員互斥),在任何時刻只能使用其中的一個成員。所占內存長度是最長成員的長度。如共用體變量d1占4個字節(成員j的長度)。共用體變量的地址和各成員的地址是相同。&d1和&d1.i、&d1.c、&d1.j相同。4、共用體變量的賦值(1)共用體變量的初始化賦值
定義變量時,只能對變量的一個成員賦初值,而不能對所有的成員賦初值。例如:unionUDatad1={'a'};//'a'賦給變量d1的第1個成員cunionUDatad1={'a',12,345};//錯誤,{}中只能有一個值unionUDatad1='a';//錯誤,初值必須用{}括起來6.4.1共用體類型任務6.4熟悉共用體類型和枚舉類型(2)共用體變量在程序中賦值定義了共用體變量以后,只能對其成員賦值,不可對其整體賦值。同類型的共用體變量可以相互賦值。例如:unionUDatad1,d2,d[10];//定義共用體類型的變量、數組d1={'a',12,345};//錯誤,不能對變量整體賦值d1.i=12;//將12賦給d1的成員i//同類型的共用體變量相互賦值d2=d1;d[0].c='a';//將'a'賦給d[0]的成員c【課后作業】
同步練習6-4:
知識鞏固。
在實際應用中,
如果一個變量只有幾種可能的取值,例如一星期只有7天,那么該變量可定義為“枚舉(enumeration)類型”。
“枚舉”是指將變量的值一一列舉出來,變量的值僅限于列舉值的范圍內。聲明枚舉類型:enumWeekday{Sun,
Mon,Tue,Wed,Thu,Fri,Sat};
花括號中的Sun、Mon、…、Sat稱為枚舉元素或枚舉常量。注意:枚舉常量之間是用逗號間隔,而不是分號。定義枚舉變量:
枚舉變量只能取枚舉聲明中的某個枚舉元素值:workday=Mon;restday=Sat;enumWeekday{Sun,Mon,Tue,Wed,Thu,Fri,Sat}
workday,restday;也可以在聲明枚舉類型的同時,定義枚舉變量:或
enum
{Sun,Mon,Tue,Wed,Thu,Fri,Sat}
workday,restday;任務6.4熟悉共用體類型和枚舉類型6.4.2枚舉類型
1、枚舉元素表中的每一個枚舉元素都代表一個整數,默認值依次為0、1、2、3、…。
在上述聲明中,Sun=0,Mon=1,…,Sat=6。
若人為地指定枚舉元素的數值:enumWeekday{Sun=7,Mon=1,Tue,Wed,Thu,Fri,Sat};
則:枚舉元素Sun=7,Mon=1,其后的元素按照順序依次加1,如Fri=5。說明://聲明枚舉類型//定義枚舉類型變量
2、只能把枚舉元素賦給枚舉變量,但不能把元素的數值直接賦給枚舉變量。例如:workday=Mon;//正確
workday=1;//錯誤
workday=(enumWeekday)1;//正確(強制類型轉換),相當于workday=Mon;
3、枚舉元素是常量,不是變量,因此不能在程序中再對它
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 新解讀《CB-T 253-1999金屬船體構件理論線》新解讀
- 路緣石施工方案
- 2025年紫外輻照計項目立項申請報告模板
- 土工布土工膜安全技術交底表
- 汽車傳感器與檢測技術電子教案:霍爾式曲軸位置傳感器
- 白云山涼茶營策劃方案
- 外勤銷售崗位管理制度
- 介紹志愿活動方案
- 物理中考二輪復習教案 6電學計算2
- 施工總承包項目結算報送清單及模板
- 第七章郵輪游客投訴心理及處理技巧46課件
- 2025-2030年全球及中國槐糖脂行業市場現狀供需分析及投資評估規劃分析研究報告
- 江蘇省無錫市天一實驗學校2025屆物理八下期末調研試題含解析
- 第七單元專題學習活動:遨游漢字王國(精美課件)【知識提要】六年級語文下冊(統編版五四制2024)
- 河道生態修復與生物多樣性保護的生態水文過程模擬與生態修復優化
- 《張宇托福聽力》課件
- 2024-2025學年人教版五年級下冊期末測評數學試卷(二)含答案
- 電子商務概論試題庫與答案
- 第三屆全國技能大賽競賽(軟件測試賽項)選拔賽備考試題庫(含答案)
- 2025年一級注冊計量師考試題庫帶答案
- 碼頭環保宣傳培訓
評論
0/150
提交評論