C语言结构体和共用体实验报告_第1页
C语言结构体和共用体实验报告_第2页
C语言结构体和共用体实验报告_第3页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验九参考程序实验9-1/*实验9.1*(1)为某商店的商品设计合适的结构体(PRODUCT)每一种商品包含编号(number)、名称(name)、价格(price)、折扣(discount)4项信息,根据表9-1,为这些信息选择合适的数据类型(2)建立2个函数,以实现对商品的操作。input函数实现商品的输入;display函数显示商品信息。要求这2个函数都以商品的结构体(PRODUCT)针为参(3)在主函数中为商品键盘定义一个结构体变量(keyboard),利用input函数实现键盘信息的输入;定义一个结构体数组(elec_device3),利用input函数实现冰箱、空调、电视信息的输入

2、;函数显示4种商品的信息。最后利用display*编号名称价格折扣*1010键盘89.500.85*1021冰箱1024.000.95*1022空调2058.500.90*1023电视3001.880.95表9-1*/#include<stdio.h>typedefstruct_PRODUCTintiNumber;charstrName32;floatfPrice;floatfDiscount;PRODUCT,*PPRODUCT;voidinput(PRODUCT*pProduct);voiddisplay(PPRODUCTpProduct);voidmain()inti;PROD

3、UCTkyeboard;PRODUCTelec_device3;input(&kyeboard);for(i=0;i<3;i+)input(&elec_devicei);display(&kyeboard);for(i=0;i<3;i+)display(&elec_devicei);/*函数名称:input()*参数:PRODUCT*pProduct-PRODUCT结构体指针,用来存放输入数据*返回值:无*说明:*该函数用来完成PRODUCT构体数据的输入。*/voidinput(PRODUCT*pProduct)printf("n请输入商

4、品的编号:n");scanf("%d",&pProduct->iNumber);printf("请输入商品的名称:n");scanf("%s”,pProduct->strName);printf("请输入商品的价格:n");scanf("%f",&pProduct->fPrice);printf("请输入商品的折扣:n");scanf("%f",&pProduct->fDiscount);/*函数名称:dis

5、play()*-PRODUCT结构体数据*参数:PRODUCTpProduct*返回值:无*说明:*该函数用来完成PRODUCT构体数据的显示。*/voiddisplay(PPRODUCTpProduct)("n商品的编号:%dn”,pProduct->iNumber);(”商品的名称:%sn",pProduct->strName);(”商品的价格:.2fn”,pProduct->fPrice);(”商品的折扣:%.2fn",pProduct->fDiscount);printfprintfprintfprintf实验9-2/*实验9.2*

6、(1)利用链表结构(PLAY_LIST),为某媒体播放器建立一个播放列表(playList),该链表的每一个节点包括:歌曲编号(number)、歌曲名称(name)、歌手姓名(artist)歌曲长度(time),见表9-2。(2)建立4个函数,以实现对播放列表操作。函数的原型如下:创建播放列表PLAY_LIST*createList();在播放列表中添加一首歌曲PLAY_LIST*insertItem(PLAY_LIST*pPlayList,PLAY_LIST*pNewPlayList);在播放列N中删除编号为iItemNumber的歌曲PLAY_LIST*deleteItem(PLAY_LI

7、ST*pPlayList,intiItemNumber);显示整个播放歹0表中的所有信息voiddisplayIList(PLAY_LIST*在主函数中定义一个链表playList。利用函数createList创建播放列表playList,并在其节点上依次存储编号为1100、1103的3首歌曲,并调用displayList函数显示此时整个播放歹U表中的所有信息。调用insertItem函数将编号为1101的歌曲添加到playList中,并显示整个播放歹UpPlayList);(3)A)1102、*B)表中的所有信息。C)调用deleteItem函数将编号为1102的歌曲从playList中删除

8、,并显示整个播放歹U表中的所有信息。*表9-2*歌曲编号歌曲名称歌手姓名歌曲长度*1100落叶归根王力宏05:16*1101风吹麦浪李健04:07*1102往事随风齐秦04:38*1103天空王菲03:42*/#include<stdio.h>typedefstruct_PLAY_LIST(一一intiNumber;charstrName64;charstrArtist32;struct_TIME(intiMinutes;intiSeconds;sTime;struct_PLAY_LIST*pNext;PLAY_LIST,*PPLAY_LIST;PLAY_LIST*createLi

