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

实验项目:

结构体变量的应用

结构体数组的应用

共用体的应用

结构体指针的应用

姓名:陈以鹏     实验地点: 514实验室       实验时间:2019年6月26日

一、实验目的与要求

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

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

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

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

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

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

二、实验内容

9.2.1 结构体变量的应用

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

850d96ccd1d86e94ed63e95fc799e716.png

2、实验代码

48304ba5e6f9fe08f3fa1abda7d326ab.png

#include

main()

{

struct date

{

int year;

int month;

int day;

};

struct date a;

int i,days=0;

printf("输入年,月,日:");

scanf("%d%d%d",&a.year,&a.month,&a.day);

for(i=1;i

{

if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)

days+=31;

else if(i==4||i==6||i==9||i==11)

days+=30;

else if(a.year/4==0&&a.year%100!=0||a.year%400==0)

days+=29;

else

days+=28;

}

days+=a.day+1;

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

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

fb4692d616cb7c5e5aa6f43f5e2f6d5c.png

3、问题分析

问题:

aad71f4919f6202d6c2cd67e1d500c86.png

解决办法:将

if(i==1||3||5||7||8||10||12)

days+=31;

else if(i==4||6||9||11)

days+=30;

改为

if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)

days+=31;

else if(i==4||i==6||i==9||i==11)

days+=30;

9.3.2 结构体数组的应用

1、简单问题描述:在选举中进行投票,包含候选人姓名,得票数,假设有多位候选人,用结构体数组统计各候选人的得票数。程序流程图如下所示:

724ef77ca3d0196a3536ceab746d65bb.png

2、实验代码

48304ba5e6f9fe08f3fa1abda7d326ab.png

#include

#include

struct person

{

char name[20];

int count ;

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

main()

{

int i,j;

char abc[20];

for(i=1;i<=10;i++)

{

printf("输入候选人名字:");

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

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

b56f1f2e50c37e0ee4327683f3b8cced.png

3、问题分析

问题:刚开始并不知道“若第j个候选人与输入的名字相同,则第j位加一票”怎么用程序代码表达。

解决办法:百度,用一个函数“strcmp”。

9.3.3   共用体的应用

1、简单问题描述:若将教师和学生的数据放在统一表格中。教师的数据包括编号,姓名,职业和职务,学生的数据包括编号,姓名,职业和班级。试编写程序填写表格。程序流程图如下所示:

c4ab89fbf425eccfe013b01584756f53.png

2、实验代码

48304ba5e6f9fe08f3fa1abda7d326ab.png

#include

#include

struct

{

int number;

char name[30];

char job;

union

{

int classes;

char position[10];

}category;

}person[2];

main()

{

int i;

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

{

printf("请输入编号、姓名、职业:");

scanf("%s%d%s",&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("编号\t\t姓名\t\t职业\t\t班级/职务\n");

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

{

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

{

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

}

else

{

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

}

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

7fa6529b9f4162555f312afab9bd6d30.png

3、问题分析

问题:无论怎样输入都是如图所示:

7682153ae123c9cbcc549db217e3ddb0.png

解决办法: scanf("%d%s%s",&person[i].number,&person[i].name,&person[i].job);改为scanf("%s%d%s",&person[i].name,&person[i].number,&person[i].job);因为我输入的顺序和字符类型不同。

9.3.4  结构体指针的应用

1、简单问题描述:n个人围成一圈,从第s个人开始按顺时钟1,2,3……,m,的顺序报数,数到m的人出圈,然后从出圈的下一个人开始重复此过程,输出所有出圈人的顺序。程序流程图如下所示:

27777241ebbdfa445cfaf8779e2a760d.png

2、实验代码

48304ba5e6f9fe08f3fa1abda7d326ab.png

#include

#define N 10

struct child

{

int no;

int next;

};

struct child link[N];

main()

{

int i,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;

else

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

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

8cb5f3c4bd62bcb7f7ba93daf4d21779.png

3、问题分析

按照流程图和书上提示来,并没有太大的问题。

三、实验小结

收获:

1、C语言中,要用if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)表示或者,而不是用if(i==1||3||5||7||8||10||12)表示。

2、strcmp(s,n)用于比较字符串s和n。

3、输入的内容要和scanf中的字符型保持一致,否则无法达到结果。

4、\t为输出空格。

5、c语言的难度慢慢加大了,还好的是已经到了这门课程的结尾,认真学好最后的部分,基本的问题就可以解决了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值