ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

第九章构造数据类型实验

2019-06-30 13:45:32  阅读:212  来源: 互联网

标签:struct 第九章 数据类型 构造 int 实验 include 输入 结构


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

第九章构造数据类型实验

一、实验项目:

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、数组名可以代表首地址不用加&。

标签:struct,第九章,数据类型,构造,int,实验,include,输入,结构
来源: https://www.cnblogs.com/123456l/p/11109466.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有