C程序实验报告十 结构体与共用体

合集下载

C语言程序设计教案 结构体与共用体

C语言程序设计教案  结构体与共用体

printf(“No.
name
sex
age\n”);
for(p=stu;p<stu+3;p++)
printf(“%5d%-20s%2c%4d\n”,p->num,p->name,
p->sex,p->age);}
三、用指针处理链表
链表是一种常见的数据结构,是动态地进行存储分配的一种结构。
用数组存放数据时,必须事先定义固定的长度。比如有的班级有
例 对候选人得票的统计程序。设有三个候选人,每次输入一个得 票的候选人的名字,要求最后输出各人得票结果。
程序如下: #include <stdio.h> struct person {char name[20];
int count; }leader[3]={“li”,0,“zhang”,0,“fun”,0}; main() {int i,j;char leader_name[20]; for(i=1;i<=10;i++) {scanf(“%s”, leader_name);
┄ char addr[30]; }; Struct student student[10];
2.结构体数组的初始化 其初始化和数组的初始化相似。 3.结构体数组的应用举例
结构体数组 和数值型数 组不同之处 在于每个数 组元素都是 一个结构体 类型的数据。
定义了一个 student,其 元素为 Struct student 类型 数据,数组中 有 10 个元素。
{ int month;
先声明一个
int day; int year; }
Struct date 类型,然后在 Struct

实验10 结构体、共用体

实验10 结构体、共用体

实验11 结构体、共用体一、实验目的:1、掌握结构体类型定义和结构体变量定义、初始化的方法;2、掌握结构体成员的访问方法,熟悉结构体嵌套定义方法;3、掌握结构体数组的定义和使用方法,能够用模块化方法设计程序;4、熟悉typedef的基本用法。

二、实验内容1、下列程序的功能是:先定义结构体Book,再定义两个变量book1、book2,其中一个初始化,另一个从键盘输入数据,最后输出book1、book2的值。

程序运行结果如下:请根据题意和注释填写下列程序所缺代码,并回答相关问题:#include<stdio.h>//定义结构体Book,成员有:书名(title),字符数组,长度为100;//作者(authors),字符数组,长度为30;ISBN,字符数组,长度为20;//页数(pages),整型;价格(price),单精度浮点数。

/*代码段_1*/struct Book {char title[100];char authors[30];char ISBN[20];int pages;float price;};int main(){//定义两个Book型变量book1、book2,其中book1用我们本学期所使用教材的数据初始化Struct Book book1 = {“C程序设计(第四版)”,”谭浩强”,“978-7-302-22446-4”,390,29.0f};//从键盘输入我们本学期所使用实验指导书的数据给book2/*代码段_2*/printf("请输入实验指导书的信息:书名、作者、ISBN、页数、价格:\n");Scanf(“%s %s %s %d %f”,book2.title,book2.authors,book2.ISBN,&book2.pages,&b ook2.price);printf("\n教材、实验书信息如下:\n");printf("书名:%s, 作者:%s,ISBN: %s,\n总页数:%d,价格: %f\n\n",book1.title,book1.authors,book1.ISBN,book1.pages,book1.price);/*代码段_3*///将book1和book2的信息输出return 0;}问题:(1)如何定义结构体类型?(2)怎样定义结构体变量,并初始化?(3)怎样输入、输出结构体变量各成员的值?2、(基础题)请按下列要求编程:(1)先定义一个结构体Date,它包含三个成员:年(year,int)、月(month,int)、日(day,int);(2)再定义一个结构体,它包含三个成员:姓名(name,char[10])、性别(sex,char类型,’m’为男,’f’为女)、出生时间(birthday,Date类型)、身份证号(ID,char[19])、电子邮箱(email,char[60]),并用typedef将该结构体命名为Person类型;(3)然后在主函数中定义一个Person类型的变量me,通过键盘输入自己的信息,然后输出me的各成员值。

实验 结构体与共用体_C语言程序设计实用实践教程_[共3页]

实验  结构体与共用体_C语言程序设计实用实践教程_[共3页]

C 语言程序设计实用实践教程
三、本章常见错误小结
(1)定义结构体类型或共用体类型时,忘记在最后的花括号}后面加分号。 (2)将一种类型的结构体变量对另一种类型的结构体变量进行赋值。 (3)对两个结构体或共用体进行比较。 (4)将结构体指向运算符的两个组成-和>之间插入空格或写成→。 (5)直接使用结构体的成员变量名访问结构体成员。 (6)使用指向运算符访问结构体变量的成员。
{ int x; int y;
} cnum[2]={1,3,2,7}; printf("% d\n",cnum[0].X*cunm[1].x); }
(2)分析程序的运行结果,掌握“->”和“*”运算符的优先级及++在前在后的含义。
#include<stdio.h> struct x { int a;
四、实验环节
实验 结构体与共用体
168
【实验目的和要求】 1.掌握结构体类型、结构体变量、结构体数组和结构体指针的定义与使用。 2.理解共用体的结构特征,掌握其定义和使用方法。 3.了解枚举类型和自定义类型。 【实验内容】 1. 分析题
(1)分析程序,写出程序的运行结果。
#include<stdio.h> main(r *b; }*p; char y0[]="Li",y1[]="Wang"; struct x xw[]={{1,y0},{4,y1}}; main() { p=xw;
printf("%c",++*p->b); printf("%d",(*p).a); printf("%d",++p->a); printf("%d",(++p)->a); printf("%c\n",*(p++)->b); }

