• 第九章构造数据类型实验


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

    第九章构造数据类型实验

    一、实验项目:

    1、结构体变量的应用。

    2、结构体数组的应用。

    3、共用体的应用。

    4、机构体指针的应用。

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

    二、实验目的

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

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

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

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

    三、实验内容

    实验9.3.1

    1、问题分析

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

    2、流程图:

     3、实验代码:

    #include<stdio.h>
    main()
    {   
        struct date
        {
            int year,month,days;
        }a;
        int i,days;
        printf("请输入年、月、日
    ");
        scanf("%d,%d,%d",&a.year,&a.month,&a.days);
    for(i=1;i<a.month;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、运行结果:

    实验9.3.2

    1、问题分析:

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

    2、流程图:

    3、实验代码:

    #include<stdio.h>
    #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
    ",a[j].name,a[j].count);
      } 

    4、运行结果:

    实验9.3.3

    1、实验要求:

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

    2、流程图:

     3、实验代码:

    # include <stdio.h>
    #include<stdlib.h>
    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("
    ");
        printf("编号    姓名    职业    班级/职务
    ");
        for(i=0;i<2;i++) 
        {
        if(person[i].job=='s')
        printf ("%s   %d     %c      %d
    ", person[i].name, person[i].number, person[i].job, person[i].category.classes);
        else
        printf ("%s   %d     %c      %s
    ", person[i].name, person[i].number, person[i].job, person[i].category.position);
        }
    }

    4、运行结果:

    5、问题分析:

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

    实验9.3.4

    1、实验要求:

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

    2、流程图

    3、实验代码

    #include<stdio.h>
    #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(count<n-1)
        {
            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、运行结果:

    四、实验小结

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

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

  • 相关阅读:
    python学习:匿名函数
    python学习:递归列出目录里的文件
    python学习:函数的递归调用
    ios开发解决遍历删除数组对象报错
    ansible入门
    git入门-分支
    Swift 使用CollectionView 实现图片轮播封装就是这样简单
    iOS复杂动画之抽丝剥茧(Objective-C & Swift)
    大数据
    点击UITableView的cell展开收缩
  • 原文地址:https://www.cnblogs.com/123456l/p/11109466.html
Copyright © 2020-2023  润新知