zoukankan      html  css  js  c++  java
  • 第九章 结构数据类型实验

    C程序设计实验报告

    实验项目:

    1、结构体变量的应用

    2、结构体数组的应用

    3、共用体的应用

    4、结构体指针的应用

    姓名:刘健斌    实验地点:教室514   实验时间:6.26

    一、本章要点

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

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

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

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

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

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

    二、实验内容

    9.3.1、实验练习:

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

    2实验代码:

    #include<stdio.h>
    main()
    {
        struct date
        {
            int years,months,days;
        }a;
        int i,years,days=0;
        printf("请输入年、月、日:");
        scanf("%d%d%d",&a.years,&a.months,&a.days);
        for(i=1;i<a.months;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(years%4==0&&years%100==0||years%400!=0)
                days+=29;
            else
                days+=28;
        }
        days+=a.days;
        printf("%d年%d月%d日是该年的第%d天。",a.years,a.months,a.days,days);
    }

    输出:

    3问题分析:开头要定义days=0,不然天数就会多一天

    9.3.2、实验练习:

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

    2实验代码:

    #include<stdio.h>
    #include<string.h>
    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[i);
            for(j=0;j<6;j++)
            {
                if(strcmp(a[j].name,&abc[i])==0)
                    a[j].count++; 
             } 
        }
        for(j=0;j<6;j++)
        {
            printf("%s:%d
    ",a[j].name,a[j].count);
        }
    }

    输出:

    3问题分析:scanf里面的是&abc[i],如果是&abc就没结果

    9.3.3、实验练习:

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

    2实验代码:

    #include<stdio.h>
    #include<stdlib.h>
    struct
    {
    int number;
    char name[10];
    char job;
    union{
    int classes;
    char position[10];
    }category;
    }person[2];
    main()
    {
    int i;
    for(i=0;i<2;i++)
    {
    printf("请输入编号、姓名、职业:");
    scanf("%d%s%s",&person[i].number,&person[i].name,&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("%d %s %c %d ",person[i].number,person[i].name,person[i].job,person[i].category.classes);
    else
    printf("%d %s %c %s ",person[i].number,person[i].name,person[i].job,person[i].category.position);
    }
    }

    输出:

    3问题分析:name要写长度,之前一直写的是*name,输出不出来

    9.3.4、实验练习:

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

    2实验代码:

    #include<stdio.h>
    #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<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);
    }    

    输出:

    3问题分析:无

    三、实验小结

    在这一章我觉得书上的代码并不一定是正确的,例如:9.3.3中char *name,这样是输出不了的。所以不能一味地抄书,还是要多理解。

  • 相关阅读:
    centos网卡一致性命名规则
    CloudBoot裸机部署服务器
    vmware-nic teaming
    电商 Excel 列 连接,类似SQL里面的 join
    Layui 多选
    电商工具 谷歌插件 版本 2021-06-11
    电商工具 谷歌插件 数据抓取 数据下载 生意参谋的访客数据、淘宝后台订单、主图、详情图、评论、物流、直通车数据
    其它 VS Code 配置选中的文字
    C# 跨域
    PS 字体的使用
  • 原文地址:https://www.cnblogs.com/strongest/p/11109265.html
Copyright © 2011-2022 走看看