谭浩强 C语言 第11章 结构体

合集下载

谭浩强 c语言程序设计(第十一章)

谭浩强 c语言程序设计(第十一章)
num name sex age num
name sex age stu[1] stu[0]
12
第十一章 结构体与共同体 – 结构体数组初始化
分行初始化: – 结构体数组引用 顺序初始化: struct student struct student 引用方式: 结构体数组名[下标].成员名 int num; 例 {{ int student struct num; 例 { charnum; struct name[20]; char int name[20]; stu[1].age++; struct student { charnum; int sex; char sex; name[20]; {int intname[20]; char sex; intage;num; age; char }; char sex; }; int char name[20]; age; struct student stu[ ]={{100,“Wang Lin”,„M‟,20, int char stu[ age; struct student sex; ]={100,“Wang Lin”,„M‟,20}, }stu[ ]={{……},{……},{……}}; {101,“Li Gang”,„M‟,19, Gang”,„M‟,19}, int age; }stu[ ]={{……},{……},{……}}; 101,“Listrcpy(stu[0].name,”ZhaoDa”); {110,“Liu Yan”,„F‟,19}; }str[3]; 110,“Liu Yan”,„F‟,19}};
合法标识符 可省:无名结构体 成员类型可以是 基本型或构造型
struct [结构体名] { 类型标识符 成员名; 类型标识符 成员名; ……………. };

谭浩强C语言PPT (10)

谭浩强C语言PPT (10)

左移 (Left Shift)
• 运算规则 – i << n – 把i各位全部向左移动n位 – 最左端的n位被移出丢弃 – 最右端的n位用0补齐 • 用法 – 若没有溢出,则左移n位相当于乘上2n – 运算速度比真正的乘法和幂运算快得多
左移举例
• 运算举例 1010,1101 << 3 (101)0110,1000_____ • 溢出举例 – 若左移后的数据超出表示范围,则发生溢出 – int i, j; i = 0x2431; j = i<<2; /* j=-0x6F3C, 溢出 */ j = i<<3; /* j= 0x2188, 溢出 */
按位或举例
• 运算举例 1010,1101 (0xAD) | 0110,1001 (0x69) 1110,1101 (0xED) • 按位置一 xxxx,xxxx_____ | 0110,0010 (0x62) x11x,xx1x_____
按位异或 (Bitwise Exclusive OR, XOR)
语言程序设计》 《C语言程序设计》 语言程序设计
第11章 位运算 11章
主讲: 主讲:张驰 淮安信息学院计算机科学与工程系 电子邮箱: 电子邮箱:zhangchi320381@
位运算
内容提要:
位运算概念 位运算符使用方法 位运算应用举例
§ 8.1位运算符和位运算 位运算符和位运算
• • • • 所谓位运算, 所谓位运算,是指按二进制位进行运算 位运算 位运算的运算对象是二进制的位 位运算速度快,效率高, 位运算速度快,效率高,节省存储空间 只能对整型数据(包括字符型) 只能对整型数据(包括字符型)进行位运 算 • 负数以补码形式参与运算 • 注意与逻辑运算区别

C++_面向对象程序设计_谭浩强 第十一章

C++_面向对象程序设计_谭浩强 第十一章