浅谈C语言共用体和与结构体的区别

浅谈C语言共用体和与结构体的区别

浅谈C语⾔共⽤体和与结构体的区别
共⽤体与结构体的区别
共⽤体:
使⽤union 关键字
共⽤体内存长度是内部最长的数据类型的长度。

共⽤体的地址和内部各成员变量的地址都是同⼀个地址
结构体⼤⼩:
结构体内部的成员,⼤⼩等于最后⼀个成员的偏移量+最后⼀个成员⼤⼩+末尾的填充字节数。

结构体的偏移量:某⼀个成员的实际地址和结构体⾸地址之间的距离。

结构体字节对齐:每个成员相对于结构体⾸地址的偏移量都得是当前成员所占内存⼤⼩的整数倍,如果不是会在成员前⾯加填充字节。

结构体的⼤⼩是内部最宽的成员的整数倍。

共⽤体
#include <stdio.h>
//gcc让不同类型的变量共享内存地址 ,同⼀时间只有⼀个成员有效
union data{
int a;
char b;
int c;
};
int main(){
union data data_1 = {1};//初始化时只填写⼀个值。

(同⼀时间只有⼀个成员有效)
data_1.b = 'c';
data_1.a = 10;//后赋值的才有效。

前⾯的赋值被覆盖
//打印地址,发现指向同⼀个地址
printf("%p\n%p\n%p\n",&data_1.a,&data_1.a,&data_1.a);
return 0;
}
以上这篇浅谈C语⾔共⽤体和与结构体的区别就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。

Ex10c语言实验报告

Ex10c语言实验报告

实验十结构体和共用体
1.实验目的
(1)掌握结构体类型变量的定义和使用;
(2)掌握结构体类型数组的概念和使用;
(3)掌握链表的概念,初步学会对链表进行操作;
(4)掌握共用体的概念与使用。

2.实验内容
编程序,然后上机调试运行。

(1)有10个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入10个学生数据,要求打印出3门课总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课的成绩、平均分数)。

程序运行如下:
(2)13个人围成一圈,从第1个人开始顺序报号1、2、3。

凡报到“3”者退出圈
子,找出最后留在圈子中的人原来的序号。

(3)建立一个链表,每个结点包括:学号、姓名、性别、年龄。

输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删去。

(4)输入和运行以下程序并运行:
输入两个整数10000、20000赋给u.i[0]和u.i[1]。

运行结果如下:
将scanf语句改为:
scanf("%ld,"&u.b);
输入60000赋给b。

运行结果如下:
实验总结:
结构体、公用体定义方式、引用方式和功能的相同点与不同点。

枚举类型的定义及应用场合。

