C语言程序设计 实验报告7--结构体共用体
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
C语言程序设计(李圣良)章 (7)
一般形式如下:
struct
{
成员列表;
}变量名列表;
例如,可以直接定义结构体变量st1、st2:
struct
{
char id[9];
/* 学号 */
char name[10];
/* 姓名 */
char sex;
/* 性别 */
int age;
/* 年龄 */
float score;
/* 成绩 */
}st1,st2;
型变量x和y表示点的x坐标和y坐标。
# include <stdio.h>
# include <math.h>
struct point
/* 点 */
{ float x;
/* x坐标 */
float y; /* y坐标 */
};
main()
第7nt p1;
float l;
采用定义变量的方式来定义数据成员。
第7单元 结构体和共用体 (4) 结构体类型定义必须以分号结束。 例如,根据图7-1的分析可以设计结构体类型如下:
struct student
{
char id[9];
char name[10];
char sex;
int age;
float score;
};
/* 学号 */ /* 姓名 */
\n",tomor.year,tomor.month,tomor.day); }
第7单元 结构体和共用体 图7-3 例7-1程序运行结果
第7单元 结构体和共用体 3. 结构体变量的初始化 在结构体变量定义的同时可以为其整体赋初值,方法与数
组的初始化相似,将各个数据成员的值按声明类型时的顺序依 次排列,使用逗号间隔,全部放在大括号中,整体赋值给变量。 例如:
C语言程序设计方案实验报告实验七结构体和联合体程序设计方案
实验七、结构体程序设计一、实验目的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 语言实验的主要目的是通过实际操作和编程实践,加深对 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程序设计(第四版)第7章结构体与共用体
7.1.1
结构体类型的定义
结构体在说明和使用之前,必须先由用 户自己定义。结构体定义的一般形式如下: struct 结构体名 { 成员类型说明符 成员项1; 成员类型说明符 成员项2; …… 成员类型说明符 成员项n; };
其中: 1、struct是C语言中定义结构体的关键字。 2、成员类型说明符是说明每个成员项的数 据类型,可以是基本数据类型,也可以是数组 类型,还可以是另一个已定义的结构体类型。 3、成员名可以和程序中的变量名相同,两 者不代表同一对象。 4、要注意,在结构体定义中的右括号后应 该有分号。
7.1.6
指向结构体的指针
一个结构体类型的数据在内存中都占据一定 的存储空间,我们可以定义一个指针来指向该 结构体类型的数据,该指针变量称为指向结构 体的指针,简称之为结构体指针。我们可以通 过结构体指针来访问结构体类型的数据,如结 构体变量、结构体数组。指向结构体的指针变 量说明形式如下: struct 结构体类型名 *结构体指针变量名;
main() { struct student stu1; struct student *p; p=&stu1; stu1.num=50201001; gets(); stu1.score=89.5;
printf(“No:%ld\nName:%s\nScore:%4.1f\n”,stu1 .num,,stu1.score); printf(“No:%ld\nName:%s\nScore:%4.1f\n”,(*p). num,(*p).name,(*p).score);
3、结构体数组应用举例 【例7-2】现有三个候选人(每个候选人的ID 号分别是1、2、3),选举人投票进行选举, 编写程序统计出每个候选人的得票结果。 程序如下: #define NUM 30 #include <stdio.h> struct elector { int id; char name[20]; int count;
实验 结构体与共用体_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-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语⾔中的结构体及共⽤体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语言程序设计—结构体—实验报告
实验报告
一、实验背景
随着计算机科学的发展,数据的处理和存储已经发生了巨大的变化,变得更加结构化和更有效率。
考虑到这一点,结构体在计算机程序设计中尤其重要。
因此,本实验的目的是练习使用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语言程序设计实验报告(结构体和共用体)
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实验心得在本次试验中,我通过学习和实践,对结构体类型变量的定义和使用以及链表的概念有了更清楚的理解,初步学会了对链表进行操作,掌握了结构体类型变量数组以及共用体的使用。
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。
C语言程序设计—结构体—实验报告
实验报告专业软件工程班级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)结构体可以同时存储不同类型的成员变量,而共用体在任意时刻只能存储一种类型的成员变量。
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语言程序设计实验结构体与共用体
实验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语⾔实验报告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语言中的结构体、共用体和动态内存分配。
结构体是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,并为其成员变量赋值。
第八章结构体、共用体与枚举实验报告
{ union{unsigned int t;
unsigned char c;
}u;
u.c='a';
printf("%c\n",u.t); getch();
}
结论:一个共用体中可能有若干个不同类型的成员,但在任何时刻,只有一个成员的值被存储。
这就是最后赋给它的值。
6、设有以下语句
char x=3,y=6,z;
inti;floatsum = 0;
for ( i = 0;i<3;i++ )
sum = sum+p->score[i];
printf( "%6.2f\n", sum ) ;
}
3、下面程序的输出结果是( )
typedef struct{
float x ;
char z ;
}mytype;
mytype a ;
具体内容:
1、有以下程序,程序运行后的输出结果是()。
structs
{intx, y;
} data[2] = { 10, 100, 20, 200 } ;
main( )
{structs *p = data;
printf( "%d\n", ++ ( p->x ) ) ;
}
2、有以下程序,程序运行后的输出结果是()。
main()
{
printf("%d",sizeof(a));
}
4、下面程序的输出结果是( )
typedef union{lonBiblioteka a[1] ;char y ;
char c[10];
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
is:student %6.2f,
第四题
4. #include"string.h" main()
{ struct person {char name[10]; int count; }; struct person candi[3]={"li",0,"zhang",0,"wang",0}; int i,j; char name[10]; printf("输入选票:\n"); for(i=1;i<=10;i++) {scanf("%s",name); for(j=0;j<3;j++) if(strcmp(name,candi[j].name)==0)candi[j].count++; } printf("\n"); for(i=0;i<3;i++) printf("%5s:%d\n",candi[i].name,candi[i].count);}
第三题
3. #include<stdio.h> #include<stdio.h> #define N 5 struct student { char num[6]; char name[8]; float score[3]; float avr; }stu[N]; int main () {int i,j,maxi; float sum,max,average; for(i=0;i<N;i++) {printf("input scores of student %d:\n",i+1); printf("NO.:"); scanf("%s",stu[i].num); printf("name:"); scanf("%s",stu[i].name);
福建农林大学实验报告
系(教研室): 信息与机电工程系 专业: 机械设计制造及其自动化 年级: 2014 实验课程: C语言程序设计 姓名: 学号: 实验室号:B703 计算机号: 79 实验时间: 2015.11.24 指导教师签字: 成 绩:
实验7:结构体和共用体 1、 实验目的和要求
1.掌握结构体类型变量的定义和使用 2.掌握结构体类型数组的概念和应用 3.掌握共用体的概念与使用
for(j=0;j<3;j++) {printf("score %d:",j+1); scanf("%f",&stu[i].score[j]); } } average=0; max=0; maxi=0; for(i=0;i<N;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=average/N; printf(" NO. name score score2 score3 average\n"); for(i=0;i<N;i++) { printf("%5s%10s",stu[i].num,stu[i].name); for(j=0;j<3;j++) printf("%9.2f",stu[i].score[j]); printf(" %8.2\n",stu[i].avr); } printf("average=%5.2f\n",average); printf("The highest score %s,%s\n",stu[maxi].num,stu[maxi].name); printf("his score are:.%6.2f, %6.2f,,average:%5.2f./n",stu[maxi].score[0] ,stu[maxi].score[1],stu[maxi].score[2],stu[maxi].avr); }
printf("NO.:"); 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); } void print(struct student stu[6]) {int i,j; printf("\ score1 score2 score3\n"); for(i=0;i<5;i++) {printf("%5s%10s",stu[i].num,stu[i].name); for(j=0;j<3;j++) printf("%9d",stu[i].score[j]); printf("\n");} }
2、 实验内容和原理
1. 编写一个函数print,输出一个学生的成绩数组,该数组中有5个学 生的数据记录,每个记录包括num、name、score[3],用主函数输 入这些记录,用print函数输出这些记录。 2. 设有若干个人员的数据,其中有学生和老师。学生数据包括:姓 名、号码、性别、职业、班级。教师的数据包括:姓名、号码、性 别、职业、职务。现要求把它们放在同一表格中,见图1。如果job 项是t(教师),则第5项为position(职务)。如果job项是s,则 第5项为class(班级)。要求输入人员的数据,然后再输出。为简 化起见,只设两个人(一个学生,一个教师)。 num name sex job class position 101 102 Li Wang f m s 501
ቤተ መጻሕፍቲ ባይዱ
附录: 第一题
#include<stdio.h> #define N5 struct student {char num[6]; char name[8]; int score[4]; }stu[5]; void main() {void print(struct student stu[6]); int i,j; for(i=0;i<5;i++) {printf("\n input score of student%d:\n",i+1);
3、 实验环境
1. 硬件:PC机; 2. 软件:Windows操作系统、Visual C++ 6.0 。
4、 算法描述及实验步骤
参照实验辅导书
5、 调试过程
详细记录程序在调试过程中出现的问题及解决方法
6、 实验结果 第一题
.
第三题
第四题
4.
七.总结
对上机实验结果进行分析、上机的心得体会及改进意见。
t prof 图1 3. 有5个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键 盘输入5个学生数据,要求输出3门课总平均成绩,以及最高分的学
生的数据(包括学号、姓名、3门课的成绩、平均分数)。 4. 对候选人得票的统计程序。设有三个候选人,每次输入一个得票的 候选人的名字,要求最后输出各人得票结果。设有10人投票。