1、C语言结构体和共用体实验报告实验九参考程序实验91/*实验9.1*(1)为某商店的商品设计合适的结构体 (PRODUCT)。每一种商品包含编号(number)、* 名称(name)、价格(price)、折扣(discount)4项信息,根据表9-1,为这些信息选择合适的数据类型。*(2)建立2个函数,以实现对商品的操作。input函数实现商品的输入;* display函数显示商品信息。要求这2个函数都以商品的结构体(PRODUCT)指针为参数。*(3)在主函数中为商品键盘定义一个结构体变量(keyboard),利用input函数实现键盘信息的输入;* 定义一个结构体数组(elec_device
2、3),利用input函数实现冰箱、空调、电视信息的输入;* 最后利用display函数显示4种商品的信息。* 表9-1*编号 名称 价格 折扣*1010 键盘 89.50 0.85*1021 冰箱 1024.00 0.95*1022 空调 2058.50 0.90*1023 电视 3001.88 0.95*/#include typedef struct _PRODUCT int iNumber; char strName32; float fPrice; float fDiscount;PRODUCT,*PPRODUCT;void input(PRODUCT *pProduct);void
3、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); scan
4、f(%f,&pProduct-fDiscount);/*函数名称:display()*参数:PRODUCT pProduct -PRODUCT结构体数据*返回值:无*说明:*该函数用来完成PRODUCT结构体数据的显示。*/void display(PPRODUCT pProduct) printf(n商品的编号:%dn,pProduct-iNumber); printf(商品的名称:%sn,pProduct-strName); printf(商品的价格:%.2fn,pProduct-fPrice); printf(商品的折扣:%.2fn,pProduct-fDiscount);实验92/*实
5、验9.2*(1)利用链表结构(PLAY_LIST),为某媒体播放器建立一个播放列表(playList),* 该链表的每一个节点包括:歌曲编号(number)、歌曲名称(name)、歌手姓名(artist)、歌曲长度(time),见表9-2。*(2)建立4个函数,以实现对播放列表操作。函数的原型如下:* 创建播放列表 PLAY_LIST* createList(); * 在播放列表中添加一首歌曲 PLAY_LIST* insertItem(PLAY_LIST* pPlayList,PLAY_LIST* pNewPlayList); * 在播放列表中删除编号为iItemNumber的歌曲 PLAY
6、_LIST* deleteItem(PLAY_LIST* pPlayList, int iItemNumber); * 显示整个播放列表中的所有信息 void displayIList(PLAY_LIST* pPlayList); *(3)在主函数中定义一个链表playList。* A)利用函数createList创建播放列表playList,并在其节点上依次存储编号为1100、1102、1103的3首歌曲,* 并调用displayList函数显示此时整个播放列表中的所有信息。* B)调用insertItem函数将编号为1101的歌曲添加到playList中,并显示整个播放列表中的所有信息。*
7、 C)调用deleteItem函数将编号为1102的歌曲从playList中删除,并显示整个播放列表中的所有信息。* 表9-2*歌曲编号 歌曲名称 歌手姓名 歌曲长度*1100 落叶归根 王力宏 05:16*1101 风吹麦浪 李健 04:07*1102 往事随风 齐秦 04:38*1103 天空 王菲 03:42*/#include typedef struct _PLAY_LIST int iNumber; char strName64; char strArtist32; struct _TIME int iMinutes; int iSeconds; sTime; struct _PL
8、AY_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=NUL
9、L; 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); p
10、rintf(删除编号为1102的曲目之后的播放列表:n); displayList(pPlayList);/*函数名称:createList()*参数:无*返回值:PLAY_LIST* -返回创建好的播放列表链表*说明:*该函数用来创建播放列表链表。*/PLAY_LIST* createList() int iResult=0; PLAY_LIST *pListHead,*pTemp,*pNewList; pTemp=pNewList=(PLAY_LIST*)malloc(sizeof(PLAY_LIST); pNewList-pNext=NULL; pListHead=NULL; print
11、f(创建新播放列表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;/*函数名称:insertItem()*参数:PLAY_LIST* pPlayList -操作
12、的播放列表链表* PLAY_LIST* pNewPlayList -插入的新项目*返回值:PLAY_LIST* -返回操作后的播放列表链表*说明:*该函数用来完成播放列表链表的新项目插入。*/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
13、; 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; retur
14、n pPlayList;/*函数名称:deleteItem()*参数:PLAY_LIST* pPlayList -操作的播放列表链表* int iItemNumber -删除项目的编号*返回值:PLAY_LIST* -返回操作后的播放列表链表*说明:*该函数用来完成播放列表链表的项目删除。*/PLAY_LIST * deleteItem(PLAY_LIST* pPlayList,int iItemNumber) PLAY_LIST* pTemp; if(NULL=pPlayList) return NULL; pTemp=pPlayList; if(pTemp-iNumber=iItemNum
15、ber) 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;/*函数名称:displayList()*参数:PLAY_LIST* pPlayList -显示的播放列表链表*返回值:无*说明:*该函数用来完成播放列表链表的内容显示。*/void displayList(PLAY_LIST* pPlayList) PL
16、AY_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; /*函数名称:inputItem()*参数:PLAY_LIST* pPlayLi
17、st -操作的播放列表链表*返回值:int -正常返回1,不正常返回0*说明:*该函数用来完成播放列表链表的内容输入。*/int inputItem(PLAY_LIST* pPlayList) printf(请输入歌曲编号,编号小于0结束输入:n); scanf(%d,&pPlayList-iNumber); if(pPlayList-iNumberstrName); printf(请输入歌手姓名:n); scanf(%s,pPlayList-strArtist); printf(请输入歌曲时间长度(mm:ss):n); scanf(%d:%d,&pPlayList-sTime.iMinute
18、s,&pPlayList-sTime.iSeconds); return 1;实验93#include union data int 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,
19、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; iTem
20、p=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.f
21、Data=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)在一个显
22、示系统中,需要在任意位置显示一个中文或者英文字符,为此请根据表9-4设计一种数据结构。* 其中当label=0时,content的16位数据中低8位为英文字符,高8位的数据丢弃。* 当label=1时,content的16位数据为中文数据。*(2)建立2个函数,函数的原型如下:* 封装数据,即将中英文字符按照表9-4方式存储* PACK_DATA packData(unsigned uRow,unsigned uCol,unsigned uLabel,char * pContent); * 将封装的数据提取出来,并安装要求显示在屏幕上* void unpackData(PACK_DATA da
23、ta);*(3)只考虑字符(content)为英文的情况。在主函数中,调用函数packData,将信息(在第2行第3列显示英文字符X)封装好;* 然后调用函数unpackData 将上一步封装好的数据提取并显示出来。*(4)考虑字符(content)可能是英文也可能是中文的情况。* 在主函数中,2次调用函数packData,将信息1(在第2行第3列显示英文字符X)和信息2(在第3行第4列显示中文字符“中”)封装好;* 然后2次调用函数unpackData 将上一步封装好的数据提取并显示出来。* 表9-4*行号(row):3bit 列号(col) :3bit 中英文标识(label):2bit 字符(content):16bit*/#include /*声明结构体并定义结构体类型*/typedef struct _PACK_DATA unsigned uRow:3; unsigned uCol:3; unsigned uLabel:2; unsi
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1