1、在做实验内容(1)、(2)时,先分析运行结果,注意结构体、公用体的不同特性,再上机运行,对照结果是否一致。

2、实验内容综合性较强,包括函数调用和结构体的应用,提前做好预习工作,再上机实验。

实验十一 结构体(struct)与共用体(union)

实验十一 结构体(struct)与共用体(union)

实验十一结构体(struct)与共用体(union)实验目的理解并掌握使用不同数据类型的变量组合成一个数据的组合体-结构体与共用体的定义与引用;正确使用结构体数组、结构体与函数及指向结构体的指针。

要点提示1.结构体定义的一般格式为:struct 结构体类型名{数据类型成员名1;数据类型成员名2;……数据类型成员名n;};2.结构体变量的说明struct 结构体类型名结构体变量名;3.引用结构体成员结构体变量名.成员名共用体与结构体有相似的使用形式实验内容●结构体的定义与引用●结构体与函数●结构体数组●指向结构体的指针●共用体的定义与引用实验步骤读懂并输入程序,完成填空后输出结果1.建立学习成绩单结构,并建立一个同学王林(wanglin)的记录。

#include <stdio.h>main(){struct grade /* 定义结构体类型*/{int number;char name;int math;int english;};struct 【】wanglin; /* 说明结构体变量*/printf("Please input the number, name, math, english:\n");scanf("%d,%d,%d",&【】,& wanglin. name,【】& wanglin.english);printf("wanglin 'grade is: %d/%d/%d\n", wanglin. number, , wanglin.math, wanglin.english);}程序执行过程与结果:Please input the number, name, math, english::26,A, 85,90wanglin ' grade is:#include <stdio.h>main(){struct grade /* 定义结构体类型*/{int number;char name;int math;int english;};struct grade wanglin; /* 说明结构体变量*/printf("Please input the number, name, math, english:\n");scanf("%d,%c,%d,%d",&wanglin. number,& wanglin. name,& wanglin. math,& wanglin.english);printf("wanglin 'grade is: %d/%c/%d/%d\n", wanglin. number, , wanglin.math, wanglin.english);}Please input the number, name, math, english:26,A,85,90wanglin 'grade is: 26/A/85/90Press any key to continue请再建立一个刘芳(liufang)的成绩记录, 比较一下。

C语言程序设计实验报告(结构体和共用体)

C语言程序设计实验报告(结构体和共用体)

C语言程序设计实验报告(结构体和共用体)1实验目的1、掌握结构体类型变量的定义和使用;2、掌握结构体类型变量数组的概念和使用;3、掌握链表的概念,初步学会对链表进行操作;4、掌握共用体的概念和使用。

2实验内容1)在一个结构体数组中存入三个人的姓名及年龄,输出三者中年龄居中者的姓名及年龄。

要求:1、三个人的数据采用直接初始化的方式赋值;2、利用结构体指针实现处理过程。

3算法描述流程图4源程序#include<stdio.h>main(){struct students{char name[10];int age;} stu[3]={{"Jack",17},{"Anne",16},{"Tom",19}},stu1[3];struct students *stu2=&stu[0],*t=&stu1[0];int i,j,k;for(i=0;i<2;i++){k=i;for(j=i+1;j<3;j++){if(((stu2+j)->age)<((stu2+k)->age))k=j;}*t=*(stu2+k);*(stu2+k)=*(stu2+i);*(stu2+i)=*t;}printf("三人中年龄居中者姓名:%s,年龄:%d\n",stu[1].name,stu[1].age); }5测试数据{"Jack",17},{"Anne",16},{"Tom",19}6运行结果7出现问题及解决方法;实验中,引用结构体数组出现错误,忘记写{},指针的初始化忘记写*,这些问题都是些低级错误,不应该犯的,在循环中,i的初始化错误。

以后应更加仔细,多注意细节问题,很多时候细节是决定事情的关键。

8实验心得在本次试验中,我通过学习和实践,对结构体类型变量的定义和使用以及链表的概念有了更清楚的理解,初步学会了对链表进行操作,掌握了结构体类型变量数组以及共用体的使用。

