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

C语言第11章结构体

C语言第11章结构体

29
【例】30张选票,对三名侯选人之一投票选举,输 入得票人名字,按名字计数,输出最后选举结果。 #include "stdio.h" #define N 30 struct person { char name[20]; int count; };
Li
0 Zhang 0 Wang 0
led[0].name
第十一章 结构体与பைடு நூலகம்用体
本章目标
1.理解结构体,共用体的数据类型
2.学会定义结构体、共用体的数据类型 的变量 3.能够正确使用结构体、共用体的成员
§11.1
已了解的数据类型:
引言
整型 浮点型 字符型 数组
简单数据类型
用户定义的数据类型
特点:所有的元素都是同一种类型
指针型 存在的问题:难以处理较复杂的数据
18
圆点运算符
引用形式:结构体变量名 . 成员名 其中:成员运算符’ . ‟ : 一级,自左而右;
stu1.num 引用结构体变量stu1的num成员; 引用stu1的name成员(字符指针); [i] 引用name成员的第i个元素; stu1.birthday.y 只能对最低级成员进行引用;
二、定义完结构体后,定义结构变量并初始化 struct student x2={0002, "Li Ming ", 85.5};
16
§11.4 访问结构成员
访问结构变量实质上是引用其成员 有两种运算符可访问结构成员
17
struct date { int m; int d; iny y; }; struct student { long num; char name[20]; char sex; struct date birthday; float score; char tel[15]; } stu1, stu2;

C语言程序设计第十一章 结构体与共用体

C语言程序设计第十一章 结构体与共用体

11 结构体与共用体 (1)11.1 定义一个结构的一般形式 (1)11.2 结构类型变量的说明 (2)11.3 结构变量成员的表示方法 (4)11.4 结构变量的赋值 (4)11.5 结构变量的初始化 (5)11.6 结构数组的定义 (5)11.7 结构指针变量的说明和使用 (7)11.7.1 指向结构变量的指针 (7)11.7.2 指向结构数组的指针 (9)11.7.3 结构指针变量作函数参数 (10)11.8 动态存储分配 (11)11.9 链表的概念 (12)11.10 枚举类型 (14)11.10.1 枚举类型的定义和枚举变量的说明 (14)11.10.2 枚举类型变量的赋值和使用 (15)11.11 类型定义符typedef (16)11 结构体与共用体11.1 定义一个结构的一般形式在实际问题中,一组数据往往具有不同的数据类型。

例如,在学生登记表中,姓名应为字符型;学号可为整型或字符型;年龄应为整型;性别应为字符型;成绩可为整型或实型。

显然不能用一个数组来存放这一组数据。

因为数组中各元素的类型和长度都必须一致,以便于编译系统处理。

为了解决这个问题,C语言中给出了另一种构造数据类型——“结构(structure)”或叫“结构体”。

它相当于其它高级语言中的记录。

“结构”是一种构造类型,它是由若干“成员”组成的。

每一个成员可以是一个基本数据类型或者又是一个构造类型。

结构既是一种“构造”而成的数据类型,那么在说明和使用之前必须先定义它,也就是构造它。

如同在说明和调用函数之前要先定义函数一样。

定义一个结构的一般形式为:struct 结构名{成员表列};成员表列由若干个成员组成,每个成员都是该结构的一个组成部分。

对每个成员也必须作类型说明,其形式为:类型说明符成员名;成员名的命名应符合标识符的书写规定。

例如:struct stu{int num;char name[20];char sex;float score;};在这个结构定义中,结构名为stu,该结构由4个成员组成。

实验 结构体与共用体_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语言程序设计-第11章 结构体与共用体

C语言程序设计-第11章 结构体与共用体