基类成员属性 公有 保护 私有
派生类中 可以引用 可以引用 不可引用
派生类外 可以引用 不可引用 不可引用
基类:public: 在派生类和类外可以使用
protected: 在派生类中使用 private: 不能在派生类中使用
A
x(私有) y(保护) z(公有) A( ) Getx() Gety() ShowA()
第十一章
继承和派生类
继承性是面向对象程序设计中最重要的机制。 这种机制提供了无限重复利用程序资源的一 种途径。通过C++语言中的继承机制,可以 扩充和完善旧的程序设计以适应新的需求。 这样不仅可以节省程序开发的时间和资源,
并且为未来程序增添了新的资源。
class Student
{ int num;
的成员。我们称已存在的用来派生新类的类
为基类,又称为父类。由已存在的类派生出
的新类称为派生类,又称为子类。
在建立派生类的过程中,基类不会做任何改 变,派生类则除了继承基类的所有可引用的 成员变量和成员函数外,还可另外定义本身 的成员变量和处理这些变量的函数,由于派 生类可继承基类的成员变量和成员函数,因
可以引用 可以引用 不可引用
派生类外
不可引用 不可引用 不可引用
基类:public: (变为私有)在派生类中使用,类外不可使用 protected: (变为私有)在派生类中使用,类外不可使用 private: 不能在派生类中和类外使用
x(私私有) y(私有) privat z(私有) e A( ) 均为私有 Getx() 类B 外不 Gety() 能引用 ShowA() m(私有) x在类B新增加的成员 n(私有) 中不能直接调用 B() y在类B中可以调用 Show() z在类B中可以调用 Sum() 对类B的对象初始化即是对x,y,z,m,n等全部成员的初始化

C语言谭浩强完整课件

C语言谭浩强完整课件

着广泛的应用。
计算机系统基本概念
计算机系统的组成
计算机系统由硬件系统和软件系统两大部分组成,硬件系统包括运算器、控制器、存储器 、输入设备和输出设备等五大部分;软件系统包括系统软件和应用软件两大类。
计算机的工作原理
计算机的工作原理可以概括为存储程序控制和程序控制流,即计算机通过执行存储在内存 中的程序来控制各部件协调工作。
在定义数组时,可以直接 对数组进行初始化,也可 以定义后再进行赋值。
一维数组的使用
通过下标访问数组元素, 下标从0开始,最大下标为 数组长度减1。
二维数组与多维数组
二维数组的定义
二维数组可以看作是一个 表格,由行和列组成,每 个元素都有两个下标。
二维数组的初始化
在定义二维数组时,可以 直接对数组进行初始化, 也可以定义后再进行赋值 。
scanf和printf函数都支持 格式化输入输出,可以通 过格式控制符指定输入输 出数据的类型和格式。
格式化输入
格式控制符
C语言提供了一组格式控制符,用于 指定输入输出数据的类型和格式,如 %d表示输入输出整数,%f表示输入 输出浮点数等。
格式化输入
格式化输出
使用printf函数进行格式化输出时, 可以指定输出数据的格式和显示方式 ,如控制小数位数、显示宽度等。
类型。
枚举常量的说明
在枚举类型定义中,可以列 出多个枚举常量,每个常量 对应一个整数值。默认情况 下,第一个枚举常量的值为0 ,后续常量的值依次递增1。
枚举变量的使用
声明枚举类型的变量后,可 以为其赋值。枚举变量的值 只能是枚举常量中定义的值 。使用枚举类型可以提高代 码的可读性和可维护性。
08
文件操作与数据处理

谭浩强c语言程序设计习题集

谭浩强c语言程序设计习题集

目录重要次重要重复或欲删除基础第一章 C语言概述1.1 选择题1.2 填空题第二章数据类型、运算符与表达式2.1 选择题2.2 填空题第三章最简单的C程序设计3.1 选择题3.2 填空题第四章逻辑运算和判断选取控制4.1 选择题4.2 填空题4.3 编程题第五章循环控制5.1 选择题5.2 填空题5.3 编程题第六章数组6.1 选择题6.2 填空题6.3 编程题第七章函数7.1 选择题7.2 填空题7.3 编程题第八章编译预处理8.1 选择题8.2 填空题8.3 编程题第九章指针9.1 选择题9.2 填空题9.3 编程题第十章结构体和共用体10.1 选择题10.2 填空题10.3 编程题第十一章位运算11.1 选择题11.2 填空题11.3 编程题第十二章文件12.1 选择题12.2 填空题12.3 编程题第一章 C语言概述1.1 选择题*1.1一个C程序的执行是从。

A)本程序的main函数开始,到main函数结束B)本程序文件的第一个函数开始,到本程序文件的最后一个函数结束C)本程序的main函数开始,到本程序文件的最后一个函数结束D)本程序文件的第一个函数开始,到本程序main函数结束参考答案:A参考分析:C语言总是从main函数开始,main函数结束。