实验10结构体及共用体

实验10结构体及共用体

实验十结构体与共用体实验目的:1.结构体类型变量的定义和引用2.结构体类型数组的概念和引用3.指向结构体类型的指针的引用4.共用体的定义及引用5.链表的概念,会实现链表的创建实验相关内容简介:实结构体是个能够包含不同数据类型的一个结构,是一种能够自己定义的数据类型,通常可用来定义表示整体信息的一条记录。

1.结构体类型定义struct 结构类型名{ 数据类型数据项1;数据类型数据项2;……数据类型数据项n;}; //注意此处定义时分号不能少其中的结构类型名表明了一种新的构造数据类型,其中的数据项称为结构体的数据成员。

2.结构体变量定义结构体变量定义的形式通常有如下三种方法:(1)先定义结构体类型,再定义结构体类型变量:struct date{ int day;int month;int year;};struct date time1,time2;(2)定义结构体类型同时定义结构体类型变量:struct stu{long int num;char name[20];char sex;float score;struct date time1; //此处结构的成员也是个结构体}stu1,stu2;(3)直接定义结构体类型变量:struct{char name[20]; / *通讯录姓名* /char sex; / *性别* /long telephone; / *电话* /char address; / *住址* /} person1,person2; / *定义该结构体类型变量* /该定义方法由于无法记录该结构体类型,所以除直接定义外,不能再定义该结构体类型变量。

3.结构体变量成员的引用结构体变量的成员引用形式为:结构体变量名.成员名如time1.year=1980;是给结构体变量time1中的year变量赋上年份值;stu1.time1.year=1985;则是给student中time1成员中的year成员赋值,4.结构体数组的定义struct 结构体类型名结构体变量名[数组长度];如:struct stu std[3];则std是一个包含3个结构体的结构体数组。

C语言程序设计实验十一 结构体与共用体(二)

C语言程序设计实验十一 结构体与共用体(二)

实验十一结构体与共用体(二)一、目的和要求1、掌握结构体类型方法以及结构体变量的定义和引用。

2、掌握运算符”.”和”->”的应用。

3、掌握指向结构体变量的指针变量的应用。

4、本实验在学习了第7章和第8.1节后进行。

二、实验内容和步骤1、分析、调试、运行下列程序,记录程序中的错误之处并给予改正,写出正确的运行结果。

#include <stdio.h>struct st{ int x;int y;}*p;int a[]={10,20,30,40};struct st sb[]={2,&a[0],4,&a[1],6,&a[2],8,&a[3]};main(){ p=sb;printf(“\n%d”,p->x);printf(“\n%d”,(++p)->x);printf(“\n%d”,(++p)->y);}2、下列程序实现:从键盘上输入年、月、日,计算并输出该日在该年中是第几天(注意闰年问题)。

调试运行该程序,写出程序运行结果。

#include <stdio.h>struct date{ int day;int month;int year;int yes;};static int day_tab[2][13]={{0,31,29,31,30,31,30,31,31,30,31,30,31},{0,31,28,31,30,31,30,31,31,30,31,30,31}}main(){ int i,leapstruct date *p;printf(“enter year/month/day:”);scanf(“%d,%d,%d”,&(*p).year,&(*p).month,&(*p).day);leap=p->year%4==0&&p->year%100!=0||p->year%400==0;p->yes=p->day;for(i=0;i<p->month;i++)p->yes+=day_tab[leap][i];printf(“the day in the passed year is %d\n”,p->year);}三、实验结果四、分析与讨论(1)理解运用指向结构体变量的指针访问结构体成员的方法。

C++中的共用体(union)结构解析与结构体(struct)共用体(union)的区别

C++中的共用体(union)结构解析与结构体(struct)共用体(union)的区别

C++中的共用体(union)结构解析与结构体(struct)共用体(union)的区别C++中的共用体(union)结构解析与结构体(struct)共用体(union) 的区别分类: C++开发博文 2012-04-10 09:58 969人阅读评论(1) 收藏举报structc++c共用体(union)一、基础概念有时需要使几种不同类型的变量存放在同一段内存单元中。

虽然在同一段内存中不同数据类型所占字节数不同,但都从同一地址开始存放,也就是使用了覆盖技术,几个变量互相覆盖。

这种使几个不同的变量共占一段内存的结构,称为共同体类型的结构(也称为联合类型)。

二、声明共用体类型的一般形式:union 共用体类型名{成员表列};定义共用体变量的一般形式:共用体类型名共用体变量名;也可以在声明共用体类型的同时定义共用体变量,也可以没有共用体类型名直接定义共用体变量。

union data{int i;char ch;double d;}a,b,c;三、“共用体”与“结构体”区别结构体变量所占内存长度是各成员占的内存长度之和。

每个成员分别占有其自己的内存单元。

共用体变量所占的内存长度等于最长的成员的长度。

四、对共用体变量的访问方式不能直接引用共用体变量,只能引用共用体变量中的成员。

a.i; a.ch a.f不能引用共用体变量:cout<<a;五、共用体类型数据的特点1、使用共用体变量的目的是希望在同一个内存段存放几种不同类型的数据。

注意:在每一瞬时只能存放其中一种,而不是同时存放多种。

换句话说,每一瞬时只有一个成员起作用,其他成员不起作用。

2、能够访问的是共用体变量中最后一次被赋值的成员,在对一个新的成员赋值后原有的成员就失去作用。

因此在引用共用体变量时应注意当前在共用体变量中起作用的是哪个成员。

3、共同体变量的地址和它的各成员的地址相同,为同一个地址。

4、不能对共用体变量名赋值;不能引用变量名来得到一个值;不能在定义共用体变量时对它初始化;不能用共用体变量名作为函数参数。

C语言程序设计——结构体和共用体(完整版)

C语言程序设计——结构体和共用体(完整版)

printf(“name\tage\tjob\tclass/office\n”); for(i=0;i<PN;i++) {if(body[i].job==„s‟) printf(“%s\t%d\t%3c\t%d\n”,body[i].name, body[i].age,body[i].job,body[i].units.class); else printf(“%s\t%d\t%3c\t%s\n”,body[i].name, body[i].age,body[i].job,body[i].units.office); } }
birthday num name sex age month day year addr
§12.3结构体数组
结构体数组的每一个元素都是具有相同结构类型 的结构体变量。 例:struct student {int num; char name[20]; float score; }stu[3]; 其中,定义了一个结构体数组stu,共有3个元素, 每个元素都具有struct student的结构形式。
§12.6共用体
共用体(也称为联合)也是一种构造的数据类型。 共用体是将不同类型的数据组织在一起共同占用 同一段内存的一种构造数据类型。 例如,在校学生和教师都填写以下表格: 姓名 年龄 职业 单位 其中,职业分两类:教师和学生; 而单位一栏里,学生填写班级编号(整型类型), 教师填写某系某教研室(整型类型) 。
§12.7枚举数据类型
当某些变量仅由有限个数据值组成时,通常用枚 举类型来表示。 所谓枚举是指将变量的值一一列举出来,变量的 值只限于列举出来的值的范围内。如一周只有7天, 一年只有12个月等等。
注意:枚举类型是一种基本数据类型,而不是一 种构造类型。关键字为enum。

