C语言程序设计 实验报告7--结构体共用体
- 格式:pdf
- 大小:233.38 KB
- 文档页数:6
实验七、结构体程序设计一、实验目的1.掌握结构体类型变量和数组、共用体类型变量和数组以及枚举类型变量的定义和使用。
2.掌握链表的基本,初步学会对链表进行操作。
3.通过编程和调试程序,加深对结构体和共用体概念的理解。
4.实验前复习结构体类型、共用体类型和枚举类型的概念。
二、实验内容及步骤:1、编程利用结构体实现输入若干学生的学号、姓名和成绩,求平均分以及高于平均分的同学。
要求:1) 求平均分的过程由函数实现。
2)打印格式为:学生学号姓名成绩,且其过程由函数实现。
程序代码:#include<stdio.h>#include<malloc.h>typedef struct student{int num;char name[20];int score;struct student *next;}ST,*STU;STU createlink(int n){ int i;STU p,q,head;if(n<=0)return(NULL);head=(STU)malloc(sizeof(ST));printf("input datas:\n");scanf("%d %s %d",&head->num,head->name,&head->score);p=head;for(i=1;i<n;i++){q=(STU)malloc(sizeof(ST));scanf("%d %s %d",&q->num,q->name,&q->score);p->next=q;p=q;}p->next=NULL;1return (head);}void list(STU head){STU p=head;int i=0;double sum=0;for(;p!=NULL;p=p->next){sum=sum+(double)(p->score);i++;}p=head;while(p!=NULL){ if((double)(p->score)>(sum/i))printf("高于平均的学生为:%d %s %d\n",p->num,p->name,p->score);p=p->next;}}double average(STU head){int i=0;double sum=0;for(;head!=NULL;head=head->next){sum=sum+(double)(head->score);i++;}return (sum/i);}void main(){ STU h;int n;double ave;printf("input number of node:");scanf("%d",&n);h=createlink(n);ave=average(h);printf("平均成绩为:%lf\n",ave);list(h);}对程序进行测试,并观察运行结果。
c语言实验报告实验C 语言实验报告实验一、实验目的本次 C 语言实验的主要目的是通过实际操作和编程实践,加深对 C 语言基本语法、数据类型、控制结构、数组、指针等重要概念的理解和掌握,提高编程能力和解决实际问题的能力。
二、实验环境本次实验使用的编程环境为 Visual Studio 2019,操作系统为Windows 10。
三、实验内容1、基本数据类型和运算符的使用定义不同类型的变量,如整数型(int)、浮点型(float、double)、字符型(char)等,并进行赋值和运算操作。
熟悉各种运算符的优先级和结合性,包括算术运算符(+、、、/、%)、关系运算符(>、<、>=、<=、==、!=)、逻辑运算符(&&、||、!)、位运算符(&、|、^、~、<<、>>)等。
2、控制结构的应用使用ifelse 语句实现条件判断,根据不同的条件执行相应的代码块。
运用 switch 语句进行多分支选择,处理不同的情况。
利用 for 循环、while 循环和 dowhile 循环实现重复执行的操作,例如计算数列的和、打印特定的图案等。
3、数组和字符串的操作定义和使用一维数组、二维数组,进行数组元素的访问、赋值和遍历。
掌握字符串的存储和处理方式,使用字符数组和字符串函数(如strlen、strcpy、strcmp 等)进行字符串的操作。
4、指针的应用理解指针的概念和指针变量的定义,通过指针访问变量和数组元素。
实现指针与数组、指针与函数的结合使用,体会指针在程序中的灵活运用。
5、函数的定义和调用编写自定义函数,实现特定的功能,如计算阶乘、判断素数等。
掌握函数的参数传递方式(值传递和地址传递),理解函数的返回值。
6、结构体和共用体的使用定义结构体类型,创建结构体变量,访问结构体成员。
了解共用体的概念和使用场景,比较结构体和共用体的区别。
四、实验步骤1、实验准备打开 Visual Studio 2019 开发环境,创建一个新的 C 语言项目。
实验七结构体和共用体一、实验目的及要求1.掌握结构体类型变量的定义和使用;2.掌握结构体类型数组的概念和使用;3.掌握链表的概念,初步学会对链表进行操作;4.掌握共用体的概念与使用。
二、实验学时2学时三、实验任务编程序,然后上机调试运行。
1.编写input()和output()函数,输入,输出5个学生的数据记录。
程序源代码如下:#define N 5struct student{ char num[6];char name[8];int score[4];} stu[N];input(stu)struct student stu[];{ int i,j;for(i=0;i<N;i++){ printf("\n please input %d of %d\n",i+1,N);printf("num: ");scanf("%s",stu[i].num);printf("name: ");scanf("%s",stu[i].name);for(j=0;j<3;j++){ printf("score %d.",j+1);scanf("%d",&stu[i].score[j]);}printf("\n");}}print(stu)struct student stu[];{ int i,j;printf("\nNo. Name Sco1 Sco2 Sco3\n");for(i=0;i<N;i++){ printf("%-6s%-10s",stu[i].num,stu[i].name);for(j=0;j<3;j++)printf("%-8d",stu[i].score[j]);printf("\n");}}main(){input();print();}运行结果:2. 有5个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入5个学生数据,要求打印出3门课总平均成绩,以及及最高分的学生的数据(包括学号、姓名、3门课的成绩、平均分数)。
C语言中的结构体和共用体(联合体)/c-pointer-array/在C 语言中,结构体(struct)是一个或多个变量的集合,这些变量可能为不同的类型,为了处理的方便而将这些变量组织在一个名字之下。
由于结构体将一组相关变量看作一个单元而不是各自独立的实体,因此结构体有助于组织复杂的数据,特别是在大型的程序中。
共用体(union),也称为联合体,是用于(在不同时刻)保存不同类型和长度的变量,它提供了一种方式,以在单块存储区中管理不同类型的数据。
今天,我们来介绍一下C 语言中结构体和共用体的相关概念和使用。
结构体 / struct结构体的定义声明一个结构体类型的一般形式为:struct 结构体名 {成员列表};其中,成员列表中对各成员都应进行类型声明,即:类型名成员名;例如,我们需要在程序中记录一个学生(student)的数据,包括学号(num)、姓名(name)、性别(sex)、年龄(age)、成绩(score)、地址(addr)等,如下图所示:如果要表示图中的数据结构,但C 语言并没有提供这种现成的数据类型,因此我们需要用定义一种结构体类型来表示。
truct student {int num;char name[20];char sex;int age;float score;char addr[30];};上述定义了一个新的结构体类型 struct student(注意,struct 是声明结构体类型时所必须使用的关键及,不能省略),它向编译系统声明,这是一个“结构体类型”,它包括 num、name、sex、age、score、addr 等不同类型的数据项。
应当说,这里的 struct student 是一个类型名,它与系统提供的标准类型(如 int、char、float、double 等)具有同样的作用,都可以用来定义变量的类型。
结构体变量前面只是声明了一个结构体类型,它相当于一个模型,但其中并无具体的数据,编译系统对其也不分配实际的内存单元。
C语⾔中的结构体及共⽤体C语⾔中的结构体、共⽤体以及枚举类型⼀、结构体1、概述 为什么需要结构体? 在实际问题中,⼀组数据可能包含多种数据类型,⽐如描述⼀名学⽣时,需要⽤char类型的姓名,char或者int数据类型的学号,float类型的分数,等等, 结构体可以有效的解决这类问题。
实质 结构体本质上还是⼀种数据类型,它包含若⼲个“成员”,每个成员可以是不同数据类型的,基本数据类型或者构造数据类型。
结构体有利于程序的阅读 理解和移植,⽽且结构体的存储⽅式可以提⾼CPU对内存的访问速度。
定义结构体的⼀般形式: struct 结构名 { 成员列表 }; 成员列表由若⼲个成员组成,都是该结构体的组成部分,对于每个成员都需要进⾏类型说明,其形式为:类型说明符成员名2、定义结构体变量 (1)先声明结构体类型再定义变量名 struct student student1,student2; (2)在声明结构体类型时同时定义变量 这种形式的定义的⼀般形式为: struct 结构体名 { 成员列表 }变量名表列; (3)直接定义结构体类型变量 ⼀般形式为 struct { 成员表列 }变量名表列; //结构体名是可有可⽆的3、结构体变量的引⽤ ##注意: (1)不能将⼀个结构体变量作为⼀个整体进⾏输⼊输出。
(2)如果成员本⾝也是⼀个结构体类型,则需要使⽤成员运算符⼀级⼀级地找到最低⼀级的成员。
(3)结构体变量的成员⼀样可以像普通变量进⾏各种运算。
引⽤结构体变量中的成员的⽅式为: 结构体变量名.成员名 由上⾯形式可以直接对结构体变量中的成员进⾏赋值。
4、结构体变量的初始化 struct 结构体名 { 成员表列 }结构体变量1,结构体变量2 = {...}; 结构体变量1 = {... };5、结构体数组 概念:即数组的每个元素都是结构体类型。
struct 结构体名 { 成员表列 }数组名[]; 或者struct 结构体名数组名[] ; 初始化:数组名[] = { ...};6、指向结构体类型数据的指针 概念:结构体变量的指针就是该结构体变量所占据的内存段的起始地址。
c语言程序设计—结构体—实验报告
实验报告
一、实验背景
随着计算机科学的发展,数据的处理和存储已经发生了巨大的变化,变得更加结构化和更有效率。
考虑到这一点,结构体在计算机程序设计中尤其重要。
因此,本实验的目的是练习使用C语言编程,设计并实现相应的结构体,来实现一定的功能。
二、实验目标
设计一个结构体struct book,包含书名、作者名、出版社、价格等字段,并实现以下功能:
(1)按照书名查找图书;
(2)将书籍信息以字符串格式输出;
(3)将书籍信息保存到文件中;
三、实验内容
1. 用C语言定义结构体struct book,包含书名字段name(char类型)、作者author(char类型)、出版社publisher(char类型)、价格price(float类型)等信息。
2. 创建一个函数findBook,输入参数为书名字符串,输出参数为书籍信息struct book。
该函数实现按照书名查找图书功能,若查找成功返回书籍信息,否则返回null。
四、实验结果
经过上述步骤,已经编写了相应的C语言程序实现了按照书名查找图书、将书籍信息以字符串格式输出、将书籍信息保存到文件中、从文件中读取书籍信息等功能。
五、总结
本实验中,使用C语言实现了结构体struct book的定义及四个功能的程序,理解并大致掌握了结构体的使用,学会用程序实现数据的存取。
因此,我们可以看到,结构体的使用可以使数据的存取更加有效率和简单,对于程序设计是很重要的一个概念。
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实验心得在本次试验中,我通过学习和实践,对结构体类型变量的定义和使用以及链表的概念有了更清楚的理解,初步学会了对链表进行操作,掌握了结构体类型变量数组以及共用体的使用。
实验报告专业软件工程班级X 班学号_ XXXXXXXXX_ 姓名实验日期:201X年X月X日报告退发(订正、重做)课程C程序设计实验实验名称结构体一、实验目的二、实验环境(描述实验的软件、硬件环境)①软件环境:windows xp/win7等操作系统,Microsoft Visual C++ 6.0编译器;②硬件环境:PC机一台三、实验内容、步骤和结果分析题目一:#include <stdio.h>#include <stdlib.h>struct Stu{int num;char name[20];char sex;int age;float score[3];};void fun(struct Stu *stu, int i){float sum = stu->score[0] + stu->score[1] + stu->score[2], aeg = sum / 3.0;printf("\n第%d位学生的基本信息如下:\n\n", i);printf("学号:(%d)\t姓名:(%s)\t性别:(%c)\t年龄:(%d)\n\n", stu->num, stu->name, stu->sex, stu->age);printf("三科成绩:(%.2f,%.2f,%.2f)\n\n", stu->score[0], stu->score[1], stu->score[2]);printf("总成绩:(%.2f) 平均成绩:(%.2f)\n", sum, aeg);printf("\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n"); }int main(){int i, n;printf("The number of students is:");scanf("%d", &n);struct Stu *stu = (struct Stu *)calloc(n, sizeof(struct Stu));for (i = 0; i<n; i++){printf("请输入第%d位学生的基本信息:\n", i + 1);printf("学号:");scanf("%d", &(stu + i)->num);printf("姓名:");scanf("%s", (stu + i)->name);printf("性别:");scanf(" %c", &(stu + i)->sex);printf("年龄:");scanf("%d", &(stu + i)->age);printf("三科成绩:");scanf("%f%f%f", &(stu + i)->score[0], &(stu + i)->score[1], &(stu + i)->score[2]);putchar('\n');}printf("===================================================================\n");for (i = 0; i<n; i++){fun(stu + i, i + 1);}return 0;}题目二:计算每一个结构体的两个变量所表示的长度之和(单位:厘米)(1)分别定义公制METRIC(成员包括:米、厘米)和英制BRITISH(成员包括:英尺、英寸)两个结构体;(2)为每一个结构定义两个变量。
一、实验目的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)结构体可以同时存储不同类型的成员变量,而共用体在任意时刻只能存储一种类型的成员变量。
实验九参考程序实验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结构体数据的输入。
实验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进行内存释放。
C语⾔实验报告c程序实验报告姓名:黄澄实验地点:教学楼514教室实验时间:4⽉30⽇⼀、本章要点1.通过实验理解结构体和共⽤体的数据结构(先定义类型,再变量)2.结构体、共⽤体中数组的使⽤及变量的赋值3.结构体和共⽤体定义时的嵌套使⽤(嵌套使⽤的结构体必须先定义)⼀、实验⽬的与要求(1)掌握结构体类型说明和结构体类型变量、数组、指针的定义⽅法及使⽤。
(2)学会引⽤结构体中的成员。
(3)掌握利⽤指向结构体的指针成员构成链表的基本算法。
(4)了解联合体类型和枚举类型的说明、其变量的定义及赋初值的⽅法。
(5)了解联合类型变量中各成员的存储结构,学会引⽤各成员中的数据。
(6)学习正确引⽤枚举类型常量,了解如何对枚举类型变量进⾏操作。
⼆、实验内容9.3.1 结构体变量的运⽤1.问题的简单描述:问题的简单描述:试利⽤结构体类型描述年、⽉、⽇,输⼊⼀个⽇期,统计⽇期是本年度第多少天。
2.流程图:3.实验代码:#include<stdio.h>main(){ struct date{int day;int month;int year;}a;int i,days=0;printf("请输⼊年⽉⽇:");scanf("%d%d%d",&a.year,&a.month,&a.day);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%400==0||a.year%100==0)days+=29;else days+=28;}days+=a.day;printf("%d年%d⽉%d⽇是该年的第%d天",a.year,a.month,a.day,days);}运⾏结果问题分析天数的计算就是循环累加,再加上不⾜⽉的⽇期,记录是不能作为⼀个整体输出的,应该分别⼀条条输出,结构体是构造数据类型,要先定义类型,然后是类型的变量,结构体赋初值要⽤花括号括起来。
C语言结构体共用体和动态内存分配共用体是一种特殊的数据类型,可以存储不同类型的数据,但是同一时间只能存储其中的一个成员。
共用体的内存空间是所有成员的最大字节长度。
动态内存分配是在程序运行时,根据需要动态地分配和释放内存空间。
下面将详细介绍C语言中的结构体、共用体和动态内存分配。
结构体是C语言中一种用户自定义的数据类型,它可以同时存储不同类型的数据,使得数据处理更加灵活方便。
结构体由多个不同类型的成员变量组成,每个成员变量可以拥有不同的数据类型。
结构体的定义以关键字struct开头,后面是结构体名称及其成员变量列表。
以下是一个结构体的例子:```cstruct Personchar name[20];int age;float height;};```定义了一个名为Person的结构体,包含了三个成员变量:name、age 和height。
其中name是一个字符数组,age是一个整数,height是一个浮点数。
我们可以通过`.`操作符访问结构体的成员变量:```cstruct Person p;strcpy(, "Tom");p.age = 20;p.height = 1.80;```上述代码中,我们定义了一个结构体Person的变量p,并为其成员变量赋值。
而共用体(union)是一种特殊的数据类型,它可以在相同的内存空间中存储不同的数据类型。
共用体的定义以关键字union开头,后面是共用体名称及其成员变量列表。
以下是一个共用体的例子:```cunion Dataint num;char name[20];float marks;};```定义了一个名为Data的共用体,包含了三个成员变量:num、name 和marks。
共用体的大小取决于其中最大的成员变量,以便为最大的成员分配足够的存储空间。
我们可以通过`.`操作符访问共用体的成员变量:union Data d;d.num = 10;strcpy(, "John");d.marks = 85.5;```上述代码中,我们定义了一个共用体Data的变量d,并为其成员变量赋值。