C程序设计实验报告
实验项目:构造数据类型实验
姓名:罗子健 实验地点:物联网实验室 实验时间:2019年6月26日
一、实验目的与要求
(1)掌握结构体类型说明和结构体类型变量、数组、指针的定义方法及使用。
(2)学会引用结构体中的成员。
(3)掌握利用指向结构体的指针成员构成链表的基本算法。
(4)了解联合体类型和枚举类型的说明、其变量的定义及赋初值的方法。
(5)了解联合类型变量中各成员的存储结构,学会引用各成员中的数据。
(6)学习正确引用枚举类型常量,了解如何对枚举类型变量进行操作。
二、实验内容
9.3.1 结构体变量的应用
1、问题的简单描述:试利用结构体类型描述年、月、日,输入一个日期,统计该日期是本年度第多少天。算法描述如图所示。
2、实验流程图、代码和结果:
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 }
3、问题分析:day要进行-1,不然会比实际天数多1。
9.3.2 结构体数组的应用
1、问题的简单描述:
2、实验流程图、代码和结果:
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 }
3、问题分析:用到了strcmp比较函数进行比较来判断该候选人的票数是否加一
9.3.3 共用体的应用
1、问题的简单描述:
2、实验流程图、代码和结果:
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 }
3、问题分析:若要调用abort()函数退出程序,就要有包含stdlib.h的头文件。
9.3.4 结构体指针的应用
1、问题的简单描述:
2、实验流程图、代码和结果:
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 }
3、问题分析:定义数组link[N],N要定义大一些,N要大于n。
三、实验小结(在本次实验中收获与不足)
要调用abort()函数退出程序,就要有包含stdlib.h的头文件。不然就不能中止。