2.说明: (1)结构体类型与结构体变量是两个不同的概念, 其区别如同int类型与int型变量的区别一样。 (2)结构体类型中的成员名,可以与程序中的变 量同名,它们代表不同的对象,互不干扰。 (3)“结构体类型名”和“数据项”的命名规则, 与变量名相同。
(4)数据类型相同的数据项,既可逐个、 逐行分别定义,也可合并成一行定义。 例如,本案例中的日期结构类型,也可改为如下形 式: struct date {int year, month, day; }; (5)结构体类型中的数据项,既可以是基本数据类 型,也允许是另一个已经定义的结构体类型。 例如,结构体类型std_info,其数据项“birthday” 就是一个已经定义的日期结构类型date。 (6)本书将1个数据项称为结构体类型的1个成员 (或分量)。
例如:
struct student {int num; . . . }; struct student stu[ ]={{…},{…},{…}}; 以上即声明结构体类型,然后定义数组为该结构体类 型,在定义数组时初始化。
11.5.3 结构体数组应用举例
例 11.2 对候选人得票的统计程序。 #include <string.h> struct piao {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<=6;i++) {scanf(“%s”,leader_name);
C语言提供了将不同类型的数据组合成一个 有机的整体,以便引用。例如,一个学生 的学 号、姓名、性别、年龄、成绩、家庭 地址等项。这些项都与该学生相联系。 在一个组合项中包含有若干个类型不同的数 据项,这样一种数据结构称为结构体。它相 当于其他高级语言中的“记录”。 见下图: num name sex age score addr 10010 Li Fun M 18 87.5 Beijing

c程序设计 第十一章 结构体与共用体

c程序设计 第十一章 结构体与共用体

11.2 定义结构体类型变量的方法
• 4、对结构体中的成员,可以单独使用,他的作用与地位 • 相当于普通变量。
11.3 结构体变量的引用
• • • • • • • • • • • 引用形式: 结构体变量名.成员名 规则: 1、不能将结构体变量作为一个整体进行赋值、输入和输 出,只能对结构体中的各个成员分别进行;但允许将一个 结构体变量直接赋值给另一个具有相同结构的结构体变 量。 如: student1.num=10010; student1=student2; 2、如果成员本身又属一个结构体类型,则要用若干个成 员运算符,一级一级地找到最低的一级的成员。只能对最 低级的成员进行赋值或存取以及运算。 如:student1.num student1.birthday.month
11.6 指向结构体类型数据的指针
• • • • • • • • • • • • • • 试分析以下几种运算: p -> n p -> n++ ++ p -> n 例11.3 指向结构体变量的指针的应用 #include<stdio.h> #include<string.h> void main( ) { struct student { long num; char name[20]; char sex; float score; };
11.5 结构体数组
• • • • • • • • • 例10.2 候选人得票的统计程序。设三个候选人,每次输 入一个得票的候选人的名字,要求最后输出候选人的得票 结果。 #include<stdio.h> #include<string.h> struct person { char name[20]; int count; } leader[3]={“Li”, 0, “Zhang”, 0, “wang”, 0};

C语言编程:第十一章结构体与共用体

• 例如:表示一个学生的有关信息(学号,姓名,性 别 年龄,总分,地址),其具体数据情况如图所 示: num name sex age score addr
10010 Li Fun M 18 87.5 Bejing
Zhang Sumin (South China Agriculture University Computer Department ,Guangzhou 510640) zsmhome@
Zhang Sumin (South China Agriculture University Computer Department ,Guangzhou 510640) zsmhome@
11.3 结构体变量的引用
结构体变量的引用应该遵循以下原则 • 1)不能将一个结构体变量作为一个整体进行输入和
2)结构体名同标识 符命名规则;
3)分号不能省略
4)成员列表又称“域表”,每个成员也称为域。
5)指定一个结构体类型相当于指定了一个模型,它无 数据,系统对其不分配实际内存单元。
Zhang Sumin (South China Agriculture University Computer Department ,Guangzhou 510640) zsmhome@
struct { int num;
char name[10]; char sex;
int age; float score; char addr[30]; } student1,student2;
(3)
Zhang Sumin (South China Agriculture University Computer Department ,Guangzhou 510640) zsmhome@

实验十一 结构体(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语言程序设计实验报告(结构体和共用体)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。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验十一结构体与共用体(二)
一、目的和要求
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,leap
struct 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)理解运用指向结构体变量的指针访问结构体成员的方法。

(2)运用结构体变量访问结构体成员的方法重新编写第2题程序,并上机调试运行。

相关文档
最新文档