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

    第九章 构造数据类型实验

    姓名:方缙   实验地点:514教室    实验时间:4.30

     实验项目:

     

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

     

    9.3.2. 在选举中进行投票,包含候选人姓名、得票数,假设有多为候选人,用结构体数组统计各候选人的得票数。

     

    9.3.3. 若将教师和学生的数据放在同一表格中。教师的数据包括编号、姓名、职业和职务,学生的数据包括编号、姓名、职业和班级。试编写程序填写表格。

     

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

    二、实验内容

    1、结构体变量的应用

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

    实验代码:

     1 #include<stdio.h>
    2 main()
    3 { struct date
    4     {
    5     int year;
    6     int month;
    7     int day;
    8     };
    9  struct date a;
    10     int i;
    11     int days;
    12     printf("请输入年、月、日:");
    13     scanf("%d%d%d",&a.year,&a.month,&a.day);
    14     for(i=1;i<a.month;i++)
    15     {
    16         if(i==1||i==3||i==5||i==7||i==8||i==10)
    17         days+=31;
    18         else if(i==4||i==6||i==9||i==11)
    19         days+=30;
    20         else if((a.year%4==0&&a.year%100!=0)||a.year==400)
    21         days+=29;
    22         else days+=28;
    23     }
    24     days+=a.day;
    25     printf("%d年%d月%d日是该年的第%d天",a.year,a.month,a.day,days-1);
    26 }

     

    运行结果:

     

    问题分析:这个实验没有话太多的时间,还是比较简单的相对其他的来说。

    2、结构体数组的应用

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

    实验代码

    1 #include<stdio.h>
    2 #include<string.h>
    3 struct person
    4 {
    5     char name[20];
    6     int count;
    7 }a[6]={"zhang",0,"li",0,"wang",0,"zhao",0,"liu",0,"zhu",0};
    8 main()
    9 {
    10     int i,j;
    11     char abc[20];
    12     for(i=1;i<=10;i++)
    13     {
    14         printf("请输入候选人的名字:");
    15         scanf("%s",abc);   
    16         for(j=0;j<6;j++)
    17             {
    18                 if(strcmp(a[j].name,abc)==0) a[j].count++;
    19             }
    20     }
    21     for(j=0;j<6;j++)
    22     {
    23         printf("%s:%d ",a[j].name,a[j].count);
    24     }   
    25 }

     

    运行结果

     

    问题分析:在比较字符串时应该应用(strcmp(a[j].name,abc)形式才能正常编译,不然会报错。

    3、共用体的应用

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

    实验代码:

    1 #include<stdio.h>
    2 #include<stdlib.h>

    3 struct                                                                                                                                                              
    4 {
    5     int number;
    6     char name[20];
    7     char job;
    8     union
    9     {
    10         int classes;
    11         char position[10];
    12     }categoty;
    13 }person[2];
    14 main()
    15 {
    16     int i;
    17     for(i=0;i<2;i++)
    18     {
    19         printf("请输入姓名、编号、职业:");
    20         scanf("%s%d%s",&person[i].name,&person[i].number,&person[i].job);
    21         if(person[i].job=='s')
    22             {
    23             printf("请输入班级:");
    24             scanf("%d",&person[i].categoty.classes);
    25             }
    26         else if(person[i].job=='t')
    27             {
    28             printf("请输入教师职称:");
    29             scanf("%s",&person[i].categoty.position);
    30             }
    31         else
    32         {
    33             printf("Input error!");
    34             abort();
    35         }
    36     }
    37     printf(" ");
    38     printf("编号 姓名 职业 班级/职务 ");
    39     for(i=0;i<2;i++)
    40         {
    41             if(person[i].job=='s')
    42               printf("%d %s %c %d ",person[i].number,person[i].name,person[i].job,person[i].categoty.classes);   
    43             else
    44               printf("%d %s %c %s ",person[i].number,person[i].name,person[i].job,person[i].categoty.position);
    45         }
    46 }

     

    运行结果:

     

    问题分析:这个程序按照步骤完成时,程序不会报错,但是运行的时候,就会直接崩溃,找了好久原因才找到,在定义name时要用数组来定义,否者只有一个字节的内存,就会出错,导致结果出不来。

    4、结构体指针的应用

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

    实验代码:

     1 #include<stdio.h>
    2 #define N 10
    3 struct child
    4 {
    5     int no;
    6     int next;
    7 };
    8 struct child link[N];
    9 main()
    10 {
    11     int i,n,m,s,count,h;
    12     printf("输入围圈人数,出圈报数,开始报数位置:");
    13     scanf("%d%d%d",&n,&m,&s);
    14     for(i=1;i<=n;i++)
    15     {
    16         if(i==n)
    17             link[i].next=1;
    18         else
    19             link[i].next=i+1;
    20         link[i].no=i;
    21     }
    22     count=0;
    23     if(s==1)
    24         h=n;
    25     else
    26         {
    27             h=s-1;
    28         }
    29     printf("出圈顺序为:");
    30     while(count<n-1)
    31     {
    32         i=0;
    33         while(i!=m)
    34         {
    35             h=link[h].next;
    36             if(link[h].no)
    37                 i++;
    38         }
    39         printf("%d, ",link[h].no);
    40         link[h].no=0;
    41         count++;
    42     }
    43     for(i=1;i<=n;i++)
    44     {
    45         if(link[i].no!=0)
    46         printf("%d",link[i].no);
    47     }
    48 }

     

     

    运行结果:

     

    问题分析:刚开始一直结果一直显示全是1,最后改为link[i].no结果才正确。

     

    三、实验小结

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

    2、到了后面书上的实验提示代码出错的越来越多,不知道是不是在考验我们,认真思索每一步的代码,不要轻信书上的。

  • 相关阅读:
    对软件未来走向的看法
    ubuntu:configure error:cannot find ssl libraries
    linux CentOS普通用户无法从ssh登录解决方案
    Can't locate IPC/Run.pm in @INC
    我也学erlang(一)
    我也学erlang(二)
    我也学erlang(四)
    第一篇献给church(丘奇)
    出现epoll failed: Bad file descriptor的原因
    最近看代码的一点总结
  • 原文地址:https://www.cnblogs.com/fj001024/p/11110678.html
Copyright © 2011-2022 走看看