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

    C程序设计实验报告

    实验项目:构造数据类型实验

    姓名:罗子健 实验地点:物联网实验室 实验时间:2019年6月26日

    一、实验目的与要求

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

    (2)学会引用结构体中的成员。

    (3)掌握利用指向结构体的指针成员构成链表的基本算法。

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

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

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


     

    二、实验内容

    9.3.1 结构体变量的应用

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

    2、实验流程图、代码和结果:

     

     1 /*ex9_1*/
     2 #include<stdio.h>
     3 main()
     4 { struct date
     5  { int year;
     6    int month;
     7    int day;/*含有年、月、日、3个成员*/ }
     8    a;/*定义结构体变量a*/
     9    int i,days;/*定义其他变量*/
    10  printf("输入年、月、日:");/*提示“输入年、月、日”*/
    11  scanf("%d%d%d",&a.year,&a.month,&a.day);/*输入“年、月、日”*/
    12   for(i=1;i<a.month;i++)
    13   { if (i==1||i==3||i==5||i==7||i==8||i==10) days+=31;
    14     else if(i==4||i==6||i==9||i==11) days+=30;
    15     else if(a.year%100!=0&&a.year%4==0||a.year%400==0) days+=29;
    16         else days+=28;} 
    17     days+=a.day-1;
    18     printf("%d年%d月%d日是该年的第%d天",a.year,a.month,a.day,days);/*输出结果*/ 
    19 }

     

    3、问题分析:day要进行-1,不然会比实际天数多1。

    9.3.2 结构体数组的应用

    1、问题的简单描述:

    2、实验流程图、代码和结果:

     

     1 /*ex9_2.c*/
     2 #include "stdio.h"
     3 #include<string.h>
     4 struct person
     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 { int i,j; char abc[20];
    10   for(i=1;i<=10;i++)
    11   { printf("输入候选人姓名:");/*提示“输入候选人名字”*/
    12       scanf("%s",abc); /*输入候选人名字*/
    13    for(j=0;j<6;j++)
    14    if(strcmp(abc,a[j].name)==0)
    15    a[j].count++;};
    16    for(j=0;j<6;j++)
    17    printf("%s:%d
    ",a[j].name,a[j].count);/*输入各候选人的名字和得票数*/ 
    18 }

     

    3、问题分析:用到了strcmp比较函数进行比较来判断该候选人的票数是否加一

    9.3.3 共用体的应用

    1、问题的简单描述:

    2、实验流程图、代码和结果:

     

     1 /*ex9_3.c*/
     2 #include "stdio.h"
     3 #include<stdlib.h>
     4 struct
     5 {    int number;
     6     char name[99];
     7     char job;
     8     union
     9     {    int classes;
    10          char position[10];    
    11     }category;
    12 }person[2];
    13 main()
    14 {    int i;
    15     for(i=0;i<2;i++)
    16     {    scanf("%s%d%s",&person[i].name,&person[i].number,&person[i].job);/*输入某人的编号、姓名、职业*/ 
    17         if(person[i].job=='s')
    18             scanf("%d",&person[i].category.classes);
    19         else if(person[i].job=='t') 
    20             scanf("%s",&person[i].category.position);/*输入教师的职称*/
    21         else
    22         {    printf("input error!");
    23             abort();/*若输入错误,则退出程序*/ 
    24         } 
    25     }
    26     printf("
    ");
    27     printf("编号    姓名    职业    班级/职务
    ");
    28         for(i=0;i<2;i++)
    29             if(person[i].job=='s')
    30                 printf("%d    %s    %c    %d
    ",person[i].number,person[i].name,person[i].job,person[i].category.classes);/*输出学生的记录*/
    31             else
    32                 printf("%d    %s    %c    %s
    ",person[i].number,person[i].name,person[i].job,person[i].category.position);
    33 }

     

    3、问题分析:若要调用abort()函数退出程序,就要有包含stdlib.h的头文件。

    9.3.4 结构体指针的应用

    1、问题的简单描述:

    2、实验流程图、代码和结果:

     

     1 /*ex9_4.c*/
     2 #include<stdio.h>
     3 #define N 10        /*最多围圈人数*/
     4 struct child
     5 {
     6     int no;            /*人员编号*/ 
     7     int next;        /*下一人员编号*/
     8 } ;
     9 struct child link[99];        /*定义结构体数组link[N],描述所有人员*/
    10 main()
    11 {
    12     int i,n,m,s,count,h;        /*定义变量*/
    13     printf("输入围圈人数,出圈人数,开始报数位置:");
    14     scanf("%d%d%d",&n,&m,&s);/* 输入围圈人数n,出圈人数m,开始报数位置s*/
    15     for(i=1;i<=n;i++)
    16     {
    17         if(i==n)
    18             link[i].next=1;
    19         else
    20             link[i].next=i+1;
    21         link[i].no=i;
    22     }
    23     count=0;
    24     if(s==1)h=n;else h=s-1;
    25     printf("出圈顺序为:");
    26     while(count<n-1)/*出圈人数<围圈人数-1*/ 
    27     {
    28         i=0;
    29         while(i!=m)
    30         {
    31             h=link[h].next;
    32             if(link[h].no)
    33                 i++;
    34         }
    35         printf("%d, ",link[h].no);
    36         link[h].no=0;
    37         count++;
    38     }
    39     for(i=1;i<=n;i++)
    40     if(link[i].no!=0)
    41     printf("%d",link[i].no);/*输出最后留在圈中的人数*/ 
    42 } 

    3、问题分析:定义数组link[N],N要定义大一些,N要大于n。


     

    三、实验小结(在本次实验中收获与不足)

    要调用abort()函数退出程序,就要有包含stdlib.h的头文件。不然就不能中止。

  • 相关阅读:
    Visual Studio 连接不上NuGet 官方程序包源的解决办法
    Microsoft Toolkit 2.5下载 – 一键激活Windows 8.1/2012 R2/Office 2013
    Intel® Ethernet Connection I217-V 网卡驱动(win10 ,2012)
    flashfxp3.41中文版注册码:(适合最新版本)
    Fiddler对安卓应用手机抓包图文教程
    网址检查器1.0
    Win10打不开chm文件的解决办法
    Android HTTP通讯
    对Android开发者有益的40条优化建议
    IIS下PHP的三种配置方式比较
  • 原文地址:https://www.cnblogs.com/gnxyxlzj/p/11109990.html
Copyright © 2011-2022 走看看