C语言结构体和共用体实验报告.docx

上传人:b****8 文档编号:9549996 上传时间:2023-02-05 格式:DOCX 页数:26 大小:19.55KB
下载 相关 举报
C语言结构体和共用体实验报告.docx_第1页
第1页 / 共26页
C语言结构体和共用体实验报告.docx_第2页
第2页 / 共26页
C语言结构体和共用体实验报告.docx_第3页
第3页 / 共26页
C语言结构体和共用体实验报告.docx_第4页
第4页 / 共26页
C语言结构体和共用体实验报告.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

C语言结构体和共用体实验报告.docx

《C语言结构体和共用体实验报告.docx》由会员分享,可在线阅读,更多相关《C语言结构体和共用体实验报告.docx(26页珍藏版)》请在冰豆网上搜索。

C语言结构体和共用体实验报告.docx

C语言结构体和共用体实验报告

实验九参考程序

实验9-1

/****************************************************************

*实验9.1

*

*

(1)为某商店的商品设计合适的结构体(PRODUCT)。

每一种商品包含编号(number)、

*名称(name)、价格(price)、折扣(discount)4项信息,根据表9-1,为这些信息选择合适的数据类型。

*

(2)建立2个函数,以实现对商品的操作。

input函数实现商品的输入;

*display函数显示商品信息。

要求这2个函数都以商品的结构体(PRODUCT)指针为参数。

*(3)在主函数中为商品键盘定义一个结构体变量(keyboard),利用input函数实现键盘信息的输入;

*定义一个结构体数组(elec_device[3]),利用input函数实现冰箱、空调、电视信息的输入;

*最后利用display函数显示4种商品的信息。

*

*表9-1

*

*编号名称价格折扣

*1010键盘89.500.85

*1021冰箱1024.000.95

*1022空调2058.500.90

*1023电视3001.880.95

*

****************************************************************/

#include

typedefstruct_PRODUCT

{

intiNumber;

charstrName[32];

floatfPrice;

floatfDiscount;

}PRODUCT,*PPRODUCT;

voidinput(PRODUCT*pProduct);

voiddisplay(PPRODUCTpProduct);

voidmain()

{

inti;

PRODUCTkyeboard;

PRODUCTelec_device[3];

input(&kyeboard);

for(i=0;i<3;i++)

{

input(&elec_device[i]);

}

display(&kyeboard);

for(i=0;i<3;i++)

{

display(&elec_device[i]);

}

}

/****************************************************************

*

*函数名称:

input()

*

*参数:

PRODUCT*pProduct-PRODUCT结构体指针,用来存放输入数据

*

*

*返回值:

*

*说明:

*该函数用来完成PRODUCT结构体数据的输入。

*

*

*

**************************************************************/

voidinput(PRODUCT*pProduct)

