第九章实验报告

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\n",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("\n");
27     printf("编号    姓名    职业    班级/职务\n");
28         for(i=0;i<2;i++)
29             if(person[i].job==‘s‘)
30                 printf("%d    %s    %c    %d\n",person[i].number,person[i].name,person[i].job,person[i].category.classes);/*输出学生的记录*/
31             else
32                 printf("%d    %s    %c    %s\n",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的头文件。不然就不能中止。

原文地址:https://www.cnblogs.com/gnxyxlzj/p/11109990.html

时间: 2024-11-06 20:33:18

第九章实验报告的相关文章

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

c语言程序报告 姓名:吴波?????实验地点:第一教学楼514教室?????实验时间:6月26日 实验项目: 9.3.1.试利用结构体类型描述年.月.日,输入一个日期,统计该日期是本年度第多少天. 9.3.2. 在选举中进行投票,包含候选人姓名.得票数,假设有多为候选人,用结构体数组统计各候选人的得票数. 9.3.3. 若将教师和学生的数据放在同一表格中.教师的数据包括编号.姓名.职业和职务,学生的数据包括编号.姓名.职业和班级.试编写程序填写表格. 9.3.4.n个人围成一圈,从第s个人开始按

第六章 实验报告 (函数与宏定义)

C程序设计实验报告 实验项目: 6.4.1.1编写由三角形三边求面积的函数 6.4.1.2编写求N的阶层 6.4.1.3求两个整数的最大公约数 6.4.1.4打印输出的指定图形 6.4.2.1模块化程序设计 姓名:杨婷 实验地点:教学楼514教室 实验时间:2019年4月30日 一.实验目的与要求 <1>6.4.1.1编写由三角形三边求面积的函数 调用area()函数求三角形的面积 在求面积函数中运用海伦公式 <2>6.4.1.2编写求N的阶层 定义符号常量 使用长整型变量存放累乘

第六章实验报告

C程序设计实验报告 实验项目: 函数和宏定义实验 姓名: 王雨晴 实验地点: 514物联网实验室 实验时间:2019年4月30日 一.实验目的和要求 1.掌握函数的定义方法和调用规则. 2.掌握C语言程序中主调函数和被调用函数之间进行数据传递的规则. 3.了解函数的返回值及其类型,并正确使用它. 4.了解局部变量和 全局变量的作用域及它们与储存分类的关系,理解变量的存在性和可见性的概念. 5.练习递归函数的使用. 6.理解宏观的概念,掌握定义无参宏和带 参宏的方法.了解文件包含的概念,掌握其用法

第六章 实验报告(函数与宏定义)2

C程序设计实验报告 实验项目:函数和宏定义实验 姓名:罗子健 实验地点:物联网实验室 实验时间:2019年5月16日 一.实验目的与要求 (1)掌握函数定义方法和调用规则. (2)掌握在C语言程序中主调函数和被调用函数之间进行数据传递的规则. (3)了解函数的返回值及其类型,并正确使用它. (4)了解局部变量和全局变量的作用域及它们与储存分类的关系,理解变量的存在性和可变性的概念. (5)练习递归函数的使用. (6)理解宏的概念,掌握定义无参宏和带参宏的方法.了解文件包含的概念,掌握其用法. (

第六章实验报告(2)

C程序设计实验报告 实验项目: 6.4.2.2.利用复化梯形公式计算定积分 6.4.2.3.编计算Ackerman函数 6.4.3.1.编写计算x的y次幂的递归函数getpower(int x,int y).并在主程序中实现输入输出. 6.4.3.2.编写计算学生年龄的递归函数 6.4.3.3.编写递归函数下hi先Ackerma函数 姓名:钟俊敏    实验地点:教学楼514教室     实验时间:5月16日 6.4.2.2.利用复化梯形公式计算定积分 ● 掌握c语言中定义函数的方法 ●掌握通过

第七章实验报告(数组实验)

C语言程序设计实验报告 实验项目: 1.一维数组的应用 2.二维数组的应用 3.字符数组应用 姓名:徐溢璠     实验地点: 514实验室       实验时间:2019年5月29日 一.实验目的与要求 1.一维数组的应用 定义一个一维整型数组,其大小为10,即它能存放10个数据: 使用循环语句,利用随机函数产生10个整数存放在数组中: 编写排序函数sort1(): 使用循环语句,将排好序的10个数依次输出. 2.二维数组的应用 怎样定义和使用二维数组: 怎样用循环进行二维数组中值的计算: 使

第三章实验报告

第三章实践报告 一.实践题目 给定一个由 n行数字组成的数字三角形如下图所示.试设计一个算法,计算出从三角形 的顶至底的一条路径(每一步可沿左斜线向下或右斜线向下),使该路径经过的数字总和最大. 输入格式: 输入有n+1行: 第 1 行是数字三角形的行数 n,1<=n<=100. 接下来 n行是数字三角形各行中的数字.所有数字在0..99 之间. 输出格式: 输出最大路径的值. 输入样例: 在这里给出一组输入.例如: 5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 输出样例:

linux第四章实验报告

Linux第四章 用户和文件权限管理 实验环境 公司的linux主机即将提供给技术部作为开发服务器使用,根据部门内项目组的构成情况,首先需要建立相应的组账号.用户账号,并作为目录设置权限,还需要设置一个共用的数据存储目录,便于同事之间的数据交换. 需求描述 1.建立用户目录 创建目录/tech/benet和/tech/accp,分别用于存放各项目组中用户账号的宿主文件夹.例如,kylin用户的宿主目录应位于/tech/benet/kylin. 2.添加组账户 为两个项目组添加组账号benet,a

算法第二章实验报告

实践题目:二分查找. 问题描述:输入n值(1<=n<=1000).n个非降序排列的整数以及要查找的数x,使用二分查找算法查找x,输出x所在的下标(0~n-1)及比较次数.若x不存在,输出-1和比较次数. 算法描述: int BinarySearch(int a[],int x, int n){//在数组a[i]中查找X,找到返回X在数组的位置,否则返回-1 int left = 0; int right = n-1; int count = 0;//设数组位置左边为0:右边为n-1;定义cou