构造数据类型实验

Posted 123456l

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了构造数据类型实验相关的知识,希望对你有一定的参考价值。

---恢复内容开始---

第九章构造数据类型实验

一、实验项目:

1、结构体变量的应用。

2、结构体数组的应用。

3、共用体的应用。

4、机构体指针的应用。

姓名:李儿龙    实验地点:教学楼514教室     实验时间:6月28日

二、实验目的

1、巩固学生对结构体这种数据机构概念的理解,增强程序设计能力。

2、巩固学生对结构体这种数据机构概念的理解,增强程序设计能力。

3、巩固学生对结构体、共用体这种数据机构概念的理解,增强程序设计能力。

4、巩固学生对结构体这种数据机构概念的理解,增强程序设计能力。

三、实验内容

实验9.3.1

1、问题分析

  • 定义结构体类型struct data,它含有年、月、日3个成员。
  • 定义struct data类型的变量,并从键盘输入初值。
  • 利用循环语句,计算天数;
  • 利用分支语句判断闰年;

2、流程图:

技术图片

 

 3、实验代码:

#include<stdio.h>
main()
   
    struct date
    
        int year,month,days;
    a;
    int i,days;
    printf("请输入年、月、日\\n");
    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);
  

4、运行结果:

技术图片

实验9.3.2

1、问题分析:

  • 定义候选人struct person结构体,含有姓名、初始票为0;
  • 定义struct person结构体数组,人数自定,初始值数为0;
  • 利用循环输入候选人的名字,该人员票数加1;
  • 输入的候选人不是规定的候选人时,相当于废票,不累计;

2、流程图:

技术图片

3、实验代码:

 

#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\\n",a[j].name,a[j].count);
   

 

4、运行结果:

技术图片

实验9.3.3

1、实验要求:

  • 定义结构体类型,其成员有编号、姓名、职业和班级;
  • 定义该结构体类型的数组,可有若干个数组元素;
  • 利用循环语句输入每条记录的数据,若该记录的职业为“s”,则该记录是学生的,输入该学生的班级;若该记录的职业为“t”,则该记录是教师的,输入该教师的职务;
  • 根据记录的职业判断,使用哪个printf()语句输出记录;

2、流程图:

技术图片

 

 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("\\n");
    printf("编号    姓名    职业    班级/职务\\n");
    for(i=0;i<2;i++) 
    
    if(person[i].job==s)
    printf ("%s   %d     %c      %d\\n", person[i].name, person[i].number, person[i].job, person[i].category.classes);
    else
    printf ("%s   %d     %c      %s\\n", person[i].name, person[i].number, person[i].job, person[i].category.position);
    

4、运行结果:

技术图片

5、问题分析:

由流程图可在输入名字、编号、职业和班级(职务)的输入不是同时的,输入班级应该在判断完成之后。

实验9.3.4

1、实验要求:

  • 定义结构体类型,其成员有人员编号、下一个人员编号;
  • 定义结构体类型的数组,可用n个数组元素;
  • n个人围成一圈,可以考虑用结构体数组元素中的下一人员编号来实现,但最后一个的元素的下一个人员编号指向第一个。

2、流程图

技术图片

3、实验代码

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

4、运行结果:

技术图片

四、实验小结

1、在使用结构体函数嵌套时,要注意结构体名称逐级输入。

2、数组名可以代表首地址不用加&。

以上是关于构造数据类型实验的主要内容,如果未能解决你的问题,请参考以下文章

构造数据类型实验

构造数据类型实验

构造数据类型实验

实验报告(构造数据类型实验)

实验报告

第七次实验总结