{

printf("\n请输入商品的编号:

\n");

scanf("%d",&pProduct->iNumber);

printf("请输入商品的名称:

\n");

scanf("%s",pProduct->strName);

printf("请输入商品的价格:

\n");

scanf("%f",&pProduct->fPrice);

printf("请输入商品的折扣:

\n");

scanf("%f",&pProduct->fDiscount);

}

/**************************************************************

*

*函数名称:

display()

*

*参数:

PRODUCTpProduct-PRODUCT结构体数据

*

*

*返回值:

*

*说明:

*该函数用来完成PRODUCT结构体数据的显示。

*

****************************************************************/

voiddisplay(PPRODUCTpProduct)

{

printf("\n商品的编号:

%d\n",pProduct->iNumber);

printf("商品的名称:

%s\n",pProduct->strName);

printf("商品的价格:

%.2f\n",pProduct->fPrice);

printf("商品的折扣:

%.2f\n",pProduct->fDiscount);

}

实验9-2

/****************************************************************

*实验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_LIST*deleteItem(PLAY_LIST*pPlayList,intiItemNumber);

*显示整个播放列表中的所有信息voiddisplayIList(PLAY_LIST*pPlayList);

*(3)在主函数中定义一个链表playList。

*A)利用函数createList创建播放列表playList,并在其节点上依次存储编号为1100、1102、1103的3首歌曲,

*并调用displayList函数显示此时整个播放列表中的所有信息。

*B)调用insertItem函数将编号为1101的歌曲添加到playList中,并显示整个播放列表中的所有信息。

*C)调用deleteItem函数将编号为1102的歌曲从playList中删除,并显示整个播放列表中的所有信息。

*

*

*表9-2

*

*歌曲编号歌曲名称歌手姓名歌曲长度

*1100落叶归根王力宏05:

16

*1101风吹麦浪李健04:

07

*1102往事随风齐秦04:

38

*1103天空王菲03:

42

*

****************************************************************/

#include

typedefstruct_PLAY_LIST

{

intiNumber;

charstrName[64];

charstrArtist[32];

struct_TIME

{

intiMinutes;

intiSeconds;

}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,intiItemNumber);

voiddisplayList(PLAY_LIST*pPlayList);

intinputItem(PLAY_LIST*pPlayList);

 

voidmain()

{

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);

}

 

/****************************************************************

*

*函数名称:

createList()

*

*参数:

*

*

*返回值:

PLAY_LIST*-返回创建好的播放列表链表

*

*说明:

*该函数用来创建播放列表链表。

*

*

*

***************************************************************/

PLAY_LIST*createList()

{

intiResult=0;

PLAY_LIST*pListHead,*pTemp,*pNewList;

pTemp=pNewList=(PLAY_LIST*)malloc(sizeof(PLAY_LIST));

pNewList->pNext=NULL;

pListHead=NULL;

printf("创建新播放列表\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;

}

}

returnpListHead;

}

/***************************************************************

*

*函数名称:

insertItem()

*

*参数:

PLAY_LIST*pPlayList-操作的播放列表链表

*PLAY_LIST*pNewPlayList-插入的新项目

*

*

*

*返回值:

PLAY_LIST*-返回操作后的播放列表链表

*

*说明:

*该函数用来完成播放列表链表的新项目插入。

*

*

*

****************************************************************/

PLAY_LIST*insertItem(PLAY_LIST*pPlayList,PLAY_LIST*pNewPlayList)

{

PLAY_LIST*pTemp;

if(NULL==pPlayList||NULL==pNewPlayList)

{

if(pPlayList)

returnpPlayList;

if(pNewPlayList)

returnpNewPlayList;

returnNULL;

}

pTemp=pPlayList;

if(pTemp->iNumber>pNewPlayList->iNumber)

{

pNewPlayList->pNext=pTemp;

returnpNewPlayList;

}

while

(1)

{

if(pTemp->pNext==NULL)

{

pTemp->pNext=pNewPlayList;

break;

}

if(pTemp->pNext->iNumber>pNewPlayList->iNumber)

{

pNewPlayList->pNext=pTemp->pNext;

pTemp->pNext=pNewPlayList;

break;

}

pTemp=pTemp->pNext;

}

returnpPlayList;

}

/****************************************************************

*

*函数名称:

deleteItem()

*

*参数:

PLAY_LIST*pPlayList-操作的播放列表链表

*intiItemNumber-删除项目的编号

*

*

*

*返回值:

PLAY_LIST*-返回操作后的播放列表链表

*

*说明:

*该函数用来完成播放列表链表的项目删除。

*

*

****************************************************************/

PLAY_LIST*deleteItem(PLAY_LIST*pPlayList,intiItemNumber)

{

PLAY_LIST*pTemp;

if(NULL==pPlayList)

{

returnNULL;

}

pTemp=pPlayList;

 

if(pTemp->iNumber==iItemNumber)

{

returnpTemp->pNext;

}

while

(1)

{

if(pTemp->pNext==NULL)

{

break;

}

if(pTemp->pNext->iNumber==iItemNumber)

{

pTemp->pNext=pTemp->pNext->pNext;

break;

}

pTemp=pTemp->pNext;

}

returnpPlayList;

}

 

/****************************************************************

*

*函数名称:

displayList()

*

*参数:

PLAY_LIST*pPlayList-显示的播放列表链表

*

*

*

*

*返回值:

*

*说明:

*该函数用来完成播放列表链表的内容显示。

*

*

*

****************************************************************/

voiddisplayList(PLAY_LIST*pPlayList)

{

PLAY_LIST*pTemp;

printf("\n歌曲编号\t歌曲名称\t歌手姓名\t歌曲时间长度(mm:

ss)\n");

if(NULL==pPlayList)

{

return;

}

pTemp=pPlayList;

while(pTemp)

{

printf("%-8d\t%-8s\t%-8s\t%02d:

%02d\n",

pTemp->iNumber,

pTemp->strName,

pTemp->strArtist,

pTemp->sTime.iMinutes,

pTemp->sTime.iSeconds);

pTemp=pTemp->pNext;

}

}

 

/****************************************************************

*

*函数名称:

inputItem()

*

*参数:

PLAY_LIST*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("请输入歌手姓名:

\n");

scanf("%s",pPlayList->strArtist);

printf("请输入歌曲时间长度(mm:

ss):

\n");

scanf("%d:

%d",&pPlayList->sTime.iMinutes,&pPlayList->sTime.iSeconds);

return1;

}

实验9-3

#include

uniondata

{

intiData[2];

floatfData;

charstrData[4];

unsignedintuData;

}myUnion;

 

voidmain()

{

intiTemp;

charstrTemp;

floatfTemp;

unsignedintuTemp;

 

/*第一部分*/

printf("第一部分\n");

myUnion.iData[0]=-1;

myUnion.iData[1]=1;

iTemp=myUnion.iData[0];

printf("iTemp=%d\n",iTemp);/*iTemp的值是多少*/

uTemp=myUnion.uData;

printf("uTemp=%u\n",uTemp);/*uTemp的值是多少*/

strTemp=myUnion.strData[0];

printf("strTemp=%d(ASCII:

%C)\n",strTemp,strTemp);/*strTemp的值是多少*/

fTemp=myUnion.fData;

printf("fTemp=%f\n\n",fTemp);/*fTemp的值是多少*/

/*第二部分*/

printf("第二部分\n");

myUnion.strData[0]='A';

myUnion.strData[1]='B';

iTemp=myUnion.iData[0];

printf("iTemp=%d\n",iTemp);/*iTemp的值是多少*/

uTemp=myUnion.uData;

printf("uTemp=%u\n",uTemp);/*uTemp的值是多少*/

strTemp=myUnion.strData[0];

printf("strTemp=%d(ASCII:

%C)\n",strTemp,strTemp);/*strTemp的值是多少*/

fTemp=myUnion.fData;

printf("fTemp=%f\n\n",fTemp);/*fTemp的值是多少*/

 

/*第三部分*/

printf("第三部分\n");

myUnion.fData=0.1f;

iTemp=myUnion.iData[0];

printf("iTemp=%d\n",iTemp);/*iTemp的值是多少*/

uTemp=myUnion.uData;

printf("uTemp=%u\n",uTemp);/*uTemp的值是多少*/

strTemp=myUnion.strData[0];

printf("strTemp=%d(ASCII:

%C)\n",strTemp,strTemp);/*strTemp的值是多少*/

fTemp=myUnion.fData;

printf("fTemp=%f\n\n",fTemp);/*fTemp的值是多少*/

}

实验9-4

/****************************************************************

*实验9.4

*

*

(1)在一个显示系统中,需要在任意位置显示一个中文或者英文字符,为此请根据表9-4设计一种数据结构。

*其中当label=0时,content的16位数据中低8位为英文字符,高8位的数据丢弃。

*当label=1时,content的16位数据为中文数据。

*

(2)建立2个函数,函数的原型如下:

*封装数据,即将中英文字符按照表9-4方式存储

*PACK_DATApackData(unsigneduRow,unsigneduCol,unsigneduLabel,char*pContent);

*将封装的数据提取出来,并安装要求显示在屏幕上

*voidunpackData(PACK_DATAdata);

*(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

 

/*声明结构体并定义结构体类型*/

typedefstruct_PACK_DATA

{

unsigneduRow:

3;

unsigneduCol:

3;

unsigneduLabel:

2;

uns

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 经济学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1