zoukankan      html  css  js  c++  java
  • 第九章实验报告

    c程序实验报告

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

    一、本章要点

    1.通过实验理解结构体和共用体的数据结构
    2.结构体、共用体中数组的使用及变量的赋值
    3.结构体和共用体定义时的嵌套使用(嵌套使用的结构体必须先定义)

    二、实验内容

    1.实验练习:9.1

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

    流程图

    实验代码

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

    运行结果

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

    2.实验练习9.2

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

    流程图

    实验代码:

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

    运行结果

    问题:

    3.实验练习:9.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.实验练习:9.4

    问题描述:

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

    流程图

    实验代码

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

    运行结果

    问题:


     

    三、实验小结

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

  • 相关阅读:
    LeetCode 40. 组合总和 II(Combination Sum II)
    LeetCode 129. 求根到叶子节点数字之和(Sum Root to Leaf Numbers)
    LeetCode 60. 第k个排列(Permutation Sequence)
    LeetCode 47. 全排列 II(Permutations II)
    LeetCode 46. 全排列(Permutations)
    LeetCode 93. 复原IP地址(Restore IP Addresses)
    LeetCode 98. 验证二叉搜索树(Validate Binary Search Tree)
    LeetCode 59. 螺旋矩阵 II(Spiral Matrix II)
    一重指针和二重指针
    指针的意义
  • 原文地址:https://www.cnblogs.com/zt1037054045/p/11111444.html
Copyright © 2011-2022 走看看