• 第九章实验报告


    C程序设计实验报告

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

    姓名:林胜臣  实验地点:第一教学楼514教室   实验时间:2018年6月26日

    一、实验目的与要求

    1、掌握结构体类型说明和结构体变量、数组、指针的定义方法及使用。
    2、学会引用结构体中成员。
    3、掌握利用指向结构体的指针成员构成链表的基本算法。
    4、了解联合体类型和枚举类型的说明、其变量的定义及赋初始值的方法。
    5、了解联合体类型变量中成员的储存结构,学会引用各成员中的数据。
    6、学习正确引用枚举类型常量,了解如何对枚举类型变量进行操作。

    二、实验内容

    1、实验练习:结构体变量的应用(9.3.1)

    1问题的简单描述:试用结构体类型描述年、月、日,输入一个日期,统计该日期是本年度第几天。

    2实验流程图:

    3实验代码:

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

    结果:

    分析:if语句中i=1,3,5,7,8,10应该每个都用或语句。

    2、实验练习:结构体数组的应用(9.3.2)

    1问题的简单描述:

    2实验流程图:

    3实验代码:

    #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+=1; 
        }
        for(j=0;j<6;j++)
        printf("%s:%d
    ",a[j].name,a[j].count); 
    } 

    结果:

    分析:在此题用到了strcmp函数,使输入的名字与结构体数组里的名字进行对比,若一样就会返回一个值:0,所以只要判断返回值是否为0即可做出此题。

    3、实验练习:公用体的应用(9.3.3)

    1问题的简单描述:

    2实验流程图:

    3实验代码:

    #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++)
        {
            fflush(stdin);
            scanf("%c,%d,%s",&person[i].job,&person[i].number,person[i].name );
            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();
                  return 0;
                }
         } 
         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);
    
         }
        }

    结果:

    分析:根据书本上的代码没有成功输出,与同学讨论后结构体中的char *name,在输入时一直没有读取值,改成数组才能读取。

    4、实验练习:结构体指针的应用(9.3.4)

    1问题的简单描述:

    2实验流程图:

    3实验代码:

    #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(m<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[h].next);
     } 

    结果:

    分析:问题无。

    三、实验小结

    了解strcmp()函数的用法:

    功能:比较字符串a和b。
      函数形式:strcmp(a,b)

           用法:
      当a<b时,返回值<0
      当a=b时,返回值=0
      当a>b时,返回值>0。

      退出程序用abort函数。

      书本上也会有错误,有时要用到扎实的基础来改正书本上的一些错误。

  • 相关阅读:
    初涉线性基
    Codechef December Challenge 2018 Division 2
    【贪心】bzoj1592: [Usaco2008 Feb]Making the Grade 路面修整
    请求库之requests
    爬虫基本原理
    Flask-SQLAlchemy
    虚拟环境
    自定义验证规则以及中间件简单介绍
    Form组件归类
    分页与中间件
  • 原文地址:https://www.cnblogs.com/ganyilinshengchen/p/11110404.html
Copyright © 2020-2023  润新知