共用体实验报告

共用体实验报告

一、实验目的1. 理解共用体的概念和作用。

2. 掌握共用体的定义和使用方法。

3. 通过实验加深对共用体在C语言中的实际应用。

二、实验环境1. 操作系统:Windows 102. 编译器:Visual Studio 20193. 语言:C语言三、实验内容1. 共用体的定义与初始化2. 共用体的成员访问3. 共用体与结构体的区别4. 共用体的内存占用5. 共用体的应用实例四、实验步骤1. 共用体的定义与初始化(1)创建一个新的C语言文件,命名为“共用体实验.c”。

(2)定义一个共用体类型,包含两个成员:一个整型变量和一个浮点型变量。

```c#include <stdio.h>typedef union {int i;float f;} data_union;int main() {data_union my_union;printf("请输入一个整数:");scanf("%d", &my_union.i);printf("您输入的整数为:%d\n", my_union.i);printf("请输入一个浮点数:");scanf("%f", &my_union.f);printf("您输入的浮点数为:%f\n", my_union.f);return 0;}```2. 共用体的成员访问(1)在上面的代码中,我们通过共用体成员名访问整型变量和浮点型变量。

(2)修改程序,输出共用体中整型变量的值。

```cprintf("共用体中的整型变量值为:%d\n", my_union.i);```3. 共用体与结构体的区别(1)结构体中的成员变量各自占用独立的内存空间,而共用体的成员变量共享同一块内存空间。

