null第6章 数据的组织结构(二)第6章 数据的组织结构(二)6.3 文件 6.2 指针类型 6.1 结构体类型 6.4 联合体与枚举类型 null6.1 结构体类型6.1.1 结构体类型的概念 将若干个不同数据类型的变量组合在一起的复合型数据类型1. 结构体类型的声明格式:struct 结构体类型名{
数据类型 成员1;
数据类型 成员2;
......
数据类型n 成员n;
}; 组成结构体的每个数据称为该结构体的成员。null例如:用于描述坐标点的结构体类型的声明
struct point_type{
int x; /*x坐标*/
int y; /*y坐标*/
};例如:用于描述日期的结构体类型的声明
struct date_type{
int year; /*年*/
int month; /*月*/
int day; /*日*/
};结构体名null 结构体类型的定义仅仅是定义了一种特定的数据构造类型,它制定了这种构造使用内存的模式。并不引起系统为该结构体分配内存空间。null2 结构体类型变量的定义 先声明结构体类型再定义变量名 结构体类型名 变量名struct point_type p1, p2; 结构体类型变量的定义会引起系统按照结构体定义时制定的内存模式,为被说明的结构体类型变量分配一定的内存空间。struct 结构体名 结构体变量名null 在声明类型的同时定义变量例如:struct point_type
{ int x;
int y;
} p1,p2 ; 结构体的成员也可以是另一个结构体的变量(结构体嵌套)struct rectangle_type{
struct point_type lefttop; /*左上角的坐标*/
struct point_type rightbottom; /*右下角的坐标*/
};null 在C语言中,允许用户为已经存在的数据类型起一个别名,其说明格式为:格式:typedef 原数据类型 新数据类型名;用typedef声明新的类型名来代替已有的类型名typedef int INTEGER;
typedef float REAL;指定用INTEGER代表int类型,REAL代表float。
这样,以下两行等价:
① int i,j; float a,b;
② INTEGER i,j; REAL a,b;null为结构体类型point_type 起一个别名POINT:
typedef struct point_type{
int x;
int y;
} POINT;
在这里,POINT与struct point_type完全等价或:typedef struct point_type POINT ;定义 point_type结构体类型的变量 p1, p2:
POINT p1, p2;null3. 结构体变量的初始化struct 结构体类型名 变量名={ 成员值列表 };例: struct point_type p = {10, 20};struct date_type d = {2005, 5, 20};struct rectangle_type rect = { {10, 10}, {100, 100} };4. 结构体变量的引用 不能把结构体变量作为一个整体参加数据处理,参加各种运算和操作的只能是结构体变量中的各个成员项数据。null结构体成员项的引用方式为:
结构体变量名.成员名“.” 是成员运算符,访问结构体的成员例如:p.x , p.y 当出现了结构体的嵌套时,即成员本身是另一个结构体变量时,需用若干个成员运算符,一级一级地找到最低一级的成员。只能对最低级的成员进行操作和运算
如: struct rectangle_type rect ;
rect.lefttop.x , rect.lefttop.ynull5. 结构体型变量的基本操作结构体型变量的输入scanf(“%d%d%d”, &d.year, &d.month, &d.day);结构体型变量的输出printf(“%d %d %d”, d.year, d.month, d.day);结构体型变量的赋值对每个成员赋值: d.year = 2005; 如果一个结构体型变量已经被赋值,并且希望将它的值赋给另外一个类型完全相同的结构体型变量,则可以采用整体赋值的方式。
例: struct date_type d2; d2=d; 例1:通过键盘输入30名学生的基本信息,并显示输出。然后,再通过键盘输入一个月份和日期,查找并输出本年度在这个给定日期之后过生日的学生信息。 例1:通过键盘输入30名学生的基本信息,并显示输出。然后,再通过键盘输入一个月份和日期,查找并输出本年度在这个给定日期之后过生日的学生信息。 6.1.2 学生基本信息的组织方式 学生基本信息的组织和管理是一个十分有代表性的结构体应用实例。为了简化程序的复杂度,减少程序的书写量,在这里,假设学生的基本信息只包括:学号、姓名、出生日期、所属院系、所学专业。 null
为了表示一名学生的基本信息,应该声明一个包括学号、姓名、出生日期、所属院系、所学专业的结构体类型。
“出生日期”需要用三个数据项才能够表示完整,而“日期”是一个独立的概念,也应该为之声明一个结构体类型。
组织30名学生的信息。30名学生的基本信息属于同一个性质的数据,因此,应该利用一维数组将它们组织在一起。 问
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
分析null算法描述 null程序代码#include
#define NUM 30
typedef struct { /* 日期结构 */
int year;
int month;
int day;
}DATE;
typedef struct { /* 学生信息结构 */
int num;
char name[24];
DATE birthday;
char department[48];
char major[32];
}STUDENTIFNO;
void inputInfo(STUDENTIFNO[ ]);
void outputInfo(STUDENTIFNO[ ]);
void searchInfo(STUDENTIFNO[ ], DATE);nullmain( )
{
STUDENTIFNO s[NUM];
DATE date;
inputInfo(s);
outputInfo(s);
printf("\n Enter a date(month,day)");
scanf("%d%d", &date.month, &date.day);
searchInfo(s, date);
}
void inputInfo(STUDENTIFNO s[ ])
{
int i;
printf("\nEnter %d student's infmation(name,birthday,department,major)\n", NUM);
for (i=0; i date.month) {
printf("\n%4d%16s %2d//%2d", s[i].num,
s[i].name, s[i].birthday.month, s[i].birthday.day);
continue;
}
if (s[i].birthday.month==date.month && s[i].birthday.day>date.day) {
printf("\n%4d%16s %2d//%2d", s[i].num,
s[i].name, s[i].birthday.month, s[i].birthday.day);
}
}
}
例2:假设通过键盘输入一个含有10个整数的数列。请编写一个程序,将10个整数按照从小到大的顺序重新排列,要求输出排序后的结果以及每个整数在排序前的位置。 例2:假设通过键盘输入一个含有10个整数的数列。请编写一个程序,将10个整数按照从小到大的顺序重新排列,要求输出排序后的结果以及每个整数在排序前的位置。 6.1.3 结构体类型应用实例 null
排序是一种基本且应用广泛的操作。在前面的实例中,我们已经看到过排序操作的实现方法。然而,这个题目不仅要求输出排序之后的结果,还要求输出每个数据在排序前的位置。解决这个问题的一种方法是:将原始位置作为每个数据的属性保留起来,并借助于结构类型DATATYPE将每个数值data及位置pos绑定在一起,形成描述每个数据的整体信息。如果在排序过程中,需要交换两个数据的位置,可以将两个数据对应的结构型变量整体相互交换,以便实现每个数据的原始位置信息永远跟随数值一同移动的目的。
在这个程序中,定义了三个函数inputValue( )、outputValue( )和selectSort( ),分别用于完成输入、输出和查找的操作。问题分析null程序代码 #include
#define NUM 10 /* 数列中包含的数值个数 */
typedef struct {
int data; /* 整型数值 */
int pos; /* 原始位置 */
}DATATYPE;
void inputValue(DATATYPE[ ]);
void outputValue(DATATYPE[ ]);
void selectSort(DATATYPE [ ],int);
main( )
{
DATATYPE value[NUM];
inputValue(value);
selectSort(value, NUM);
outputValue(value);
}null/* 通过键盘输入10个整型数值 */
void inputValue(DATATYPE value[ ])
{
int i;
printf("\nEnter %d values:",NUM);
for (i=0; i
#include
#define King 5 /* 王 */
#define Spade 4 /* 黑桃 */
#define Hearts 3 /* 红桃 */
#define Diamonds 2 /* 方块 */
#define Club 1 /* 梅花 */
#define NUM 54
typedef struct {
int rank; /* 面值 */
int suit; /* 花色 */
} CARD;
void create(CARD card[ ]); /* 构造扑克牌 */
void riffle(CARD card[ ]); /* 洗牌 */
void deal(CARD card[ ]); /* 发牌 */
main( )
{
CARD card[NUM];
create(card);
riffle(card);
deal(card);
}nullvoid create(CARD card[ ]) /* 构造扑克牌 */
{
int i;
for (i=0; i
本文档为【c语言6(结构、指针、文件)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。