博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第九章 构造数据类型实验
阅读量:6618 次
发布时间:2019-06-25

本文共 3580 字,大约阅读时间需要 11 分钟。

第九章 构造数据类型实验

姓名:周萌    实验地点:514教室    实验时间:4.30


 实验项目:

  • 9.3.1.试利用结构体类型描述年、月、日,输入一个日期,统计该日期是本年度第多少天。

  • 9.3.2. 在选举中进行投票,包含候选人姓名、得票数,假设有多为候选人,用结构体数组统计各候选人的得票数。

  • 9.3.3. 若将教师和学生的数据放在同一表格中。教师的数据包括编号、姓名、职业和职务,学生的数据包括编号、姓名、职业和班级。试编写程序填写表格。

  • 9.3.4.n个人围成一圈,从第s个人开始按顺时针1,2,3,···,m的顺序报数,数到m的人出圈,然后从出圈的下一个人开始重复此过程,输入所有出圈人的顺序。

二、实验内容

1、结构体变量的应用

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

  • 实验代码:
1 #include
2 main() 3 { struct date 4 { 5 int year; 6 int month; 7 int day; 8 }; 9 struct date a;10 int i;11 int days;12 printf("请输入年、月、日:");13 scanf("%d%d%d",&a.year,&a.month,&a.day);14 for(i=1;i

运行结果:

 

  • 问题分析:最后的days要减一才能得出真实答案。

2、结构体数组的应用

  • 问题的简单描述:在选举中,假设有6位候选人,有10个人参加投票(只能对一位候选人投票),用结构体数组统计各候选人的得票数。算法描述如图:

  • 实验代码
1 #include
2 #include
3 struct person 4 { 5 char name[20]; 6 int count; 7 }a[6]={
"zhang",0,"li",0,"wang",0,"zhao",0,"liu",0,"zhu",0}; 8 main() 9 {10 int i,j;11 char abc[20];12 for(i=1;i<=10;i++)13 {14 printf("请输入候选人的名字:");15 scanf("%s",abc); 16 for(j=0;j<6;j++)17 {18 if(strcmp(a[j].name,abc)==0) a[j].count++;19 }20 }21 for(j=0;j<6;j++)22 {23 printf("%s:%d\n",a[j].name,a[j].count);24 } 25 }

运行结果

 

  • 问题分析:在比较字符串时应该应用(strcmp(a[j].name,abc)形式才能正常编译,不然会报错。

3、共用体的应用

  • 问题的简单描述:编写程序填写表格。从键盘输入学生和教师的信息,若是学生,则班级/职务栏填入班级;若是教师,则班级/职务栏填入职称。算法描述如图:

  • 实验代码:
1 #include
2 #include
3 struct 4 { 5 int number; 6 char name[20]; 7 char job; 8 union 9 {10 int classes;11 char position[10];12 }categoty;13 }person[2];14 main()15 {16 int i;17 for(i=0;i<2;i++)18 {19 printf("请输入姓名、编号、职业:");20 scanf("%s%d%s",&person[i].name,&person[i].number,&person[i].job);21 if(person[i].job=='s')22 {23 printf("请输入班级:");24 scanf("%d",&person[i].categoty.classes);25 }26 else if(person[i].job=='t')27 {28 printf("请输入教师职称:");29 scanf("%s",&person[i].categoty.position);30 }31 else32 {33 printf("Input error!");34 abort();35 }36 }37 printf("\n");38 printf("编号\t姓名\t职业\t班级/职务\n");39 for(i=0;i<2;i++)40 {41 if(person[i].job=='s')42 printf("%d\t%s\t%c\t%d\n",person[i].number,person[i].name,person[i].job,person[i].categoty.classes); 43 else44 printf("%d\t%s\t%c\t%s\n",person[i].number,person[i].name,person[i].job,person[i].categoty.position);45 }46 }

运行结果:

 

  • 问题分析:在定义结构体内元素时,name需要使用数组,不然程序会直接异常关闭。

4、结构体指针的应用

  • 问题的简单描述:n个人围成一圈,从第s个人开始按顺时钟1,2,3.....,m的顺序报数,数到m的人出圈,然后从出圈的下一个人开始重复此过程,输入所有出圈人的顺序。n,s,m从键盘输入。算法描述如下:

  • 实验代码:
1 #include
2 #define N 10 3 struct child 4 { 5 int no; 6 int next; 7 }; 8 struct child link[N]; 9 main()10 {11 int i,n,m,s,count,h;12 printf("输入围圈人数,出圈报数,开始报数位置:");13 scanf("%d%d%d",&n,&m,&s);14 for(i=1;i<=n;i++)15 {16 if(i==n)17 link[i].next=1;18 else19 link[i].next=i+1;20 link[i].no=i;21 }22 count=0;23 if(s==1)24 h=n;25 else 26 {27 h=s-1;28 }29 printf("出圈顺序为:");30 while(count

运行结果:

 

  • 问题分析:最后输出留在圈中人数时,使用了count,发现结果总是出错,最后一个数字总是显示为8,最后改为link[i].no结果才正确。

 

三、实验小结

1、太相信书上所言,导致的错误不计其数,不能只相信书上,有时候还要加入自己的思考。

2、结构体和共用体变量一定要熟练运用,并且知道他们各自依靠何种方式存储。


 

转载于:https://www.cnblogs.com/AwakenZed/p/11107453.html

你可能感兴趣的文章
重要的话
查看>>
mysql多个TimeStamp设置(转)
查看>>
php中的占位符
查看>>
Strus2学习Exception处理集锦(一)
查看>>
BSS段 data段 text段 堆heap 和 栈stack
查看>>
数据库创建好之后如何创建scott用户
查看>>
关于RichTextBox字体的问题
查看>>
关于今天很热的--FizzBuzzWhizz
查看>>
EBS销售订单挑库发放处理程序
查看>>
APP的内部多语言配置
查看>>
sql 查询表的字段数量
查看>>
POJ-2965 The Pilots Brothers' refrigerator---思维题
查看>>
crontab报错
查看>>
docker内存限制
查看>>
勇者斗恶龙(The Dragon of Loowater,UVa 11292 )
查看>>
C# ToString格式大全
查看>>
博客园美化代码备份
查看>>
Android 对话框(Dialog)大全 建立你自己的对话框
查看>>
Android Studio简单使用
查看>>
2012年CES大展前瞻:微软或推Win8平板电脑
查看>>