(2)结构体可以同时存储不同类型的成员变量,而共用体在任意时刻只能存储一种类型的成员变量。

C语言结构体和共用体实验报告

C语言结构体和共用体实验报告

实验九参考程序实验9-1/*****************************************************************实验9.1**(1)为某商店的商品设计合适的结构体(PRODUCT)。

每一种商品包含编号(number)、* 名称(name)、价格(price)、折扣(discount)4项信息,根据表9-1,为这些信息选择合适的数据类型。

*(2)建立2个函数,以实现对商品的操作。

input函数实现商品的输入;* display函数显示商品信息。

要求这2个函数都以商品的结构体(PRODUCT)指针为参数。

*(3)在主函数中为商品键盘定义一个结构体变量(keyboard),利用input函数实现键盘信息的输入;* 定义一个结构体数组(elec_device[3]),利用input函数实现冰箱、空调、电视信息的输入;* 最后利用display函数显示4种商品的信息。

** 表9-1**编号名称价格折扣*1010 键盘89.50 0.85*1021 冰箱1024.00 0.95*1022 空调2058.50 0.90*1023 电视3001.88 0.95*****************************************************************/#include <stdio.h>typedef struct _PRODUCT{int iNumber;char strName[32];float fPrice;float fDiscount;}PRODUCT,*PPRODUCT;void input(PRODUCT *pProduct);void display(PPRODUCT pProduct);void main(){int i;PRODUCT kyeboard;PRODUCT elec_device[3];input(&kyeboard);for(i=0;i<3;i++){input(&elec_device[i]);}display(&kyeboard);for(i=0;i<3;i++){display(&elec_device[i]);}}/******************************************************************函数名称:input()**参数:PRODUCT *pProduct -PRODUCT结构体指针,用来存放输入数据***返回值:无*说明:*该函数用来完成PRODUCT结构体数据的输入。

C语言程序设计实验结构体与共用体

C语言程序设计实验结构体与共用体

实验8:结构体与共用体一、实验目的1.掌握结构体类型变量的定义和使用;2.掌握共用体的概念与使用。

二、实验内容编写程序,实现如下功能:1.定义结构体变量,用它表示考生的学号、姓名(用英文表示)以及语文、数学、外语成绩。

输入两个考生的信息和各门课成绩并比较(按总分进行高低排序;当总分相同时,依次按语、数、外的顺序排序)。

2.设有一个教师与学生通用的表格,数据项包括:姓名、年龄、职业和单位,其中“职业”一项可分为“教师”和“学生”两类;对“单位”一项,教师填入“系部名称”(用字符类型表示),学生填入“班级编号”(用整型量表示)。

编程输入人员数据,再以表格输出。

三、实验结果记录第1题上机调试后的最终代码及上机调试结果(截图):程序代码运行结果1.总分不同2.总分相同的情况2.1总分完全相同2.2总分相同但语文成绩不同2.3总分相同、语文成绩相同但数学成绩不同第2题上机调试后的最终代码及上机调试结果(截图):程序代码运行结果1.正确输入2.错误输入四、实验小结:经过此次实验,我熟悉掌握了结构体的定义和使用,同时也掌握了共用体的使用。

对于程序1,基本思路是通过结构体定义变量,采用if-else语句嵌套,当总分相同且语文数学成绩均相同时就不必再进行一轮的if语句判断,因为此时两考生的英语成绩一定相同。

对于程序2,在结构体中定义了共用体,可对不同职业进行不同单位的划分。

