C语言程序设计 实验报告7--结构体共用体

合集下载

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

C语言程序设计(李圣良)章 (7)

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语言程序设计方案实验报告实验七结构体和联合体程序设计方案

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 语言实验的主要目的是通过实际操作和编程实践,加深对 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章结构体与共用体

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语言程序设计实用实践教程_[共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语言中的结构体和共用体(联合体)/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 等)具有同样的作用,都可以用来定义变量的类型。

结构体变量前面只是声明了一个结构体类型,它相当于一个模型,但其中并无具体的数据,编译系统对其也不分配实际的内存单元。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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人投票。
相关文档
最新文档