java第九章实验报告_第九章实验报告

这篇实验报告详细介绍了C语言中结构体的应用,包括结构体变量描述日期、结构体数组记录候选人票数、共用体在处理不同类型数据时的作用,以及结构体指针在模拟报数游戏中的运用。通过实验,学生掌握了结构体的定义、使用,以及如何引用结构体成员和操作结构体数组。
摘要由CSDN通过智能技术生成

C程序设计实验报告

实验项目:构造数据类型实验

姓名:罗子健 实验地点:物联网实验室 实验时间:2019年6月26日

一、实验目的与要求

(1)掌握结构体类型说明和结构体类型变量、数组、指针的定义方法及使用。

(2)学会引用结构体中的成员。

(3)掌握利用指向结构体的指针成员构成链表的基本算法。

(4)了解联合体类型和枚举类型的说明、其变量的定义及赋初值的方法。

(5)了解联合类型变量中各成员的存储结构,学会引用各成员中的数据。

(6)学习正确引用枚举类型常量,了解如何对枚举类型变量进行操作。

二、实验内容

9.3.1 结构体变量的应用

1、问题的简单描述:试利用结构体类型描述年、月、日,输入一个日期,统计该日期是本年度第多少天。算法描述如图所示。

2、实验流程图、代码和结果:

3cbef67f4ffe53c705ebcb16618d3f85.png

1 /*ex9_1*/

2 #include

3 main()4 { structdate5 { intyear;6 intmonth;7 int day;/*含有年、月、日、3个成员*/}8 a;/*定义结构体变量a*/

9 int i,days;/*定义其他变量*/

10 printf("输入年、月、日:");/*提示“输入年、月、日”*/

11 scanf("%d%d%d",&a.year,&a.month,&a.day);/*输入“年、月、日”*/

12 for(i=1;i

19 }

b2e1545a4feaa1e81cc1b7d7fed3b56c.png

3、问题分析:day要进行-1,不然会比实际天数多1。

9.3.2 结构体数组的应用

1、问题的简单描述:

2、实验流程图、代码和结果:

42af88c2bd2b16a2d830b18f9cecba99.png

1 /*ex9_2.c*/

2 #include "stdio.h"

3 #include

4 structperson5 { char name[20];6 intcount;7 }a[6]={"zhang",0,"li",0,"wang",0,"zhao",0,"liu",0,"zhu",0};8 main()9 { int i,j; char abc[20];10 for(i=1;i<=10;i++)11 { printf("输入候选人姓名:");/*提示“输入候选人名字”*/

12 scanf("%s",abc); /*输入候选人名字*/

13 for(j=0;j<6;j++)14 if(strcmp(abc,a[j].name)==0)15 a[j].count++;};16 for(j=0;j<6;j++)17 printf("%s:%d\n",a[j].name,a[j].count);/*输入各候选人的名字和得票数*/

18 }

4659639053b1c1d0d53c651c1007c267.png

3、问题分析:用到了strcmp比较函数进行比较来判断该候选人的票数是否加一

9.3.3 共用体的应用

1、问题的简单描述:

2、实验流程图、代码和结果:

0dba693a9e640ecf6218791a71d27e9c.png

1 /*ex9_3.c*/

2 #include "stdio.h"

3 #include

4 struct

5 { intnumber;6 char name[99];7 charjob;8 union9 { intclasses;10 char position[10];11 }category;12 }person[2];13 main()14 { inti;15 for(i=0;i<2;i++)16 { scanf("%s%d%s",&person[i].name,&person[i].number,&person[i].job);/*输入某人的编号、姓名、职业*/

17 if(person[i].job=='s')18 scanf("%d",&person[i].category.classes);19 else if(person[i].job=='t')20 scanf("%s",&person[i].category.position);/*输入教师的职称*/

21 else

22 { printf("input error!");23 abort();/*若输入错误,则退出程序*/

24 }25 }26 printf("\n");27 printf("编号 姓名 职业 班级/职务\n");28 for(i=0;i<2;i++)29 if(person[i].job=='s')30 printf("%d %s %c %d\n",person[i].number,person[i].name,person[i].job,person[i].category.classes);/*输出学生的记录*/

31 else

32 printf("%d %s %c %s\n",person[i].number,person[i].name,person[i].job,person[i].category.position);33 }

2940bb86ac5dd060dcb9482874d021af.png

3、问题分析:若要调用abort()函数退出程序,就要有包含stdlib.h的头文件。

9.3.4 结构体指针的应用

1、问题的简单描述:

2、实验流程图、代码和结果:

d3cbd0d7fcff94b9576d681247033ecf.png

1 /*ex9_4.c*/

2 #include

3 #define N 10 /*最多围圈人数*/

4 structchild5 {6 int no; /*人员编号*/

7 int next; /*下一人员编号*/

8 } ;9 struct child link[99]; /*定义结构体数组link[N],描述所有人员*/

10 main()11 {12 int i,n,m,s,count,h; /*定义变量*/

13 printf("输入围圈人数,出圈人数,开始报数位置:");14 scanf("%d%d%d",&n,&m,&s);/*输入围圈人数n,出圈人数m,开始报数位置s*/

15 for(i=1;i<=n;i++)16 {17 if(i==n)18 link[i].next=1;19 else

20 link[i].next=i+1;21 link[i].no=i;22 }23 count=0;24 if(s==1)h=n;else h=s-1;25 printf("出圈顺序为:");26 while(count

27 {28 i=0;29 while(i!=m)30 {31 h=link[h].next;32 if(link[h].no)33 i++;34 }35 printf("%d,",link[h].no);36 link[h].no=0;37 count++;38 }39 for(i=1;i<=n;i++)40 if(link[i].no!=0)41 printf("%d",link[i].no);/*输出最后留在圈中的人数*/

42 }

e9883d739cd303ce3e12a7708ad35969.png

3、问题分析:定义数组link[N],N要定义大一些,N要大于n。

三、实验小结(在本次实验中收获与不足)

要调用abort()函数退出程序,就要有包含stdlib.h的头文件。不然就不能中止。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值