• 第八次试验报告


    c语言实验报告

    构造数据类型实验(第九章)

    姓名: 赖倍仟 实验地点: 514物联网实验室 实验时间:2019年6月26日

    一、实验目的和要求

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

    二、实验内容

    (1)实验9.3.1结构体变量的应用

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

    3、程序代码:

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

    4、运行结果:

    5、问题分析:
    这一题因为是常做的题,只是换了一种方式解决问题,刚开始不是很会使用结构体中的变量,容易忘记加上结构体名,自己还遇到的小问题是最后一个月想当然的加上十二月的31天,,唉唉,太愚蠢了,应该是根据输入的数据来加最后一个月的天数。

    (2)实验9.3.2结构体数组的运用

    1、问题描述:
    在选举中,假设有6位候选人,有10个人参加投票(只能对一位候选人投票),用结构体数组统计各候选人的得票数。
    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);
    		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);
    }
    

    4、运行结果:

    5、问题分析:
    做这一题的时候还是比较懵,刚开始的时候连for循环结构的i,j的作用都捋不顺,还有结构体数组里面的对应的i,j也很迷。过了一段时间,再加上和同学的讨论才搞清楚,然后还有就是,字符串的比较要用到strcmp函数,strcmp(abc,a[j].name)==0,所以各种函数的用法和头文件都要多熟悉,多记。

    (3)实验9.3.3共用体的应用

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

    3、程序代码:
    我的:

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

    同学的:

    #include<stdio.h>
    #include<stdlib.h>
    struct
          {
              int number;
              char name[30];
              char job;
              union
              {
                  int classes;
                  char position[10];
              }category;
           }person[2];
    main()
    {
        int i;
        for(i=0;i<2;i++)
        {
            scanf("%s%d%s",&person[i].name,&person[i].number,&person[i].job);
            if(person[i].job=='s')
            {
                scanf("%d",&person[i].category.classes);
            }
            else if(person[i].job=='t')
            {
                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);
        }
        
            }
    

    4、运行结果:

    5、问题分析:
    这一题就很烦了,自己回来敲代码,总是出问题,首先书上也是神奇的定义了一个指针name,但我们需要的是一个可以储存字符串的数组元素,然后它本身的代码输入的编号,名字,职业啊的顺序跟他的示例输入输出都不一样,也是挺迷惑人的,然后因为自己总有错误,就将别人的代码复制过来,照着别人的敲,看下自己到底错哪里吧,可是后面自己的还是有问题,内心实在是很烦躁,最后还是叫别人来看,才发现我在输入的那里忘记加了寻址符。唉,还是要用好的心态才能找出漏洞啊。

    (4)实验9.3.4结构体指针的应用

    1、问题描述:
    n个人围成一个圈,从第s个人开始按顺时钟1,2,3,...,m的顺序报数,数到m的人出圈,然后从出圈的下一个人开始重复此过程,输出所有出圈人的顺序,n,s,m从键盘输入。
    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(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);
    }
    

    4、运行结果:

    5、问题分析:
    经过了前面那些困难,这一题总算是更熟悉更顺利了,按着提示代码和流程图来,然后输入的围圈人数要比自己定义的N要小,然后就是注意,出圈的人不再参与报数,要将他的编号置为0,当人数只剩下一人时,报数循环就要停止。

    三、实验小结

     这也差不多是我们C语言课的最后实验和实验报告了,但是我们的学习并不会因此而停止,代码要继续敲,各种函数和结构还有头文件都要继续熟悉积累,博客园也会继续使用,一个学期的学习自己还是有很多不足。像这一章的结构体数组的运用还是不是很熟练,要用的函数也是要查资料查表,希望自己积累越来越多吧,熟悉掌握之后才能更好的敲代码写程序啊
  • 相关阅读:
    SAP基础:定位点运算
    WDA基础十七:ALV不同行显示不同下拉
    WDA基础十六:ALV的颜色
    WEB UI基础八:链接跳转到标准的工单界面
    WDA基础十五:POPUP WINDOW
    CRM创建BP(END USER)
    CRM 员工创建并分配用户
    STRANS一:简单的XML转换
    WEB UI 上传URL附件(使用方法备份)
    FPM四:用OVP做查询跳转到明细
  • 原文地址:https://www.cnblogs.com/lai-/p/11110491.html
Copyright © 2020-2023  润新知