基本思路是用malloc函数进行动态内存分配,确定要输入的样本数量,再进行数据的输入,在单位数据的输入时需要判断输入对象是学生还是老师,此时要用strcmp函数进行比较判断,输入结束后打印表格,用转义字符\t让表格更加美观,最后通过free进行内存释放。

实验9(1)掌握C语言环境下结构体和共用体类型变量的定义和使用方法

实验9(1)掌握C语言环境下结构体和共用体类型变量的定义和使用方法

掌握C语言环境下结构体和共用体类型变量的定义和使用方法实验目的:(1) 掌握C语言环境下结构体和共用体类型变量的定义和使用方法;(2) 掌握结构体类型数组的概念和使用;(3) 掌握指向结构体变量的指针变量、尤其是链表概念;实验内容:1.首先熟悉结构体类型变量的基本声明方法、结构体类型变量的内存分配原则、初始化和引用结构体变量及其成员变量的基本方法;然后掌握结构体变量的输入、输出方法。

(参见教材例10-1~10-5)2.基于结构体数组的应用实验。

(1) 有n个学生,每个学生的数据包括学好(num)、姓名(name[20])、性别(sex)、年龄(age),以及三门课程的成绩(score[3])。

要求:在main()函数中输入这些学生的这些数据,然后设计一个函数count()来计算每个学生的总分和平均分,最后,打印出所有数据信息(包含原来输入的学生原始数据信息和求解出来的新信息)。

(2)对第(1)题实验,求出其中成绩最好的人和成绩最差的人,并显示出来。

(假定成绩最好和最差的人都只有一个)(3)*如果假定成绩最好和最差的人的个数不一定唯一,程序应该如何修改才能完成求出所有最好和最差者,以及输出它们来。

3.*链表实验。

(1) 建立一个链表,每个结点包含:职工号、工资。

用malloc()函数开辟新结点,用free()函数回收不用的结点空间。

要求从键盘输入5个员工的数据信息(用create_list()),然后,用函数output_list()将它们一一打印出来,用free_list()将链表中的结点空间回收。

假设职工编号为1001,1005,1008,1010,1101。

注:malloc()和free()为系统函数。

create_list(),output_list(),free_list()为用户自定义函数。

(2)在(1)的基础上,新增一个函数inset_node()插入员工1006和1032的数据信息。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验10 结构体与公用体
1.实验目的、要求
(1)掌握结构体类型变量的定义和使用。

(2)掌握结构体类型数组的概念和使用。

(3)掌握公用体的概念与使用。

2.实验内容
(1)输入程序并运行,观察运行结果
#include “stdio.h”
int main( )
{ struct cmplx
{ int x;
int y;
} cnum[2]={1 , 3 , 2 , 7};
printf(“%d\n”, cnum[0].y / cnum[0].x * cnum[1].x );
return(0); }
运行此程序:按F2保存源程序,按F9完成一次编译连接,无提示错误,按任意键返回源程序行,按ctrl+F9运行,按alt+F5看结果,结果显示:6
(2)输入程序并运行,观察运行结果
union ks
{ int a;
int b;
};
union ks s[4];
union ks *p;
#include “stdio.h”
int main( )
{ int n=1, i;
printf(“\n”);
for(i=0;i<4;i++)
{ s[i].a=n;
s[i].b=s[i].a+1;
n=n+2;
}
p=&s[0];
printf(“%d,”,p->a);
printf(“%d” ,++ p->a);
return(0); }
运行此程序:按F2保存源程序,按F9完成一次编译连接,无提示错误,按ctrl+F9运行,按任意键返回源程序行,按alt+F5看结果,结果显示:23
(3)编写程序
有10个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入10个学生数据,要求打印出3门课总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课成绩、平均分数)。

要求用input 函数输入10个学生数据;用average函数求总平均分;用
max函数找出最高分的学生数据;总平均分和最高分学生的数据都在主函数中输出。

