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

c程序实验报告

姓名:张涛    实验地点:教学楼514教室    实验时间:6月26日

一、本章要点

1.通过实验理解结构体和共用体的数据结构

2.结构体、共用体中数组的使用及变量的赋值

3.结构体和共用体定义时的嵌套使用(嵌套使用的结构体必须先定义)

二、实验内容

1.实验练习:9.1

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

流程图

d1c806d719fa596201437eed5197cff1.png

实验代码

#includemain()

{structdate

{intyear,month,days;

}a;inti,days;

printf("请输入年、月、日\n");

scanf("%d,%d,%d",&a.year,&a.month,&a.days);for(i=1;i

{if(i==1||i==3||i==5||i==7||i==8||i==10)days+=31;else if (i==4||i==6||i==9||i==11)days+=30;else if (i%400==0)days+=29;else days+=28;

}

days+=a.days;

printf("%d年%d月%d日是该年的第%d天",a.year,a.month,a.days,days);

}

运行结果

774b6291f81d52d90c244c44421de9d7.png

问题:注意结构体的引用格式1、引用结构体变量中的成员。2、将结构体变量作为一个整体来使用。

2.实验练习9.2

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

流程图

a7ca5d50ca8fadb2e9156053a2db10ec.png

实验代码:

#include#include

structperson

{char name[20];intcount;

};struct person a[6]={"zhang",0,"li",0,"wang",0,"zhao",0,"liu",0,"zhu",0};

main()

{inti,j;char abc[20];for(i=1;i<=10;i++)

{

printf("请输入候选人名字\n");

scanf("%s",abc);for(j=0;j<6;j++)if(strcmp(abc,a[j].name)==0)

a[j].count++;

}for(j=0;j<6;j++)

printf("%s,%d\n",a[j].name,a[j].count);

}

运行结果

2709ed088b7a95afb9779c3de3e244ef.png

问题:

3.实验练习:9.3

问题描述:

编写程序填写表格,从键盘输入学生和教师的信息,若是学生,则班级/职称栏填入班级;若是教师,则班级/职称栏填入职称。

流程图

809c86bd94e39f7dc688e95bd7104c6d.png

实验代码

# include #include

struct{intnumber;char name[20];charjob;

union

{intclasses;char position[10];

}category;

}person[2];

main()

{inti;for (i=0; i<2; i++)

{

printf("请输入姓名、学号、职位:");

scanf ("%s%d %c", person[i].name, &person[i].number, &person[i].job);if(person[i].job=='s')

{

printf("请输入班级:");

scanf("%d",&person[i].category.classes);

}else if(person[i].job=='t')

{

printf("请输入职位:");

scanf("%s",&person[i].category.position);

}else{

printf("input error!");

abort();

}

}

printf("\n");

printf("编号 姓名 职业 班级/职务\n");for(i=0;i<2;i++)

{if(person[i].job=='s')

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

}

}

运行结果

1068fd18943f4ad67579047f1547f3ec.png

3a22fefab9302a72d22ca9956a23e90f.png

问题:这题主要是看对于联合体的理解,共用的理解很重要,即不同类型的数组项在内存中所占用的其实单元是一样的。

4.实验练习:9.4

问题描述:

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

流程图

8f27b898a0af87c5544240f96abca68d.png

实验代码

#include

#define N 10

structchild

{intno;intnext;

};struct child link[30];

main()

{inti,n,m,s,count,h;

printf("输入围圈人数:出圈报数,开始报数位置:");

scanf("%d%d%d",&n,&m,&s);for (i=1;i<=n;i++)

{if(i==n)

link[i].next=1;elselink[i].next=i+1;

link[i].no=i;

}

count=0;if(s==1)h=n;else h=s-1;

printf("出圈顺序为:");while(count

{

i=0;while(i!=m)

{

h=link[h].next;if(link[h].no)

i++;

}

printf("%d,",link[h].no);

link[h].no=0;

count++;

}for(i=1;i<=n;i++)if(link[i].no!=0)

printf("%d",link[i].no);

}

运行结果

0a210b469a36f3d5635a759e653bb456.png

问题:无

三、实验小结

今天的实验主要加深了结构体、联合体,链表的理解。在实际应用中,我们通常需要由不同类型的数据来构成一个整体,比如学生这个整体可以由姓名、年龄、身高等数据构成,这些数据都具有不同的类型,姓名可以是字符串类型,年龄可以是整型,身高可以是浮点型。为这就是结构体,它允许内部的元素是不同类型的。需要使几种不同类型的变量存放到同一段内存单元中,几个变量互相覆盖。这种几个不同的变量共同占用一段内存的结构,称作“共用体”类型结构,简称共用体,也叫联合体。这节课就是从定义出发加深理解。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值