9、st();PLAY_LIST*insertItem(PLAY_LIST*pPlayList,PLAY_LIST*pNewPlayList);PLAY_LIST*deleteItem(PLAY_LIST*pPlayList,intiItemNumber);voiddisplayList(PLAY_LIST*pPlayList);intinputItem(PLAY_LIST*pPlayList);voidmain()(PLAY_LIST*pPlayList=NULLPLAY_LIST*pNewPlayList=NULLpPlayList=createList();printf("播放歹U

10、表:n");displayList(pPlayList);printf("n播放歹0表插入曲目:n");pNewPlayList=createList();pPlayList=insertItem(pPlayList,pNewPlayList);printf("插入新的曲目之后的播放列表:n");displayList(pPlayList);printf("n播放歹0表删除曲目:n");pPlayList=deleteItem(pPlayList,1102);printf("删除编号为1102的曲目之后的播放列表:

11、n");displayList(pPlayList);/*函数名称:createList()*参数:无*返回值:PLAY_LIST*-返回创建好的播放列表链表*说明:*该函数用来创建播放列表链表。*/PLAY_LIST*createList()intiResult=0;PLAY_LIST*pListHead,*pTemp,*pNewList;pTemp=pNewList=(PLAY_LIST*)malloc(sizeof(PLAY_LIST);pNewList->pNext=NULLpListHead=NULLprintf("创建新播放歹U表n");iRes

12、ult=inputItem(pNewList);if(iResult)pListHead=pNewList;while(iResult)(pNewList=(PLAY_LIST*)malloc(sizeof(PLAY_LIST);pNewList->pNext=NULLiResult=inputItem(pNewList);if(iResult)(pTemp->DNext=pNewList;pTemp=pNewList;returnpListHead;/*函数名称:insertItem()*参数:PLAY_LIST*pPlayList-操作的播放列表链表PLAY_LIST*pNew

13、PlayList-插入的新项目*返回值:PLAY_LIST*-返回操作后的播放列表链表*说明:*该函数用来完成播放列表链表的新项目插入。*/PLAY_LIST*insertItem(PLAY_LIST*pPlayList,PLAY_LIST*pNewPlayList)(PLAY_LIST*pTemp;if(NUL=pPlayList|NUL=pNewPlayList)(if(pPlayList)returnpPlayList;if(pNewPlayList)returnpNewPlayList;returnNULLpTemp=pPlayList;if(pTemp->iNumber>

14、pNewPlayList->iNumber)pNewPlayList->pNext=pTemp;returnpNewPlayList;while(1)if(pTemp->pNext=NULLpTemp*Next=pNewPlayList;break;if(pTemp->pNext->iNumber>pNewPlayList->iNumber)pNewPlayList-pNext=pTemp->)Next;pTemp*Next=pNewPlayList;break;pTemp=pTemp-pNext;returnpPlayList;/*函数名称:d

15、eleteItem()*参数:PLAY_LIST*pPlayList-操作的播放列表链表intiltemNumber-删除项目的编号*返回值:PLAY_LIST*-返回操作后的播放列表链表*说明:*该函数用来完成播放列表链表的项目删除。*/PLAY_LIST*deleteItem(PLAY_LIST*pPlayList,intiltemNumber)(PLAY_LIST*pTemp;if(NUL=pPlayList)(returnNULLpTemp=pPlayList;if(pTemp->iNumber=iItemNumber)(returnpTemp->pNext;while(1

16、)(if(pTemp->pNext=NULL(break;if(pTemp->pNext->iNumber=iItemNumber)(pTemp->DNext=pTemp->)Next->pNext;break;pTemp=pTemp-pNext;returnpPlayList;/*函数名称:displayList()*参数:PLAY_LIST*pPlayList-显示的播放列表链表*返回值:无*说明:*该函数用来完成播放列表链表的内容显示。*/voiddisplayList(PLAY_LIST*pPlayList)(PLAY_LIST*pTemp;prin

17、tf("n歌曲编号t歌曲名称t歌手姓名t歌曲时间长度(mm:ss)n");if(NUL=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_LI

18、ST*pPlayList-操作的播放列表链表*返回值:int-正常返回1,不正常返回0*说明:*该函数用来完成播放列表链表的内容输入。*/intinputItem(PLAY_LIST*pPlayList)printf("请输入歌曲编号,编号小丁0结束输入:n");scanf("%d”,&pPlayList->iNumber);if(pPlayList->iNumber<0)return0;printf("请输入歌曲名称:n");scanf("%s”,pPlayList->strName);printf(

19、"请输入歌手姓名:n");scanf("%s",pPlayList->strArtist);printf("请输入歌曲时间长度(mm:ss):n");scanf("%d:%d”,&pPlayList->sTime.iMinutes,&pPlayList->sTime.iSeconds);return1;实验9-3#include<stdio.h>uniondataintiData2;floatfData;charstrData4;unsignedintuData;myUnion;

20、voidmain()intiTemp;charstrTemp;floatfTemp;unsignedintuTemp;/*第一部分*/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("

21、;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=myUnio

22、n.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;print

23、f("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的值是多少*/实验9-4/*实验9.4*(1)

24、在一个显示系统中,需要在任意位置显示一个中文或者英文字符,为此请根据表9-4设计一种数据结构。其中当label=0时,content的16位数据中低8位为英文字符,高8位的数据丢弃。当label=1时,content的16位数据为中文数据(2)建立2个函数,函数的原型如下:封装数据,即将中英文字符按照表9-4方式存储* PACK_DATApackData(unsigneduRow,unsigneduCol,unsigneduLabel,charpContent);将封装的数据提取出来,并安装要求显示在屏幕上voidunpackData(PACK_DATAdata);(3)只考虑字符(conte

25、nt)为英文的情况。在主函数中,调用函数packData,将信息(在第2行第3列显示英文字符X)封装好;然后调用函数unpackData将上一步封装好的数据提取并显示出来。(4)考虑字符(content)可能是英文也可能是中文的情况。* 在主函数中,2次调用函数packData,将信息1(在第2行第3歹0显示英文字符X)和信息2(在第3行第4列显示中文字符“中”)封装好;然后2次调用函数unpackData将上一步封装好的数据提取并显示出来。表9-4中英文标识(label):2bit字符行号(row):3bit歹0号(col):3bit(content):16bit*/#include<

26、stdio.h>/*声明结构体并定义结构体类型*/typedefstruct_PACK_DATA(unsigneduRow:3;unsigneduCol:3;unsigneduLabel:2;unsignedshortuContent:16;PACK_DATA,*PPACK_DATA;/*函数声明*/*封装数据,只考虑英文情况*/PACK_DATpackData(unsigneduRow,unsigneduCol,unsigneduLabel,char*pContent);/*提心据,只考虑英文情况*/voidunpackData(PACK_DATAdata);/*封装数据,包含中英文情

27、况*/PACK_DATpackData1(unsigneduRow,unsigneduCol,unsigneduLabel,char*pContent);/*提取数据,包含中英文情况*/voidunpackData1(PACK_DATAdata);voidmain()(PACK_DATAata;data=packData1(1,2,1,"中");unpackData1(data);data=packData1(1,2,0,"A");unpackData1(data);/*函数名称:*packData()*参数:*unsigneduRow-字符所在的行号*

28、unsigneduCol-字符所在的歹0号*unsigneduLabel-中英文标志位*char*pContent-字符数据*返回值:*PACK_DATA-封装好的PACK_DATA构体*说明:*该函数用来封装英文字符。*/PACK_DATApackData(nsigneduRow,unsigneduCol,unsigneduLabel,char*pContent)(PACK_DATAata;data.uCol=uCol;data.uRow=uRow;data.uLabel=uLabel;data.uContent=pContent0;returndata;/*函数名称:*unpackData()*参数:*PACK_DATAdata-封装好的PACK_DATA构体数据*返回值:*无*说明:*该函数用来提取并显示封装的英文字符。*/voidunpackData(PACK_DATAdata)(inti;for(i=0;i<da

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论