C語言結(jié)構(gòu)體和共用體實驗報告.doc_第1頁
C語言結(jié)構(gòu)體和共用體實驗報告.doc_第2頁
C語言結(jié)構(gòu)體和共用體實驗報告.doc_第3頁
C語言結(jié)構(gòu)體和共用體實驗報告.doc_第4頁
C語言結(jié)構(gòu)體和共用體實驗報告.doc_第5頁
已閱讀5頁,還剩12頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

實驗九參考程序?qū)嶒?1/*實驗9.1*(1)為某商店的商品設(shè)計合適的結(jié)構(gòu)體 (PRODUCT)。每一種商品包含編號(number)、* 名稱(name)、價格(price)、折扣(discount)4項信息,根據(jù)表9-1,為這些信息選擇合適的數(shù)據(jù)類型。*(2)建立2個函數(shù),以實現(xiàn)對商品的操作。input函數(shù)實現(xiàn)商品的輸入;* display函數(shù)顯示商品信息。要求這2個函數(shù)都以商品的結(jié)構(gòu)體(PRODUCT)指針為參數(shù)。*(3)在主函數(shù)中為商品鍵盤定義一個結(jié)構(gòu)體變量(keyboard),利用input函數(shù)實現(xiàn)鍵盤信息的輸入;* 定義一個結(jié)構(gòu)體數(shù)組(elec_device3),利用input函數(shù)實現(xiàn)冰箱、空調(diào)、電視信息的輸入;* 最后利用display函數(shù)顯示4種商品的信息。* 表9-1*編號名稱價格折扣*1010鍵盤89.500.85*1021冰箱1024.000.95*1022空調(diào)2058.500.90*1023電視3001.880.95*/#include typedef struct _PRODUCTint iNumber;char strName32;float fPrice;float fDiscount;PRODUCT,*PPRODUCT;void input(PRODUCT *pProduct);void display(PPRODUCT pProduct);void main()int i;PRODUCT kyeboard;PRODUCT elec_device3;input(&kyeboard);for(i=0;i3;i+)input(&elec_devicei);display(&kyeboard);for(i=0;iiNumber);printf(請輸入商品的名稱:n);scanf(%s,pProduct-strName);printf(請輸入商品的價格:n);scanf(%f,&pProduct-fPrice);printf(請輸入商品的折扣:n);scanf(%f,&pProduct-fDiscount);/*函數(shù)名稱:display()*參數(shù):PRODUCT pProduct -PRODUCT結(jié)構(gòu)體數(shù)據(jù)*返回值:無*說明:*該函數(shù)用來完成PRODUCT結(jié)構(gòu)體數(shù)據(jù)的顯示。*/void display(PPRODUCT pProduct)printf(n商品的編號:%dn,pProduct-iNumber);printf(商品的名稱:%sn,pProduct-strName);printf(商品的價格:%.2fn,pProduct-fPrice);printf(商品的折扣:%.2fn,pProduct-fDiscount);實驗92/*實驗9.2*(1)利用鏈表結(jié)構(gòu)(PLAY_LIST),為某媒體播放器建立一個播放列表(playList),* 該鏈表的每一個節(jié)點包括:歌曲編號(number)、歌曲名稱(name)、歌手姓名(artist)、歌曲長度(time),見表9-2。*(2)建立4個函數(shù),以實現(xiàn)對播放列表操作。函數(shù)的原型如下:* 創(chuàng)建播放列表 PLAY_LIST* createList(); * 在播放列表中添加一首歌曲 PLAY_LIST* insertItem(PLAY_LIST* pPlayList,PLAY_LIST* pNewPlayList); * 在播放列表中刪除編號為iItemNumber的歌曲 PLAY_LIST* deleteItem(PLAY_LIST* pPlayList, int iItemNumber); * 顯示整個播放列表中的所有信息 void displayIList(PLAY_LIST* pPlayList); *(3)在主函數(shù)中定義一個鏈表playList。* A)利用函數(shù)createList創(chuàng)建播放列表playList,并在其節(jié)點上依次存儲編號為1100、1102、1103的3首歌曲,* 并調(diào)用displayList函數(shù)顯示此時整個播放列表中的所有信息。* B)調(diào)用insertItem函數(shù)將編號為1101的歌曲添加到playList中,并顯示整個播放列表中的所有信息。* C)調(diào)用deleteItem函數(shù)將編號為1102的歌曲從playList中刪除,并顯示整個播放列表中的所有信息。* 表9-2*歌曲編號歌曲名稱歌手姓名歌曲長度*1100 落葉歸根 王力宏 05:16*1101 風(fēng)吹麥浪 李健 04:07*1102 往事隨風(fēng) 齊秦 04:38*1103 天空 王菲 03:42*/#include typedef struct _PLAY_LISTint iNumber;char strName64;char strArtist32;struct _TIMEint iMinutes;int iSeconds; sTime;struct _PLAY_LIST *pNext;PLAY_LIST,*PPLAY_LIST;PLAY_LIST* createList();PLAY_LIST* insertItem(PLAY_LIST* pPlayList,PLAY_LIST* pNewPlayList);PLAY_LIST* deleteItem(PLAY_LIST* pPlayList,int iItemNumber);void displayList(PLAY_LIST* pPlayList);int inputItem(PLAY_LIST* pPlayList);void main()PLAY_LIST *pPlayList=NULL;PLAY_LIST *pNewPlayList=NULL;pPlayList=createList();printf(播放列表:n);displayList(pPlayList);printf(n播放列表插入曲目:n);pNewPlayList=createList();pPlayList=insertItem(pPlayList,pNewPlayList);printf(插入新的曲目之后的播放列表:n);displayList(pPlayList);printf(n播放列表刪除曲目:n);pPlayList=deleteItem(pPlayList,1102);printf(刪除編號為1102的曲目之后的播放列表:n);displayList(pPlayList);/*函數(shù)名稱:createList()*參數(shù):無*返回值:PLAY_LIST* -返回創(chuàng)建好的播放列表鏈表*說明:*該函數(shù)用來創(chuàng)建播放列表鏈表。*/PLAY_LIST* createList()int iResult=0;PLAY_LIST *pListHead,*pTemp,*pNewList;pTemp=pNewList=(PLAY_LIST*)malloc(sizeof(PLAY_LIST);pNewList-pNext=NULL;pListHead=NULL;printf(創(chuàng)建新播放列表n);iResult=inputItem(pNewList);if(iResult)pListHead=pNewList;while(iResult)pNewList=(PLAY_LIST*)malloc(sizeof(PLAY_LIST);pNewList-pNext=NULL;iResult=inputItem(pNewList);if(iResult)pTemp-pNext=pNewList;pTemp=pNewList;return pListHead;/*函數(shù)名稱:insertItem()*參數(shù):PLAY_LIST* pPlayList -操作的播放列表鏈表* PLAY_LIST* pNewPlayList -插入的新項目*返回值:PLAY_LIST* -返回操作后的播放列表鏈表*說明:*該函數(shù)用來完成播放列表鏈表的新項目插入。*/PLAY_LIST* insertItem(PLAY_LIST* pPlayList,PLAY_LIST* pNewPlayList)PLAY_LIST* pTemp;if(NULL=pPlayList|NULL=pNewPlayList)if(pPlayList)return pPlayList;if(pNewPlayList)return pNewPlayList;return NULL;pTemp=pPlayList;if(pTemp-iNumberpNewPlayList-iNumber)pNewPlayList-pNext=pTemp;return pNewPlayList;while(1)if(pTemp-pNext=NULL)pTemp-pNext=pNewPlayList;break;if(pTemp-pNext-iNumberpNewPlayList-iNumber)pNewPlayList-pNext=pTemp-pNext;pTemp-pNext=pNewPlayList;break;pTemp=pTemp-pNext;return pPlayList;/*函數(shù)名稱:deleteItem()*參數(shù):PLAY_LIST* pPlayList -操作的播放列表鏈表* int iItemNumber -刪除項目的編號*返回值:PLAY_LIST* -返回操作后的播放列表鏈表*說明:*該函數(shù)用來完成播放列表鏈表的項目刪除。*/PLAY_LIST * deleteItem(PLAY_LIST* pPlayList,int iItemNumber)PLAY_LIST* pTemp;if(NULL=pPlayList)return NULL;pTemp=pPlayList;if(pTemp-iNumber=iItemNumber)return pTemp-pNext;while(1)if(pTemp-pNext=NULL)break;if(pTemp-pNext-iNumber=iItemNumber)pTemp-pNext=pTemp-pNext-pNext;break;pTemp=pTemp-pNext;return pPlayList;/*函數(shù)名稱:displayList()*參數(shù):PLAY_LIST* pPlayList -顯示的播放列表鏈表*返回值:無*說明:*該函數(shù)用來完成播放列表鏈表的內(nèi)容顯示。*/void displayList(PLAY_LIST* pPlayList)PLAY_LIST * pTemp;printf(n歌曲編號t歌曲名稱t歌手姓名t歌曲時間長度(mm:ss)n);if(NULL=pPlayList)return ;pTemp=pPlayList;while(pTemp)printf(%-8dt%-8st%-8st%02d:%02dn,pTemp-iNumber,pTemp-strName,pTemp-strArtist,pTemp-sTime.iMinutes,pTemp-sTime.iSeconds);pTemp=pTemp-pNext;/*函數(shù)名稱:inputItem()*參數(shù):PLAY_LIST* pPlayList -操作的播放列表鏈表*返回值:int -正常返回1,不正常返回0*說明:*該函數(shù)用來完成播放列表鏈表的內(nèi)容輸入。*/int inputItem(PLAY_LIST* pPlayList)printf(請輸入歌曲編號,編號小于0結(jié)束輸入:n);scanf(%d,&pPlayList-iNumber);if(pPlayList-iNumberstrName);printf(請輸入歌手姓名:n);scanf(%s,pPlayList-strArtist);printf(請輸入歌曲時間長度(mm:ss):n);scanf(%d:%d,&pPlayList-sTime.iMinutes,&pPlayList-sTime.iSeconds);return 1;實驗93#include union dataint iData2;float fData;char strData4;unsigned int uData;myUnion;void main()int iTemp;char strTemp;float fTemp;unsigned int uTemp;/*第一部分*/printf(第一部分n);myUnion.iData0=-1;myUnion.iData1=1;iTemp=myUnion.iData0;printf(iTemp=%dn,iTemp);/*iTemp的值是多少*/uTemp=myUnion.uData;printf(uTemp=%un,uTemp);/*uTemp的值是多少*/strTemp=myUnion.strData0;printf(strTemp=%d(ASCII:%C)n,strTemp,strTemp);/*strTemp的值是多少*/fTemp=myUnion.fData;printf(fTemp=%fnn,fTemp);/*fTemp的值是多少*/*第二部分*/printf(第二部分n);myUnion.strData0=A;myUnion.strData1=B;iTemp=myUnion.iData0;printf(iTemp=%dn,iTemp);/*iTemp的值是多少*/uTemp=myUnion.uData;printf(uTemp=%un,uTemp);/*uTemp的值是多少*/strTemp=myUnion.strData0;printf(strTemp=%d(ASCII:%C)n,strTemp,strTemp);/*strTemp的值是多少*/fTemp=myUnion.fData;printf(fTemp=%fnn,fTemp);/*fTemp的值是多少*/*第三部分*/printf(第三部分n);myUnion.fData=0.1f;iTemp=myUnion.iData0;printf(iTemp=%dn,iTemp);/*iTemp的值是多少*/uTemp=myUnion.uData;printf(uTemp=%un,uTemp);/*uTemp的值是多少*/strTemp=myUnion.strData0;printf(strTemp=%d(ASCII:%C)n,strTemp,strTemp);/*strTemp的值是多少*/fTemp=myUnion.fData;printf(fTemp=%fnn,fTemp);/*fTemp的值是多少*/實驗94/*實驗9.4*(1)在一個顯示系統(tǒng)中,需要在任意位置顯示一個中文或者英文字符,為此請根據(jù)表9-4設(shè)計一種數(shù)據(jù)結(jié)構(gòu)。* 其中當(dāng)label=0時,content的16位數(shù)據(jù)中低8位為英文字符,高8位的數(shù)據(jù)丟棄。* 當(dāng)label=1時,content的16位數(shù)據(jù)為中文數(shù)據(jù)。*(2)建立2個函數(shù),函數(shù)的原型如下:* 封裝數(shù)據(jù),即將中英文字符按照表9-4方式存儲* PACK_DATA packData(unsigned uRow,unsigned uCol,unsigned uLabel,char * pContent); * 將封裝的數(shù)據(jù)提取出來,并安裝要求顯示在屏幕上* void unpackData(PACK_DATA data);*(3)只考慮字符(content)為英文的情況。在主函數(shù)中,調(diào)用函數(shù)packData,將信息(在第2行第3列顯示英文字符X)封裝好;* 然后調(diào)用函數(shù)unpackData 將上一步封裝好的數(shù)據(jù)提取并顯示出來。*(4)考慮字符(content)可能是英文也可能是中文的情況。* 在主函數(shù)中,2次調(diào)用函數(shù)packData,將信息1(在第2行第3列顯示英文字符X)和信息2(在第3行第4列顯示中文字符“中”)封裝好;* 然后2次調(diào)用函數(shù)unpackData 將上一步封裝好的數(shù)據(jù)提取并顯示出來。* 表9-4*行號(row):3bit列號(col) :3bit中英文標(biāo)識(label):2bit字符(content):16bit*/#include /*聲明結(jié)構(gòu)體并定義結(jié)構(gòu)體類型*/typedef struct _PACK_DATAunsigned uRow:3;unsigned uCol:3;unsigned uLabel:2;unsigned short uContent:16;PACK_DATA,*PPACK_DATA;/*函數(shù)聲明*/*封裝數(shù)據(jù),只考慮英文情況*/PACK_DATA packData(unsigned uRow,unsigned uCol,unsigned uLabel,char * pContent);/*提取數(shù)據(jù),只考慮英文情況*/void unpackData(PACK_DATA data);/*封裝數(shù)據(jù),包含中英文情況*/PACK_DATA packData1(unsigned uRow,unsigned uCol,unsigned uLabel,char * pContent);/*提取數(shù)據(jù),包含中英文情況*/void unpackData1(PACK_DATA data);void main()PACK_DATA data;data=packData1(1,2,1,中);unpackData1(data);data=packData1(1,2,0,A);unpackData1(data);/*函數(shù)名稱:*packData()*參數(shù):*unsigned uRow -字符所在的行號*unsigned uCol -字符所在的列號*unsigned uLabel -中英文標(biāo)志位*char * pContent -字符數(shù)據(jù)*返回值:* PACK_DATA -封裝好的PACK_DATA結(jié)構(gòu)體*說明:*該函數(shù)用來封裝英文字符。*/PACK_DATA packData(unsigned uRow,unsigned uCol,unsigned uLabel,char * pContent)PACK_DATA data;data.uCol=uCol;data.uRow=uRow;data.uLabel=uLabel;data.uContent=pContent0;return data;/*函數(shù)名稱:*unpackData()*參數(shù):*PACK_DATA data

溫馨提示

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

評論

0/150

提交評論