但是C语言中存在一个exit(0)函数,它可以使得程序在任何时候、任何位置结束程序的运行。

如果不考虑exit(0)等函数的特殊作用,C则总是在main函数结束。

*1.2以下叙述正确的是。

A)在C程序中,main函数必须位于程序的最前面B)在C程序的每一行只能写一条语句C)C语言本身没有输入输出语句D)在对一个C程序进行编译的过程中,可发现注释中的拼写错误参考答案:C参考分析:C程序对main函数的位置没有任何要求;其书写格式自由,一行可以写多条语句,一条语句(多关键字语句)可以写在多行;C语言忽略注释,把注释看作是一个空格,不会对注释中的内容进行语法检查。

C语言程序设计_谭浩强_第二版_CH11

C语言程序设计_谭浩强_第二版_CH11
typedef int INTEGER typedef float REAL typedef struct { int month; int day; int year; }DATE; DATE birthday; DATE *p;
第十一章 结构体与共用体
11.10 用typedef定义类型 (1)用typedef可以声明各种类型名,但不能用来定义 变量。 (2)用typedef只是对已经存在的类型增加一个类型名, 而并没有创造新的类型。 (3)typedef与#define有相似之处,但也有区别。 (4)将常用的typedef声明放在单独的头文件中,以便 使用。 (5)使用typedef有利于程序的通用和移植。
11.1 概述 声明一个结构类型的一般形式为: struct 结构体名 { 成员表列 }
第十一章 结构体与共用体
11.2 定义结构体类型变量的方法 struct student student1,student2; 只有在定义了结构体变量后,系统才会为之分配内 存单元。 struct date{ int Month; (1)类型和变量是不同的概念。 int Day; int Year; (2)对结构体中的成员可以单独使用。 }; (3)成员也可以是一个结构体变量。 struct student{ int Num;
第十一章 结构体与共用体
11.4 结构体变量的初始化 在定义的时候对结构体变量进行初始化。 如:
struct student{ long int Num; char Name[20]; char Sex; char Addr[30]; }a={89031,”Li Lin”,’M’,”No.102 Bingjiang Road”}
第十一章 结构体与共用体

C程序设计(第三版)习题答案(9、11章) 谭浩强著

C程序设计(第三版)习题答案(9、11章) 谭浩强著
printf("The best student is %s,sum=%d\n",stu[maxi].name,max);
}
printf("value=%format\t",x1);printf("value=%format\t",x2);putchar('\n');
输出结果:
value=5.000000ormat value=5.000000ormat
value=3.000000ormat value=8.000000ormat
break;
case 3:scanf("%s",s);
STRING(s);
break;
default:printf("error");
}
}
9.8main()
{int a,b,c;
scanf("%d,%d,%d",&a,&b,&c);
main()
{int a,b;
scanf("%d,%d",&a,&b);
printf("%d",SURPLUS(a,b));
}
9.3#include"math.h"
#define S(a,b,c) ((a+b+c)/2)
#define AREA(a,b,c) (sqrt(S(a,b,c)*(S(a,b,c)-a)*(S(a,b,c)-b)*(S(a,b,c)-c)))
scanf("%d",&stu.score[j]);

C++(谭浩强)笔记(第11章)

C++(谭浩强)笔记(第11章)

继承与派生在面向对象基础中了解了面向对象程序设计的两个重要特征——抽象和封装。

但是面向对象程序设计主要有4个特点:抽象、封装、继承和多态,要较好地进行面向对象的程序设计还必须了解继承和多态。

继承性是面向对象程序设计最重要的特征,面向对象强调软件的可重用性。

C++语言提供了类的继承机制,解决了软件重用问题。

一个类中包含了若干个数据成员和成员函数。

在不同类中,数据成员和函数成员是不同的。

但有时两个类的内容基本相同或有一部分相同,例如声明了学生类Student和人类Person,具体声明如图1所示:图1:Student类和Person类的声明显然,这两个类中有很大一部分内容基本相同,于是我们可以利用原来声明的Person类作为基础,在加上新内容,以减少重复的工作量,这就是继承。

一、继承与派生的概念在C++中所谓继承就是在一个已存在的类的基础上建立一个新的类。

已存在的类称为基类或父类(base class or father class),新建立的类称为派生类或子类(derived class or son class)。

一个新类从已有的类那里获得其已有特性的现象称为类的继承。

通过继承,一个新建子类从父类那里获得父类的特性。

换个角度说,从已有类产生一个新的子类称为类的派生。

类的继承是利用已有的类来建立专用类的编程技术。

派生类继承了基类的所有数据成员和函数成员(不包括构造函数和析构函数),并对成员做必要的增加或调整。

一个基类可以派生出多个派生类。

每一个派生类又可以继续派生出新的派生类,这样派生下去就形成了类的继承层次结构。

图1中的例子是最简单的情况,一个派生类只从一个基类派生,这种继承称为单继承(single inheritance)。

一个派生类有两个基类或者多个基类,这种继承称为多重继承(multiple inheritance)。

图2:单继承(single inheritance) 和多重继承(multiple inheritance)二、派生类的声明方式图1中声明的两个类之间显然可以建立继承关系,最简单的继承方式如图3所示:图3:派生类Student类的声明方式声明派生类的一般形式为class 派生类名:[继承方式] 基类名{派生类新增成员;};其中继承方式包括public,private,protected,继承方式可选,如果不写默认为private。

c程序设计谭浩强第五版知识点总结

c程序设计谭浩强第五版知识点总结

《C程序设计谭浩强第五版知识点总结》一、基本概念1. C程序设计概述这本书是谭浩强先生编写的C程序设计教材的第五版,内容全面,通俗易懂,适合初学者入门。

2. 程序设计基本流程本书从程序设计基础知识开始介绍,包括编程思想、程序的基本结构、编译信息过程等,为读者打下扎实的基础。

3. C语言基本数据类型本书详细介绍了C语言的基本数据类型,包括整型、浮点型、字符型等,帮助读者深入理解C语言的数据表示和操作。

二、程序设计基础1. 程序流程控制本书系统地介绍了C语言中的顺序结构、选择结构和循环结构,帮助读者掌握程序的基本控制流程。

2. 函数函数是C语言中重要的概念,本书对函数的定义、声明、调用、参数传递等方面进行了详细讲解,帮助读者理解函数的作用和使用方法。

3. 数组数组是C语言中常用的数据结构,本书介绍了数组的定义、初始化、访问等基本操作,还介绍了多维数组和数组作为函数参数的用法。

三、指针和结构体1. 指针指针是C语言中较为复杂的概念,本书对指针的定义、运算、指针与数组、指针与函数等方面进行了详细讲解,帮助读者理解指针的重要性和使用方法。

2. 结构体结构体是C语言中用于表示复杂数据结构的概念,本书介绍了结构体的定义、访问、嵌套等操作,还介绍了结构体数组和结构体作为函数参数的使用方法。

四、文件操作1. 文件输入输出文件操作是C语言中重要的知识点,本书介绍了如何打开文件、读写文件、关闭文件等基本操作,帮助读者掌握文件处理的基本技能。

2. 随机访问文件随机访问文件是C语言中较为复杂的知识点,本书介绍了如何进行文件的随机读写操作,帮助读者理解文件指针的移动和文件的定位操作。

五、综合应用1. 实例分析本书通过大量的实例分析,帮助读者将所学知识运用到实际问题中,提高解决问题的能力和编程的实际水平。

2. 项目设计本书还介绍了一些小型项目的设计思路和实现方法,帮助读者综合运用所学知识,提高程序设计能力。

总结C程序设计谭浩强第五版作为C语言教材的经典之作,系统地介绍了C语言的基本知识和程序设计的基本流程,涵盖了C语言的各个方面,适合初学者入门和进阶学习。

谭浩强C语言数据结构

谭浩强C语言数据结构

由于栈结构具有的后进先出的固有特性,致使栈成为 程序设计中常用的工具。
数制转换
十进制N和其它进制数的转换是计算机实现计算的基本问题,其 解决方法很多,其中一个简单算法基于下列原理:
N=(n div d)*d+n mod d
( 其中:div为整除运算,mod为求余运算)
Date:10/26/2019
图 单链表在第一个位置删除结点过程
p=a.next; a.next=a.next.next; dispose(p);
Date:10/26/2019
head
a0
a1
s
x
(a)
IT Education & Training

an£-1
head
a0
a1

an£-1
x
new(s); s.data=x;
(b)
Date:10/26/2019
IT Education & Training
数据结构的三个方面: 数据的逻辑结构
线性结构
线性表 栈 队
非线性结构 树形结构 图形结构
数据的存储结构 顺序存储 链式存储
数据的运算:检索、排序、插入、删除、修改等
Date:10/26/2019
主要内容
• 1.1 线性表以及其应用 • 1.2 栈、队列 • 1.3 排序、查找
IT Education & Training
• 队列
– 队列的定义及特点
• 定义:队列是限定只能在表的一端进行插入,在表 的另一端进行删除的线性表
– 队尾(rear)——允许插入的一端
– 队头(front)——允许删除的一端
• 队列特点:先进先出(FIFO)

谭浩强版C++程序设计 第11章 继承与派生2

谭浩强版C++程序设计 第11章  继承与派生2

11.1继承与派生的概念 继承与派生的概念
类的继承机制,解决了软件重用问题 类的继承机制 解决了软件重用问题. 解决了软件重用问题 例如: 例如
人类: 人类: 教师类: 教师类: 管理人员类: 管理人员类: 姓名,性别,年龄,身高,体重 姓名,性别,年龄,身高,体重,专业,职称 姓名,性别,年龄,身高,体重,专业, 专业 姓名,性别,年龄,身高,体重,职务 姓名,性别,年龄,身高,体重,职务
举例
class Student1:public Student class Student { pravite: { pravite: int age; int num; string addr; string name; public: char sex; void display1() public: { cout<<"age:"<<age<<endl; void display() cout<<"address:"<<addr {cout<<"num:"<<num; <<endl;} cout<<"name:"<<name; } cout<<"sex:"<<sex; } }
若将基类CLocation中的 中的x,y改成保护成员,即: 改成保护成员, 若将基类 中的 改成保护成员
11.3 派生类的构成
派生类的构成
派生类没有选择地把基类全部成员(不包括构 派生类没有选择地把基类全部成员 不包括构 造函数和析构函数)接收过来 接收过来.这容易造成数据 造函数和析构函数 接收过来 这容易造成数据 的冗余,需要设计者慎重选择基类 使冗余最小. 需要设计者慎重选择基类,使冗余最小 的冗余 需要设计者慎重选择基类 使冗余最小 设计者可以调整从基类接收的成员.如 指定继 设计者可以调整从基类接收的成员 如:指定继 承方式或在派生类中声明一个与基类同名的成 员取代基类成员. 员取代基类成员 在声明派生类时增加的成员. 在声明派生类时增加的成员 在声明派生类时,一般还应定义其构造函数和 在声明派生类时 一般还应定义其构造函数和 析构函数. 析构函数

第11章谭浩强C++习题及解答

第11章谭浩强C++习题及解答

int main() { Student1 stud; stud.get_value1(); stud.display_1(); return 0; }
3. 将例 将例11.3的程序修改、补充,写成 的程序修改、 的程序修改 补充, 一个完整、正确的程序, 保护继承方 一个完整、正确的程序,用保护继承方 式。在程序中应包括输入数据的函数。 在程序中应包括输入数据的函数。
class Student1: private Student {public: void get_value1( ) { get_value(); cout<<"please input age, address: "; cin>>age>>addr; } void display_1( ) { display( ); cout<<"age: "<<age<<endl; cout<<"address: "<<addr<<endl; } private: int age; string addr; };
class Student1: protected Student {public: void get_value1( ) { cout<<"please input age, address: "; cin>>age>>addr; } void display_1( ) { cout<<"age: "<<age<<endl; cout<<"address: "<<addr<<endl; } private: int age; string addr; };

谭浩强C语言数据结构

谭浩强C语言数据结构

– 入栈算法
top
top
px
– 出栈算法
q
top
top
IT Education & Training
栈底
…...
^
栈底
…...
^
栈底
…...
^
Date:12/27/2020
• 栈的应用举例
IT Education & Training
由于栈结构具有的后进先出的固有特性,致使栈成为 程序设计中常用的工具。
主要内容
• 1.1 线性表以及其应用 • 1.2 栈、队列 • 1.3 排序、查找
IT Education & Training
Date:12/27/2020
IT Education & Training
1.1 线性表以及其应用(1)
• 线性表
– 分为静态线性表和动态线性表
– 静态线性表
• 特征:表中节点的存储是连续的,占用一块连续存储区,一般节
typedef struct { Data_t data; //数据域
Node_t* next; //后继域 }Node_t, *PNode_t;
//提供的操作有 :初始化、插入、删除等。
数据n-1 数据n 后继 end
Date:12/27/2020
IT Education & Training
链式存储结构
栈有两种存储表示方法:
IT Education & Training
• 顺序栈 • 链栈
Date:12/27/2020
顺序栈
– 实现:
top 5 top 4 top 3 top 2 top
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

struct是关键字, 不能省略
num
2字节

name
20字节 1字节 2字节 4字节
例 struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; };
sex age score
…..
形式二:
struct 结构体名 { 类型标识符 成员名; 类型标识符 成员名; ……………. }结构体变量={初始数据};
例 struct student { int num; char name[20]; char sex; int age; char addr[30]; }stu1={112,“Wang Lin”,M,19, “200 Beijing Road”};
§11.3 结构体变量的引用
引用规则
结构体变量不能整体引用,只能引用变量成员
引用方式: 结构体变量名.成员名
例 struct 成员(分量)运算符 student 可以将一个结构体变量赋值给另一个结构体变量 例 struct student { stu1.num=10; int num; 优先级: 结构体嵌套时逐级引用 1 { int num; 例 struct student 结合性:从左向右 { char name[20]; int num; char student 例 struct name[20]; char sex; char name[20]; stu1.score=85.5; 例 structchar num; student { int sex; int char sex; age; printf(“%d,%s,%c,%d,%f,%s\n”,stu1); () if(stu1==stu2) { int age; num; stu1.birthday.month=12; char name[20]; float score; …….. () stu1.score+=stu2.score; char name[20]; int age; float score; struct date char addr[30]; stu1.age++; float score; sex; char addr[30]; { int month; }stu1,stu2; addr[30]; char birthday int age; }stu1,stu2; day; int num name float score; }stu1,stu2; month day year int year; stu2=stu1; ( ) char addr[30]; }birthday; }stu1,stu2; }stu1,stu2;
直接定义结构体变量
一般形式:
struct { 类型标识符 成员名; 类型标识符 成员名; ……………. }变量名表列;
例 struct { int num; char name[20]; char sex; int age; float score; char addr[30]; }stu1,stu2;
指向结构体数组的指针
例 指向结构体数组的指针 struct student p num { int num; name char name[20]; sex char sex; age p+1 int age; }stu[3]={{10101,"Li Lin",'M',18}, {10102,"Zhang Fun",'M',19}, {10104,"Wang Min",'F',20}}; main() { struct student *p; for(p=stu;p<stu+3;p++) printf("%d%s%c%d\n",p->num,p->name,p->sex,p->age); }
一般形式:

{ int num; int num; char name[20]; char name[20]; char sex; char sex; int age; int age; float score; float score; char addr[30]; char addr[30]; }; }; STUDENT stu1,stu2; struct student stu1,stu2; {
全部始化时维数可省
例 统计后选人选票
struct person name { char name[20]; Li int count; Zhang }leader[3]={“Li”,0,“Zhang”,0,”Wang“,0}; main() Wang { int i,j; char leader_name[20]; 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++; } for(i=0;i<3;i++) printf("%5s:%d\n",leader[i].name,leader[i].count); }
用无名结构体直接定义 变量只能一次
说明
结构体类型与结构体变量概念不同
类型:不分配内存; 类型:不能赋值、存取、运算; 变量:分配内存 变量:可以
结构体可嵌套 结构体成员名与程序中变量名可相同,不会混淆 例 struct date { 例 struct student int month; { int num; int day; int char name[20]; year; struct date }; birthday struct { int month; student num name birthday int day; year num namemonth day { int num; month day year int year; char name[20]; }birthday; struct date birthday; }stu;}stu;
§11.4 结构体变量的初始化
形式一:
struct 结构体名 { 类型标识符 成员名; 类型标识符 成员名; ……………. }; struct 结构体名 结构体变量={初始数据};

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 25B name sex age num name sex age stu[0]
stu[1]
结构体数组初始化
分行初始化: 结构体数组引用 顺序初始化: struct student struct student 引用方式: 结构体数组名[下标].成员名 { int num; 例 { int student struct num; 例 struct num; char { char name[20]; int name[20]; stu[1].age++; struct student { char num; int sex; char sex; name[20]; int age; num; {char name[20]; int int age; char sex; }; char sex; }; int char name[20]; age; struct student stu[ ]={{100,“WangLin”,M,20, int char sex; age; struct student stu[ ]={100,“Wang Lin”,M,20}, }stu[ ]={{……},{……},{……}}; {101,“LiGang”,M,19, Gang”,M,19}, int age; }stu[ ]={{……},{……},{……}}; 101,“Li strcpy(stu[0].name,”ZhaoDa”); {110,“LiuYan”,F,19}; }str[3]; 110,“Liu Yan”,F,19}};
定义结构体类型的同时定义结构体变量
一般形式:
struct 结构体名 { 类型标识符 成员名; 类型标识符 成员名; ……………. }变量名表列;
例 struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }stu1,stu2;
count 0 0 0
§11.6 结构体和指针
main() 指向结构体变量的指针 { struct student 定义形式:struct 结构体名 *结构体指针名; { 例 struct student *p; long int num; char name[20]; 使用结构体指针变量引用成员形式 struct student 存放结构体变量在内存的起始地址 char sex; p num { score; float int num; (*结构体指针名).成员名 结构体指针名->成员名 例 int n; struct student 结构体变量名.成员名 namestu1; char name[20]; }stu_1,*p; stu int *p=&n; struct student sex *p=&stu1; 例 p=&stu_1;char sex; 指向结构体的指针变量 *p=10; 指向运算符 stu1.num=101; age (*p).num=101 n=10 int age; stu_1.num=89101; }stu; 优先级: 1 strcpy(stu_,"Li Lin"); 结合方向:从左向右 struct student *p=&stu; p->sex='M'; p->score=89.5; printf("\nNo:%ld\nname:%s\nsex:%c\nscore:%f\n", (*p).num,p->name,stu_1.sex,p->score); }
相关文档
最新文档