#include"stdio.h"
struct student
{char num[6];
char name[8];
int score[4];
float avr;
}stu[10];
main()
{int i,j,max,maxi,sum;
float average;
for(i=0;i<10;i++)
{printf("number");
scanf("%s",stu[i].num);
printf("name");
scanf("%s",stu[i].name);
for(j=0;j<3;j++)
{printf("\nscore\n");
scanf("%d",&stu[i].score[j]); } }
average=0;
max=0;
maxi=0;
for(i=0;i<10;i++)
{sum=0;
for(j=0;j<3;j++)
sum+=stu[i].score[j];
stu[i].avr=sum/3.0;
average+=stu[i].avr;
if(sum>max)
{max=sum;
maxi=i; }}
average/=5;
printf("number name score1 score2 score3 average\n");
for(i=0;i<10;i++)
{printf("%8s%10s",stu[i].num,stu[i].name);
for(j=0;j<3;j++)
printf("%7d",stu[i].score[j]);
printf("%6.2f\n",stu[i].avr); }
printf("average=%5.2f\n",average);
printf("The best student is %s,sum=%d\n",stu[maxi].name,max);
}
运行此程序:按F2保存源程序,按F9完成一次编译连接,无提示错误,按ctrl+F9运行,按要求输入十个学生的数据,按任意键返回源程序行,按alt+F5看结果,结果显示:number name score1 score2 score3 average
01 san 76 87 79 80.67
02 tian 65 75 86 75.33
03 yuan 98 68 78 81.33
04 ping 97 86 78 87.00
05 shuo 65 74 82 73.67
06 ying 90 80 68 79.33
07 xiao 87 80 58 75.00
08 hu 64 98 60 74.00
09 xing 65 82 90 79.00
10 xu 60 98 76 78.00
average=156.67
The best student is ping,sum=261
3.思考及总结
(1结构体、共用体定义方式、引用方式和功能的相同点与不同点。

结构体定义方法
①先声明结构体类型,在定义该类型的变量
struct 变量名变量名1,变量名2;
②在声明类型的同时定义变量
struct 结构体名
{
成员列表
}变量名表列;
③不指定类型名而直接定义结构体类型变量
struct
{
成员表列
}变量名表列;
共用体定义方法:
union 共用体名
{成员表列
}变量表列;
只有定义了共用体变量才能引用它;但应注意,不能应用公共体变量,而只能引用共用体变量中的成员。

例如:a .i a .ch a .f
结构体、共用体
引用方式和功能的相同点与不同点
结构体占用的内存空间是其元素占空间的总和;而共用体是元素中占用空间最大的元素的空间。

其实在共用体所用的内存中已经写入了数据,当使用其它元素时,上次使用的内容将被覆盖.也就是说他使几个不同类型的变量共占一段内存(相互覆盖),每次只有一个能使用。

结构体则不然, 每个成员都会有存储空间,可以一起用.内部变量间是相互独立的。

(2)枚举类型的定义及应用场合。

如果一个变量只有几种可能的值,则可以定义为枚举类型。

“枚举”即把可能的值一一列举出来,变量的值只限于列举出来的值的范围。

一般形式:enum[枚举名]{枚举元素列表}
(3)用typedef定义类型的方法。

(通常分四步):
①先按定义变量的方法写出定义体(如:int i;)。

②将变量名替换成新的类型名(如:int INTEGER;)。

③在最前面加typedef(如:typedef int INTEGER;)。

④然后可以用新的类型名去定义变量了。

(4)使用typedef的注意事项。

①用typedef可以声明各种类型名,但不能用来定义变量。

②用typedef只是对已存在的类型增加一个类型名,而没有创造新的类型。

③typedef与#define有相似之处。

④当不同源文件需要用到同一类型的数据时,常用typedef声明一些数据类型,把它们单独放在一个文件中,然后在需要用到它们的文件中用#include命令把它们包含进来。

⑤使用typedef有利于程序的通用与移植。

4.易犯错误及纠正方法
(1)在做实验内容(1)、(2)时,先分析运行结果,注意结构体、共用体的不同特性,再上机运行,对照结果是否一致。

(2)实验内容(3)综合性较强,包括函数调用和结构体的应用,提前做好预习工作,再上机实验。

相关文档
最新文档