结构体(第九章)
第九章细胞骨架
体外实验表明,微丝正极与负极都能组装,组 装快的一端为正极,慢的一端为负极;去组装 时,同样正极比负极快。
在微丝组装时,若G-actin 添加到F-actin上的速率正 好等于G-actin 从F-actin失 去的速率时,微丝净长度 没有改变,这种过程称为 踏车行为。它是由G-actin 单体的临界浓度决定的。
七、细胞内依赖于微管的物质运输
有规则地沿微管运输货物的分子马达主要有驱动蛋
细胞中能利用水解 ATP将化学能转变为机械能, 白(kinesin)和胞质动力蛋白(cytoplasmic dynein)。
驱动蛋白及其功能:通常朝微管的正极运动
驱动蛋白沿微管运动的分子机制
胞质动力蛋白及其功能:朝微管的负极运动
八、纤毛和鞭毛的结构与功能
九、纺锤体和染色体运动
微管的类型
单管:大部分细胞质微管是单管微管,它在低温、Ca2+ 和秋水仙素作用下容易解聚,属于不稳定微管。 二联管:是构成纤毛或鞭毛的轴丝微管,是运动类型的 微管,它对低温、Ca2+和秋水仙素都比较稳定。 三联管:存在于中心粒和基体,它对低温、Ca2+和秋水
微管组装是一个动态不稳定的过程
微管组装的动力学不稳定性是指微管组装生长与快 速去组装的交替变换现象。
动力学不稳定性产生的原因
决定微管正端是GTP帽还是GDP帽,又受两种因素
影响,一是结合GTP的游离微管蛋白二聚体的浓度,
二是GTP帽中GTP水解的速度。 当一端组装的速度和另一端解聚的速度相同时,微 管的长度保持稳定,即所谓的踏车行为。
微丝的组装及动力学特性
MF是由G-actin单体形成的多聚体,肌动蛋白单体具有极性, 装 配时呈头尾相接, 故微丝具有极性,有正极与负极之分。 组装可分为成核反应、延长期和稳定期三个阶段。
c程序设计 第九章 结构体
一、概念题二、判断题1. 结构体中的成员不可以单独使用(F)。
2. 成员名可以与程序中的变量名相同,二者不代表同一对象(T)。
3. 不能将一个结构体变量作为一个整体进行输入输出(T)。
4. 结构体变量所占内存长度是各成员占的内存长度之和(T)。
5. 结构体中的成员不可以单独使用(F )。
9. 一个结构体变量的指针就是该变量所占内存段的起始地址(T)。
10. 用结构体变量作实参,形参也必须是同类型的结构体变量(T )。
三、单选题1. 设变量定义如下,则对其中的结构分量num正确的引用是( )。
struct student {int num ;char name[20];float score;} stud[10];A. stud[1].num=10;B. student.stud.num=10;C. struct.stud.num=10;D. struct student.num=10;2. 已知职工记录描述如下,设变量w中的“生日”是“1993年10月25日”,下列对“生日”的正确赋值方式是()。
struct worker{int no;char name[20];char sex;struct birth{ int day; int month; int year;}a;};struct worker w;A day=25;month=10;year=1993;B w.birth.day=25; w.birth.month=10; w.birth.year=1993;C w.day=25; w.month=10; w.year=1993;D w.a.day=25; w.a.month=10; w.a.year=1993;3. 对于以下的变量定义,语句( )在语法和语义上都是正确的。
struct node {float x,y;char s[10];} point={1,2,”abc”},*p;A. *p=point;B. p=&point;C. point=p;D. p->x=point.y;4. 设有以下语句typedef struct S{ int g;char h;} T;则下面叙述中正确的是()。
C语言 第九章 结构体数据类型期末测试习题与答案
程序运行后的输出结果是( )。
A.SunDan 20044
B.YangSan 20041
C.SunDan 20042
D.LiSiGuo 20042
参考答案:D
3、以下程序运行的结果是_( )。
#nclude”stdio.h
main()
{
struct date
{
int year , month , day ;
D.struct color
{ int red;
int green;
int blue;
} c l;
参考答案:B
7、有以下程序:
struct stu
{
char[10];
float score[3];
};
main( )
{
struct stu s[3]={{"20021",90,95,85},
{"20022",95,80,75},
} today ;
printf(“%d\n”,sizeof(struct date));
}
A.10
B.6
C.8
D.12
参考答案:D
4、设有如下说明
typedef struct ST
{
long a;
int b;
char c[2];
} NEW;
则下面叙述中正确的是______。
A.ST是一个结构体类型
B.NEW是一个结构体类型
A.typedef struct
{ int red;
int green;
int blue;
} COLOR;
COLOR cl;
B.struct color cl
结构和联合.ppt
9.2 结构体数组
当表示(存储)一组同类型的数据时可以采用数组
9.2.1 结构体数组的定义 struct student a[10];
9.2.2 结构体数组的初始化 struct student a[3]={{……},{……},{……}};
9.2.3 结构体数组的元素引用 struct student a[10];
struct node *search(struct node *head,int m) { /*在带头节点的单链表中查找值为m的节点 */
struct node *p; p=head->next; while(p!=NULL && p->data!=m)
p=p->next; return p; }
s=0.0; for(j=0;j<3;j++)
s+=a[i].score[j]; a[i].sum=s; a[i].aver=s/3; } }
int main() {
struct student a[2]; in0(a,2); pp(a,2); out0(a,2); }
9.5 引用自身的结构
一般来说,都应该遵循先定以后使用的原则,但在 结构体中可以引用自身(此时自身还没定义好),引用 只能采用指针不能使用结构变量
int x; struct node *h,*r,*f; h=r=(struct node *)malloc(sizeof(struct node)); scanf("%d",&x); while(x){
f=(struct node *)malloc(sizeof(struct node)); f->data=x; r->next=f; r=f; scanf("%d",&x); } r->next=NULL; return h; } void printlink(struct node *head) /*输出带头节点的单链表*/ { struct node *p; p=head->next; while(p!=NULL){ printf("%6d",p->data); p=p->next; } printf("\n"); }
C程序设计第四版Chap9(新)-谭浩强
21
结构体数组
struct student s[ ] = { {10001001,"张三",20, "M",{1985,1,1},"XXX",123456 }, {……}, {……} };
2013 - 2014 Lu & Xiao. All rights reserved.
2013 - 2014 Lu & Xiao. All rights reserved.
25
结构体指针
指针的基类型可以是一个结构体类型。 例如: struct student s1,*ps; …… ps = &s1;
2013 - 2014 Lu & Xiao. All rights reserved.
2013 - 2014 Lu & Xiao. All rights reserved.
15
第9章
9.1 9.2 9.3 9.4 9.5 9.6 9.7 9.8
结构体
结构体类型 结构体变量定义及成员引用 结构体变量的初始化 结构体数组 结构体指针 单向链表概念 单向链表建立、查找、遍历、插入、删除 typedef定义类型别名
1
第 9章
结构体
2013 - 2014 Lu & Xiao. All rights reserved.
2
第9章
9.1 9.2 9.3 9.4 9.5 9.6 9.7 9.8
结构体
结构体类型 结构体变量定义及成员引用 结构体变量的初始化 结构体数组 结构体指针 单向链表概念 单向链表建立、查找、遍历、插入、删除 typedef定义类型别名
第九章 结构体和共用体
– 【例9.5】用指向结构体变量的指针变量引用结构体变量
14
• (2)结构体数组的指针
– 结构体指针具有同其他类型指针一样的特征和使用方 法。结构体指针变量也可以指向结构体数组。同样结 构体指针加减运算也遵照指针计算规则。例如,结构 体指针变量加1的结果是指向结构体数组的下一个元素。 结构体指针变量的地址值的增量取决于所指向的结构 体类型变量所占存储空间的字节数。 – 【例9.6】有4名学生,每个学生的属性包括学号、姓名、 成绩,要求通过指针方法找出成绩最高者的姓名和成 绩。 – 程序设计分析:将学生信息存入数组中,通过指针依 次访问每一个学生信息,比较其分数,从而求出获得 最高分学生在数组中的位置。
– 在结构体变量定义之后对结构体变量赋值时可 以采用各成员赋值,用输入语句或赋值语句来 完成。 – 【例9.2】在定义后对结构体变量赋初值。 – 【例9.3】有两条记录,记录包括数量(num)和 价钱(price),编写一程序完成总价钱的计算。
11
9.2 结构体数组与结构体指针
9.2.1结构体数组
5
• ④结构体类型的定义只说明了该类型的构成形式,系统并 不为其分配内存空间,编译系统仅给变量分配内存空间 • ⑤结构体成员的类型也可以是另外一个结构体类型。如: 1. struct date 2. { int year; 3. int month; 4. int day; 5. }; 6. struct student 7. { 8. int num; 9. char name[20]; 10. char sex; 11. struct date birthday; 12. int score[5]; 13.}; • 结构体成员的类型如果是另外一个结构体类型,同样必须 遵守先定义后使用的原则。如上例中,先定义struct date类 6 型,再定义struct student类型。
(完整word版)数据结构第九章查找
第九章查找:习题习题一、选择题1.散列表查找中k个关键字具有同一散列值,若用线性探测法将这k个关键字对应的记录存入散列表中,至少要进行( )次探测。
A. k B。
k+l C. k(k+l)/2 D. l+k (k+l)/22.下述命题( )是不成立的。
A。
m阶B-树中的每一个结点的子树个数都小于或等于mB。
m阶B-树中的每一个结点的子树个数都大于或等于『m/2-1C。
m阶B-树中的每一个结点的子树高度都相等D。
m阶B—树具有k个子树的非叶子结点含有(k-l)个关键字3.如果要求一个基本线性表既能较快地查找,又能适应动态变化的要求,可以采用( )查找方法.A。
分块 B. 顺序 C. 二分 D.散列4.设有100个元素,用折半查找法进行查找时,最大比较次数是( ),最小比较次数是( ).A。
7,1 B.6,l C.5,1 D. 8,15.散列表长m=15,散列表函数H(key)=key%13。
表中已有4个结点:addr(18)=5;addr(32)=6; addr(59)=7;addr(73)=8;其余地址为空,如果用二次探测再散列处理冲突,关键字为109的结点的地址是( )。
A. 8 B。
3 C. 5 D。
46.用分块查找时,若线性表中共有729个元素,查找每个元素的概率相同,假设采用顺序查找来确定结点所在的块时,每块应分( )个结点最佳。
A。
15 B. 27 C。
25 D。
307.散列函数有一个共同性质,即函数值应当以( )取其值域的每个值。
A.同等概率B。
最大概率C。
最小概率D。
平均概率8.设散列地址空间为O.。
m—1,k为关键字,假定散列函数为h(k)=k%p,为了减少冲突,一般应取p为( )。
A.小于m的最大奇数B. 小于m的最大素数C.小于m的最大偶数D.小于m的最大合数9.当向一棵m阶的B-树做插入操作时,若使一个结点中的关键字个数等于( ),则必须分裂成两个结点。
A。
m B。
m-l C.m+l D。
结构体和共用体
num
name
birthday
month
day
year
stu1.birthday.month=12;
例 struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }stu1,stu2;
直接定义结构体变量 一般形式:
{ 类型标识符 成员名; 类型标识符 成员名; ……………. }变量名表列;
struct
{ int num; char name[20]; char sex; int age; float score; char addr[30]; }stu1,stu2;
形式二:
struct 结构体名 { 类型标识符 成员名; 类型标识符 成员名; ……………. }结构体变量={初始数据};
例 struct student { int num; char name[20]; char sex; int age; char addr[30]; }stu1={112, "Wang Lin", 'M',19, "200 Beijing Road"};
成员类型可以是 基本型或构造型
struct是关键字, 不能省略
合法标识符 可省:无名结构体
例 struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; };
顺序初始化: struct student { int num; char name[20]; char sex; int age; }; struct student stu[ ]={100, "Wang Lin", 'M',20, 101, "Li Gang", 'M',19, 110, "Liu Yan", 'F',19};
C语言第9章结构体、共用体、枚举
结构体变量.成员
struct date { int year;
int month; int day;
“.”是成员运算符, 优先级最高
printf("%d,%d,%d",birth);
printf("%d,%d,%d",birth.year,
}; struct date birth;
birth.month,birth.day);
scanf("%f",&student2.score[2])7; 8
student2
结构变量的整体赋值 student3 = student2;
02 Zhang Zi Liang 88 78
student3
02 Zhang Zi Liang 88 78
湖南工业大学计算机与通信学院
例9-1学生的基本信息包括学号、姓名、3门成绩、平均分、总分。输入一 个学生的前3项基本信息,计算平均分和总分并输出。
湖南工业大学计算机与通信学院
9.1 问题的提出
又如,在学生信息管理系统中填 加个属性:是否是中共党员,如 果不是属性的值为0(int),如
果是属性的值为入党的时间 (char)。在某一时间,属性只有 一种值,而且数据类型不同,这 种情况用什么数据类型描述呢?
对于这种应用,C语言引入了共用体类型。
共用体是一种同一存储区域由不同类型变量共享的数据 类型,它提供—种方法能在同一存储区中操作不同类型 的数据,也就是说共用体采用的是覆盖存储技术,准许 不同类型数据互相覆盖。
基本数据类型并不能方便地解决所有问题
❖ 复合数据类型是基本数据类型迭代派生而来
典型的代表就是“结构”,数组、指针也可算作此类
第九章习题及答案
第九章习题一、选择题1.以下选项中不能正确把cl定义成结构体变量的是( )A)typedef struct B)struct color cl{ int red; { int red;int green; int green;int blue; int blue;} COLOR; COLOR cl; };C)struct color D)struct{ int red; { int red;int green; int green;int blue; int blue;} cl; } cl;2.有以下说明和定义语句struct student{ int age; char num[8];};struct student stu[3]={{20,"200401"},{21,"200402"},{10\9,"200403"}};struct student *p=stu;以下选项中引用结构体变量成员的表达式错误的是( )A) (p++)->num B)p->num C)(*p).num D)stu[3].age3.有以下结构体说明、变量定义和赋值语句struct STD{char name[10];int age;char sex;}s[5],*ps;ps=&s[0];则以下scanf函数调用语句中错误引用结构体变量成员的是( )。
A)scanf(“%s”,s[0].name);B)scanf(“%d”,&s[0].age);C)scanf(“%c”,&(ps->sex)); D)scanf(“%d”,ps->age);4.以下叙述中错误的是()A)可以通过typedef增加新的类型B)可以用typedef将已存在的类型用一个新的名字来代表C)用typedef定义新的类型名后,原有类型名仍有效D)用typedef可以为各种类型起别名,但不能为变量起别名5.有以下程序段()typedef struct node { int data; struct node *next; } *NODE;NODE p;以下叙述正确的是(C)A)p是指向struct node结构变量的指针的指针B)NODE p;语句出错C)p是指向struct node结构变量的指针D)p是struct node结构变量6.若有以下定义和语句union data{ int i; char c; float f;}x;int y;则以下语句正确的是( )。
C语言 结构体ppt课件
double average;
/* 个人平均成绩 */
};
结构是C语言中一种新的构造数据类型,它能够 把有内在联系的不同类型的数据统一成一个整体, 使它们相互关联
结构又是变量的集合,可以按照对基本数据类型 的操作方法单独使用其变量成员。
精品课件
7
9.1.2 结构的概念与定义
结构类型定义的一般形式为:
if(p->num == num)
break;
if(i < n)
/* 找到,修改成绩 */
{
switch(course){
case 1: p->math = score; break;
/* 交换数组元素 */
students[index] = students[i];
students[i] = temp;
}
/* 输出排序后的信息 */
printf("num\t name\t average\n");
for (i = 0; i < n; i++ )
printf("%d\t%s\t %.2lf\n", students[i].num, students[i].name, students[i].average);
{ float x; float y;
};
•虽然x、y的类型相同,也 可以用数组的方式表示, 但采用结构进行描述,更 贴近事物本质,从而增加 了程序的可读性,使程序 更易理解
•结构适合用于描述具有多 个属性的实体或对象
精品课件
9
9.1.3 结构的嵌套定义
在我们的实际生活中,一个较大的实体可能由多 个成员构成,而这些成员中有些又有可能是由一 些更小的成员构成。
《C语言程序设计》 课后习题答案 高等教育出版社
《C语言程序设计》课后习题答案高等教育出版社《C语言程序设计》课后习题答案高等教育出版社第一章:C语言概述1. C语言的特点C语言是一种以处理底层任务和系统编程为目标的高级编程语言。
其特点包括语法简洁、执行效率高、可移植性强等。
第二章:C语言基本数据类型1. C语言中的基本数据类型C语言中的基本数据类型包括整型、字符型、浮点型等。
整型可以进一步细分为有符号整型和无符号整型。
第三章:C语言运算符1. C语言中的运算符C语言中常见的运算符包括算术运算符、赋值运算符、关系运算符、逻辑运算符等。
这些运算符用于执行各种数学和逻辑操作。
第四章:C语言控制语句1. C语言中的条件语句C语言提供了if语句和switch语句来实现条件判断。
if语句用于执行基于布尔表达式的条件分支,而switch语句用于根据不同的值执行不同的代码块。
第五章:C语言函数1. C语言中的函数定义和调用函数是C语言中的基本模块,用于封装可重用的代码。
函数定义包括函数返回类型、函数名、参数列表和函数体等部分。
第六章:C语言数组1. C语言中的数组定义和使用数组是一组相同类型的数据元素的集合。
C语言中可以使用数组来存储和操作大量数据。
第七章:C语言指针1. C语言中的指针概念指针是一种变量,它存储了内存地址。
通过指针,可以直接访问和修改对应内存地址中的数据。
第八章:C语言字符串1. C语言中的字符串操作字符串是由一系列字符组成的数据类型。
C语言通过字符数组来表示和操作字符串。
第九章:C语言结构体1. C语言中的结构体定义和使用结构体是一种自定义的复合数据类型,它可以包含多个不同类型的成员变量。
第十章:C语言文件操作1. C语言中的文件读写操作文件操作是一种重要的数据输入和输出方式。
C语言提供了一系列函数来实现文件的读写操作。
总结:通过解答以上习题,我们可以更好地掌握C语言的各个方面,提升我们的编程能力和解决问题的能力。
希望本文对读者有所帮助。
Fortran结构体PPT课件
program clerkrecord
implicit none
integer :: k, i
type clerk
! 定义结构体类型
integer num
character(15) name
real sal
end type clerk
type (clerk), dimension(150):: cl ! 定义结构体数组
TYPE STUDENT
CHARACTER(15) NAME
INTEGER
MARK
INTEGER
GRADE
END TYPE STUDENT
TYPE (STUDENT)::STRE (N)
INTEGER I, N, KEY
I=1
DO WHILE((STRE (I)%MARK.NE.KEY).AND.(I.LE.N))
i=1
do while (stre(i)% MARK <new% MARK. and. i<=N)
i=i+1
end do
do j=N, i, -1
stre(j+1)=stre(j)
end do
stre(i)=new
end
12
! 顺序查找
SUBROUTINE SORT_SEARCH(STRE, N, KEY)
read *, cl(i).sal end do do i=1, 150 if(cl(i).sal<500) then ! 打印 工资<500的职工信息 及计数
k=k+1 print*, cl(i).num, " ", cl(i).name, " ", cl(i).sal end if end do Print *, k end
第九章数组
第九章结构体与链表9.1结构体类型的定义❑程序设计者自己定义的数据类型❑包含若干成员,各成员可有不同的数据类型(与数组的区别)❑结构体类型定义struct 结构体名{ 类型标识符成员名1;类型标识符成员名2;…………….类型标识符成员名n;};大括号内为成员说明列表❑如,处理学生成绩数据,每个学生有三门课程的成绩、总成绩等变量。
struct student{long num; /*学号*/char name[10]; /* 姓名*/int score1; /* 成绩*/int score2;int score3;int total; /*总成绩*/};这样,student就是一个新的结构数据类型,可用它定义变量struct student a1, a2; 注意:struct不能省略结构体就是一个专有名词,代表一类事物,如:学生,教师,汽车等,是泛指结构体成员是描述该类事物的指标,如:学生的学号,名字,成绩等结构体变量是该类事物的一个具体事例,每个事例都具有全部成员,如每个学生都有学号,名字,成绩等9.2 结构体类型变量的定义1 先定义结构体类型,再定义变量如:struct student{ long num; /* 学号*/char name[10];/* 姓名*/int score1;/* 成绩*/int score2;int score3;int total; /* 总成绩*/};struct student a1, a2;注意:struct不能省略2 定义类型的同时定义变量struct student{ long num; /* 学号*/char name[10];/* 姓名*/int score1;/* 成绩*/int score2;int score3;int total; /* 总成绩*/} a1, a2;3 直接定义结构体类型变量struct{ long num; /* 学号*/char name[10];/* 姓名*/int score1;/* 成绩*/int score2;int score3;int total; /* 总成绩*/} a1, a2;每个结构体变量都拥有结构体的全部成员9.2.2 结构变量的引用❑结构变量的引用是通过引用其成员(分量)的形式来实现的,格式为: 结构变量名.结构成员名❑若定义了struct student a1, a2; 就可以使用其成员a1.num=00001;a2.num=00002;strcpy(, “John”);strcpy(, “Andrew”);a1.total=a1.score1+a1.score2+a1.score3;❑每个结构成员都可当做一个变量来使用,类型为在定义结构时所指定的数据类型❑结构变量的成员使用方法与普通内存变量没有区别。
9.结构体
对结构体变量初始化. 例 对结构体变量初始化 #include <stdio.h> void main() () {struct student { int num; ; char name[20]; char sex; ; char addr[20]; ;
运行结果: 运行结果: No.:10101 : name:LiLin : sex:M :M address:123 Beijing Road :
}a={10101,〃LiLin〃,′M′,〃123 Beijing Road〃}; , , , };
/* 对结构体变量 赋初值 对结构体变量a赋初值 赋初值*/ printf(〃No.:%d\nname:%s\nsex:%c\naddress:%s\n〃, , a.num,,a.sex,a.addr); , , , }
例 struct student { int num; char name[20]; char sex; int age; char addr[30]; }; struct student stu1={112,"Wang Lin",'M',19, "200 Beijing Road"};
形式二:(用的最多)
num 2字节
… …..
name sex age score
20字节 1字节 2字节 4字节
addr
30字节
(2)在声明类型的同时定义变量 (2)在声明类型的同时定义变量 这种形式的定义的一般形式为: 这种形式的定义的一般形式为: struct 结构体名 { 成员表列 变量名表列; }变量名表列;
* Num/ name sex age Month §图11-3 day year
C语言结构体习题及答案
第9章结构体1.定义以下结构体类型struct s{int a;char b;float f;};则语句printf("%d",sizeof(struct s))的输出结果为【】。
A) 3 B) 7 C) 6 D) 42.当定义一个结构体变量时,系统为它分配的内存空间是【】A)结构中一个成员所需的内存容量B)结构中第一个成员所需的内存容量C)结构体中占内存容量最大者所需的容量D)结构中各成员所需内存容量之和3.定义以下结构体类型struct s{ int x;float f;}a[3];语句printf("%d",sizeof(a))的输出结果为【】A) 4 B) 12 C) 18 D) 6 7.定义以下结构体类型struct student{char name[10];int score[50];float average;}stud1;则stud1占用内存的字节数是【】。
A) 64 B) 114 C) 228 D) 79、设有一结构体类型变量定义如下:struct date{ int year;int month;int day;};struct worklist{ char name[20];char sex;struct date birthday;} person;若对结构体变量person的出生年份进行赋值时,下面正确的赋值语句是。
A. year=1976B. birthday.year=1976C. person.birthday.year=1976D. person.year=19761、若程序中有以下的说明和定义:struct abc{ int x;char y; } 花括号后少了分号。
struct abc s1,s2;则会发生的情况是______。
A) 编译时错B) 程序将顺序编译、连接、执行C) 能顺序通过编译、连接、但不能执行D) 能顺序通过编译、但连接出错。
C语言程序设计实例教程第2版习题答案作者李红第9章结构体和共用体.doc
9.4课后习题9.4.1项目练习一.练习目的1.进一步巩固结构体类型和共用体类型的定义与引川2.进一步复习链表的建立过程3.进一步巩固枚举类型的定义与枚举元索的引用方法二.练习内容1.用结构体变量表示平面上的一个点(横坐标和纵坐标),输入两个点,求两点Z间的距离。
#include "stdio.h"include "math.h"struct pin{float x;float y;}a,b;main(){printfC*请输入a点的横纵坐标:“);scanf("%f%f"/&a.x,&a.y);printfC'Xn");printf("请输入b点的横纵坐标scanf(,,%f%f"/&b.x,&b.y);printf("\n n);printff"输出a、b 两点之间的距离是:%f",sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)));getch();}2.16个同学围成一-圈,从笫1个人开始按1、2、3的顺序报号,凡报到3者退出圈子。
找出最后昭在圈子中的人原来的序号。
ttinclude "stdio.h"#include "stdlib.h"#define LEN sizeof(struct game)struct game{int num;struct game *next;};struct game *creat(){ struct game *head,*p;head=p=(struct game *) malloc(LEN);p->num=l;int i=2;while(i<=16){ p・>next=(struct game *) malloc(LEN);p->next-:>nu m=i;i++;p=p->n ext; }p->next=head; return(head);} struct game *delete(struct game *head) { struct game*pl=head,*p2=head,*x; int k=l;while(pl->next!=pl) {if(k==3) {x=pl; pl=pl->next;p2・>n ext=pl; free(x); x=NULL; k=0;} else {P2=pl; pl=pl->next;}pl->next=NULL;return(pl);}void print(struct game *head){ struct game *p;p=head;while(p!=NULL) {printf("%d\t",p->num);p=p->n ext;}printfCAn");}main(){ struct game *pt,*p;pt=creat();p=delete(pt);print(p);free(p);getch();}3.建立一个链表,每个结点包含的成员为:职工号、工资。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
printf("请读票...\n");
for(i=1;i<=10;i++)
{scanf("%s",&leader_name); //输入所选的候选人姓名
for(j=0;j<3;j++)
if(strcmp(leader_name,leader[j].name)==0) leader[j].count++;
p=&stu_1; //p指向结构体变量stu_1
stu_1.num=10101; //对结构体变量成员num成员赋值
max=j;
temp=stu[i];
stu[i]=stu[max];
stu[max]=temp;
}
for(i=0;i<5;i++)
printf("%5s:%6.2f\n",stu[i].name,stu[i].score); //输出结果
}
9.3 结构体指针
所谓结构体指针就是指向结构体数据的指针,一个结构体变量的起始地址就是这个结构体变量的指针。指针变量的基类型必须与结构体变量的类型相同。
int age;
struct data birthday; //将成员名birthday指定为struct data类型。
char addr[30];
};
*“结构体”这个词是根据英文单词structure译出的。
9.1.2 定义结构体类型变量
1.先声明结构体变量,再定义该类型的变量。
结构体数组的定义与引用
question:有三个候选人,每个选民只能投选一人,要求编写一个统计选票的程序,先后输入被选人的名字,最后输出各人得票结果。
#include<stdio.h>
#include<string.h>
struct person //声明结构体类型struct persion
//如果输入的姓名和某一元素中的name成员相同,就给该元素的count成员加1
}
printf("\nResoult:\n");
for(i=0;i<3;i++)
printf("%5s:%3d\n",leader[i].name,leader[i].count);
} //输出数组所有元素的信息
*结构体变量并不是只有一种,而是可以设计出许多种。
*成员名可以是一个结构体变量。
例如:
struct data
{int month;
int day;
int year;
};
struct student
{int num;
char name[20];
char sex;
}变量名表பைடு நூலகம்;
这种形式制定了一个无名的结构体类型,它没有名字,显然不能再以此结构体类型去定义其他变量。这种方式用的不多。
说明:
* 结构体类型与结构体变量是不同的概念。
* 结构体类型中的成员名可以与程序中的变量名相同,但二者不代表同一对象。
* 对于结构体变量中的成员,可以单独使用,他的地位与作用相当于普通变量。
{long num;
char name[20];
char sex;
float score;
} ;
struct student stu_1; //定义struct student 结构体类型变量 stu_1
struct student *p; //定义指向struct student类型数据的指针变量p
if(student1.score>student2.score)
printf("%3d,%3s,%6.2f\n",student1.num,,student1.score);
else if(student1.score<student2.score)
printf("%3d,%3s,%6.2f\n",student2.num,,student2.score);
example:
struct student student1,student2;
(结构体类型名) ( 结构体变量名 )
这种形式和定义其他类型的变量形式(如int a,b;)是相似的。
2.在声明类型的同时定义变量
这种定义的一般形式是:
struct 结构体名
{
成员列表
}变量名表列;
* 对结构体变量的成员可以像普通变量一样进行各种计算(根据其类型的决定可以进行的运算)。如:
student2.score=student1.score;
sum=student1.score+student2.score;
student1.age++;
* 同类的结构体变量可以互相赋值,如:
例如:
struct student *pt;//可以指向struct student类型的数据
例题:通过指向结构体变量的指针变量输出结构体变量中成员的信息。
#include<stdio.h>
#include<string.h>
void main()
{struct student
void main()
{int i,j,max;
struct student temp; //定义结构体变量temp,用作交换时的临时变量
for(i=0;i<4;i++) //采用选择排序法
{max=i;
for(j=i+1;j<5;j++)
if(stu[max].score<stu[j].score) //进行成绩比较
struct student
{int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
}student1,student2;
3.不指定类型名而直接定义结构体类型变量
其一般形式:
struct
{
成员列表
说明:
(1)定义结构体数组一般形式如下。
struct 结构体名
{成员列表}数组名{数组长度};
先声明一个结构体类型(如struct person),然后再用此类型定义结构体数组
结构体类型 数组名{数组长度};
如:
struct person leader[3]; //leader是结构体数组名
float score; //分数为浮点型
char addr[30]; //地址为字符串
}; //注意最后有一个分号
声明一个结构体类型的一般形式:
struct 结构体名
{成员列表};
注意:*节后体类型的名字是由一个关键字struct和结构体名二者组合而成(如struct student)。结构体名是由用户指定的,又称“结构体标记”(struct tag),以区别其他结构体类型。上面的结构体声明中struct就是结构体名(结构体标记)。
}
}
9.2 结构体数组
一个结构体变量可以存放一组有关联的数据(如一个学生的学号、姓名、成绩等数据),如果有10个学生的数据需要参加运算,显然应该用数组,这就是结构体数组。
结构体数组与以前介绍的数据数据型数组不同之处在于每个数据元素都是一个结构体类型的数据,它们都分别包括各个成员项。
student1=student2;
* 可以引用结构体变量成员的地址,也可以引用结构体变量的地址。例如:
scanf("%d",&student.num);(输入student1.num的值)
printf("%o",&student);(输出结构体变量student1的首地址)
但不能用以下形式的语句整体读入结构体变量
(2)对结构体数组初始化的形式是在定义数组的后面加上的。
={初值列表};
如:
struct person leader[3]={"Li",0,"Zhang",0,"Fun",0};
* question:有N个学生的信息(包括学号,姓名,成绩),要求按照成绩的高低顺序输 出学生的信息。
9.1.3 结构体变量的初始化和引用
question:把一个学生的信息放在一个结构体变量中,然后输出这个学生的信息。
#include<stdio.h>
void main()
{
struct student
{int num;
char name[20];
char sex;
char addr[20];
{char name[20]; //候选人姓名
int count; //候选人得票
}leader[3]={"Li",0,"Zhang",0,"Fun",0};
void main()
{int i,j;
char leader_name[20]; //定义字符数组
#include<stdio.h>
struct student //声明结构体类型struct student
{int num;