第九章构造数据类型实验

---恢复内容开始---

第九章构造数据类型实验

一、实验项目:

1、结构体变量的应用。

2、结构体数组的应用。

3、共用体的应用。

4、机构体指针的应用。

姓名:李儿龙    实验地点:教学楼514教室     实验时间:6月28日

二、实验目的

1、巩固学生对结构体这种数据机构概念的理解,增强程序设计能力。

2、巩固学生对结构体这种数据机构概念的理解,增强程序设计能力。

3、巩固学生对结构体、共用体这种数据机构概念的理解,增强程序设计能力。

4、巩固学生对结构体这种数据机构概念的理解,增强程序设计能力。

三、实验内容

实验9.3.1

1、问题分析

  • 定义结构体类型struct data,它含有年、月、日3个成员。
  • 定义struct data类型的变量,并从键盘输入初值。
  • 利用循环语句,计算天数;
  • 利用分支语句判断闰年;

2、流程图:

第九章构造数据类型实验_第1张图片

 

 3、实验代码:

#include
main()
{   
    struct date
    {
        int year,month,days;
    }a;
    int i,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);
 } 

4、运行结果:

第九章构造数据类型实验_第2张图片

实验9.3.2

1、问题分析:

  • 定义候选人struct person结构体,含有姓名、初始票为0;
  • 定义struct person结构体数组,人数自定,初始值数为0;
  • 利用循环输入候选人的名字,该人员票数加1;
  • 输入的候选人不是规定的候选人时,相当于废票,不累计;

2、流程图:

第九章构造数据类型实验_第3张图片

3、实验代码:

 

#include
#include<string.h>
struct person
{
    char name[20];
    int count;
 };
 struct person 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);
  } 

 

4、运行结果:

第九章构造数据类型实验_第4张图片

实验9.3.3

1、实验要求:

  • 定义结构体类型,其成员有编号、姓名、职业和班级;
  • 定义该结构体类型的数组,可有若干个数组元素;
  • 利用循环语句输入每条记录的数据,若该记录的职业为“s”,则该记录是学生的,输入该学生的班级;若该记录的职业为“t”,则该记录是教师的,输入该教师的职务;
  • 根据记录的职业判断,使用哪个printf()语句输出记录;

2、流程图:

第九章构造数据类型实验_第5张图片

 

 3、实验代码:

# include 
#include
struct 
{
    int number;
    char name[20];
    char job;
    union
    {
        int classes;
        char position[10];
    }category;
}person[2];
main()
{
    int i;
    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);
    else
    printf ("%s   %d     %c      %s\n", person[i].name, person[i].number, person[i].job, person[i].category.position);
    }
}

4、运行结果:

第九章构造数据类型实验_第6张图片

5、问题分析:

由流程图可在输入名字、编号、职业和班级(职务)的输入不是同时的,输入班级应该在判断完成之后。

实验9.3.4

1、实验要求:

  • 定义结构体类型,其成员有人员编号、下一个人员编号;
  • 定义结构体类型的数组,可用n个数组元素;
  • n个人围成一圈,可以考虑用结构体数组元素中的下一人员编号来实现,但最后一个的元素的下一个人员编号指向第一个。

2、流程图

第九章构造数据类型实验_第7张图片

3、实验代码

#include
#define N 10
struct child
{
    int no;
    int next;
};
struct child link[30];
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(count1)
    {
        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);
}

4、运行结果:

第九章构造数据类型实验_第8张图片

四、实验小结

1、在使用结构体函数嵌套时,要注意结构体名称逐级输入。

2、数组名可以代表首地址不用加&。

你可能感兴趣的:(第九章构造数据类型实验)