C语言第九讲
《C语言程序设计》课程教学大纲

《C语言程序设计》课程教学大纲一、课程教学目的本课程系统研究C语言的基本知识和基本语法,较好地训练学生解决问题的逻辑思维能力以及编程思路和技巧,使学生具有较强的利用C语言编写软件的能力,为培养学生有较强软件开发能力打下良好基础。
二、课程教学要求通过本课程的研究,应熟练掌握C语言中的基本知识、各种语句及程序控制结构,熟练掌握C语言的函数、数组、指针、结构体、链表等数据结构的基本算法;并能熟练地运用C语言进行结构化程序设计;具有较强的程序修改调试能力;具备较强的逻辑思维能力和独立思考能力。
三、课时分配本学科计划学时为246学时,其中理论与实训课时比例为7:3.四、课程教学重、难点课程教学重点:掌握C语言变量类型及不同类型常量的表示;标准的输入输出函数的使用;运算符及常用数学函数的使用;控制流程、数组和指针的使用;结构体、链表的构造使用;函数结构、函数参数传递及递归等方面的知识;基本的文件操作。
难点:指针的使用、结构体链表的构造和使用及函数的参数传递。
五、课程教学方法(或手段)本课程实践性较强,故采用讲授和上机操作相结合的方式进行教学。
六、课程教学内容第一章C言语概述1.教学内容(1)编程历史的回顾、程序设计介绍(过程式,面向对象,函数式,逻辑式);(2) C语言的历史背景、特点;(3) C言语源步伐的格式和步伐结构;(4) C程序的上机步骤。
2.重、难点提醒(1)重点:掌握简单的C程序格式,包括main()函数、数据说明、函数开始和结束标志等;(2)难点:编程入门和对言语的理解。
第二章算法1.教学内容(1)算法的概念及特征;评价算法优劣的方法(时间和空间);(2)简单算法举例;(3)算法的表示(自然语言、流程图、N-S流程图);(4)结构化步伐设计的基本思想及基本步调。
2.重、难点提醒(1)重点:算法流程图三种基本结构(以后各章研究中使用流程图强化对步伐的理解);(2)难点:算法概念和对结构化步伐设计思想的理解。
北京大学计算概论(C语言)经典课件Lecture 9——循环语句复习及数组(上)页PPT文档

数组元素的赋值
每个数组元素,就是一个变量。 每个数组元素占用的空间大小是由定义数组
变量时给定的类型决定的。例如:
cards每个元素占1字节(char类型的长度) distance每个元素占8字节(double 类型的长度)。
19
数组元素的赋值
在给数组元素赋值时,可以把数组元素看作 单个变量,例如:
给数组元素赋值,数据类型必须匹配。
20
数组元素的访问
数组元素可以用在任何单个变量可能出现的地 方。例如:
int max, min; max = score [0]; min = score[3];
17
数组元素
定义一个数组变量相当于定义一组变量,这组 变量中的每一个都可以通过“数组变量名[下 标]”形式来访问。例如:score[0], score[1], score[2] 等等。
这组变量在内存中是连续存放的,它们的下标 从0开始计数。
在数组中(设N是数组的元素总数)
第一个数组元素的下标是0 最后一个数组元素的下标是N-1
continue;
8
课堂练习
1.已知:int a=5;执行语句while(a>0)
{
a--;
}
a的值是(
)。
A. 5
B. 0 C. –1 D. -2
2.已知:int a=5;执行语句while(--a>0)
{
a--;
}
a的值是(
)。
A. 5
B. 0 C. –1 D. -2
3.已知:int a=5;执行语句while(a-->0)
表达式必须是数值表达式 一次循环
计算表达式的值 如果表达式值为真,执行循环体,为假退出
_TMS320F2812_CPU 定时器

定时器的初始化和配置
void ConfigCpuTimer(struct CPUTIMER_VARS *Timer, float Freq, float Period) { Uint32 temp;
// 定时器周期初始化 // 将后两个实参的乘积作为定时器的周期值存入定时器周期寄存器 Timer->CPUFreqInMHz = Freq; Timer->PeriodInUSec = Period; temp = (long) (Freq * Period); Timer->RegsAddr->PRD.all = temp;
TMS320 F2812上的CPU 定时器
SYSCLKOUT为系统的工作时钟,一旦定时器被使能,则预 定标计数器PSC递减计数,预定标计数器产生下溢后向定时器 的32位计数器借位,最后定时器计数器产生溢出使定时器向 CPU发送中断。每次预定标PSC产生溢出后,使用TDDR中的 值重新装载,同样PRD为32位计数器提供重新装载值。
知识背景:C语言基础-结构体和联合(共用)体
结构指针 结构指针对结构成员的访问表示为: 结构指针名->结构成员 例如要给上面定义的结构中age赋值, 可以用下面语句: student->age=18; 实际上, student-> age就是(*student). age的缩写形式。 需要指出的是结构指针是指向结构的一个指针, 即结构中 第一个成员的首地址, 因此在使用之前应该对结构指针初 始化, 即分配整个结构长度的字节空间。
外设位域结构体
TMS320F2812头文件与C语言编程
知识背景:C语言基础-结构体和联合(共用)体
结构体 结构体也是一种数据类型, 可以使用结构体变量, 在使用 结构体变量时要先对其定义。定义结构体变量的一般格 式为: struct 结构名 { 类型 变量名; 类型 变量名; ... } 结构变量; 结构名是结构的标识符不是变量名。 类型可以 整型、浮点型、字符型、指针型和无值型。
C语言程序设计教案

C语言程序设计教案一、教案概述本教案旨在为初学者提供一套系统的C语言程序设计教学方案。
通过本教案的学习,学生将掌握C语言的基本语法和编程思维,能够独立设计和实现简单的C语言程序。
二、教学目标1. 了解C语言的基本概念、特点以及在计算机领域的应用;2. 熟悉C语言程序的开发环境和开发工具;3. 掌握C语言的基本语法,包括变量、运算符、控制语句等;4. 学会编写和调试简单的C语言程序;5. 培养良好的编程思维和解决问题的能力。
三、教学内容1. C语言介绍和基本概念1.1 C语言的起源和发展1.2 C语言的特点和优势1.3 C语言在计算机领域的应用2. C语言开发环境和工具介绍2.1 C语言编译器及其安装2.2 集成开发环境(IDE)的选择与使用2.3 编辑器和调试器的基本操作3. C语言基本语法3.1 变量和数据类型3.2 运算符和表达式3.3 输入和输出3.4 控制语句(条件语句、循环语句)4. C语言程序设计实践4.1 简单程序设计示例4.2 数组和字符串处理4.3 函数的定义和调用4.4 文件的读写操作五、教学方法1. 理论讲授结合实例演示:通过讲解和示例代码演示,帮助学生理解C语言的基础知识和编程原理;2. 互动式教学:鼓励学生积极参与课堂讨论和思考,培养他们的解决问题能力;3. 实践操作:布置编程作业和实验,让学生在实际操作中巩固所学知识;4. 课后复习和评估:布置课后习题和考试来检验学生对所学知识的掌握情况。
六、教材及参考资料1. 主教材:《C语言程序设计教程》(第三版),作者:某某某,出版社:XXX出版社,年份:20XX;2. 辅助教材:《C语言程序设计案例教程》,作者:某某某,出版社:XXX出版社,年份:20XX;3. 参考资料:C语言相关API文档,网上编程教程。
七、教学安排课时安排:共计10个课时,每周2个课时,连续进行5周。
第一周:- 课时一:C语言概述和基本概念- 课时二:C语言开发环境和工具介绍第二周:- 课时三:C语言变量和数据类型- 课时四:C语言运算符和表达式第三周:- 课时五:C语言输入和输出- 课时六:C语言控制语句(条件语句、循环语句)第四周:- 课时七:C语言数组和字符串处理- 课时八:C语言函数的定义和调用第五周:- 课时九:C语言文件的读写操作- 课时十:综合案例分析和总结八、教学评估1. 课堂表现:根据学生的课堂活动、参与度和表达能力进行评估;2. 作业和实验:对学生的编程作业和实验报告进行评估;3. 考试:通过期末考试来检验学生对C语言程序设计的掌握情况。
《C语言程序设计》教案

(2)格式控制字符、格式控制项与printf类似,表3-3,4。一般使用更加简单形式.
注意: 数据读入结束情况:遇空格、TAB、回车;遇非法输入;指定宽度结束。
四、其它输入/输出函数
1、putchar函数 一般形式:putchar(字符表达式);
注意:C语言算术表达式的书写形式-数学表达式的书写形式区别:(1)-(4).
3、(算术)运算符的优先级与结合性(P.233附录IV)
先按运算符的“优先级别”高低次序执行;优先级别相同,则按规定的“结合方向”处理。为了清晰起见可用圆括号“()”强制.
例1:表达式a-b*c等价于a-(b*c)。 例2:a-b+c,到底是(a-b)+c还是a—(b+c)?(b先与a运算还是先与c参与运算?) 例3:分析x=y=z=3+5
3、实型数据的舍入误差。例2-3A。
四、字符型数据
1、字符常量表示.直接表示/转义表示(特殊的转义字符,一般字符也可以转义表示).
特殊转义字符对显示/打印的控制作用
2、字符变量-1个字节,char关键词。
3、字符数据的存储-ASCII码/二进制存储-C语言可以将字符看做很短的整数处理。
例2—7A,例2—8A可以看出字符数据的具有整数特性。
(2)格式控制字符d、o、x/X、u、c、s、f、e/E、g/G构成控制项的各种常见形式。表3-1,3—2。
注意:不要死记硬背,要总结规律.一般形式:%±m n h/l格式字符
2、scanf函数(格式输入函数)
(1)格式:scanf(格式控制字符串,输入表列-地址列表)
格式控制字符串:含义与printf类似
重点
c语言课程设计影院管理系统

c语言课程设计影院管理系统一、教学目标本课程的目标是让学生掌握C语言编程基础,能够运用C语言设计并实现一个简单的影院管理系统。
具体目标如下:1.知识目标:–掌握C语言的基本语法和数据结构。
–理解函数的定义和调用。
–了解面向过程的编程思想。
2.技能目标:–能够使用C语言编写简单的程序。
–能够运用函数封装和模块化编程。
–能够设计和实现一个简单的影院管理系统。
3.情感态度价值观目标:–培养学生的编程兴趣和自信心。
–培养学生的问题解决能力和创新思维。
–培养学生的团队合作和沟通能力。
二、教学内容本课程的教学内容主要包括C语言的基本语法、数据结构、函数的定义和调用,以及面向过程的编程思想。
具体安排如下:1.C语言的基本语法:–变量和常量的声明和使用。
–运算符和表达式的使用。
–控制语句的运用。
2.数据结构:–数组的声明和操作。
–链表的创建和操作。
–栈和队列的应用。
3.函数的定义和调用:–函数的声明和定义。
–函数的参数传递和返回值。
–函数的调用和调用栈。
4.面向过程的编程思想:–模块化编程和函数封装。
–程序的流程控制和错误处理。
–面向过程的编程实践。
三、教学方法为了激发学生的学习兴趣和主动性,本课程将采用多种教学方法,包括讲授法、讨论法、案例分析法和实验法等。
1.讲授法:教师通过讲解和示例来传授知识,引导学生理解和掌握C语言的基本语法和数据结构。
2.讨论法:学生通过小组讨论和分享,互相学习和交流,培养团队合作和沟通能力。
3.案例分析法:教师通过分析真实的影院管理系统的案例,引导学生运用C语言编程解决实际问题。
4.实验法:学生通过编写和运行C语言程序,实践和巩固所学的知识,培养问题解决能力和创新思维。
四、教学资源为了支持教学内容和教学方法的实施,本课程将准备以下教学资源:1.教材:《C语言程序设计》或《C语言入门教程》。
2.参考书:《C Primer Plus》或《C和指针》。
3.多媒体资料:教学PPT、视频教程、编程案例和示例代码。
《C语言程序设计》教学大纲

《C语言程序设计》教学大纲(理论课程)课程名称:C语言程序设计课程类型:公共必修课课程编号:080714 开课院(部):工程学院、金融学院本课程学时学分:64学时(讲授32学时,实验32学时),4学分适用专业:土木工程、工程管理、工业工程、数学与应用数学开课学期:第2学期先修课程:无一、课程简述本课程是工程与应用数学类学生的一门公共必修课,主要任务是介绍程序设计基础知识、算法基础知识、C语言中数据类型、运算符、表达式、数组、函数、指针、结构体等知识。
目的是使学生掌握一门高级程序设计语言,了解程序设计的基本概念与方法,进而学会利用C语言去解决工程与数学应用问题。
二、课程要求(一)教学方法通过本课程的教学,掌握C程序设计的基本知识,能用面向过程的分析方法解决基本问题,并能较熟练地利用C语言进行程序设计。
C语言对实践的要求较高,学生只有通过大量的上机实践才能巩固和掌握课堂的教学内容,因此要求学生课后要多进行上机实践。
(二)教学手段课堂授课采用多媒体课件。
(三)课外作业每章节都配有相应的复习思考题和实验题。
(四)辅导答疑使用课后辅导、E-mail等多种方式辅导答疑。
(五)考核方式及成绩评定本课程考核方式为:笔试。
总成绩=平时成绩(30%)+期末考试(70%)三、教材或者主要教学参考资料[1] 教育部考试中心.《全国计算机等级考试二级教程:C语言程序设计(2013年版)》.北京:高等教育出版社,2013。
[2] 谭浩强.《C程序设计教程(第四版)》.北京:清华大学出版社,2010。
[3] 谭浩强.《C程序设计(第四版)学习辅导》. 北京:清华大学出版社,2010年7月。
四、各教学环节学时分配以表格方式表现各章节的学时分配,表格如下:五、课程内容第1章程序设计基本概念(1学时)教学目的:1.了解C语言和程序设计的背景2.理解算法的概念和算法的特性教学重点、难点:1.程序设计的基本概念2.算法的基本概念教学内容:第一节程序和程序设计第二节算法第三节结构化程序设计和模块化设计复习思考题:1. C程序的基本组成部分包含哪些内容?2. 什么是算法,它具备哪些特性?第2章 C程序设计的初步知识(3学时)教学目的:1. 了解基本类型及其常量的表示法2. 掌握变量的定义及初始化方法3. 掌握运算符与表达式的概念教学重点、难点:1.常用数据类型2.常用运算符和优先级3.数学公式转化为C语言表达式的基本能力教学内容:第一节简单C语言程序的构成和格式第二节标识符、常量和变量第三节整型数据第四节实型数据第五节算术表达式第六节赋值表达式第七节自加、自减和逗号运算符复习思考题:1.输入秒数,将它按小时、分钟、秒的形式来输出。
c语言课程设计可逆素数

c语言课程设计可逆素数一、教学目标本章节的教学目标旨在让学生掌握C语言编程基础,学会使用循环、条件语句等基本控制结构,理解素数的概念,并能够编写一个可逆素数的C语言程序。
1.理解C语言的基本语法和编程概念。
2.掌握循环、条件语句等基本控制结构。
3.理解素数的概念及其性质。
4.学习利用C语言实现可逆素数计算。
5.能够运用C语言编写简单的程序。
6.能够运用循环、条件语句等基本控制结构编写复杂的程序。
7.能够独立思考并解决可逆素数问题。
8.能够对程序进行调试和优化。
情感态度价值观目标:1.培养学生的编程兴趣,提高自主学习能力。
2.培养学生的团队协作精神,学会与人沟通和交流。
3.培养学生的问题解决能力,增强面对挑战的信心。
二、教学内容本章节的教学内容主要包括C语言的基本语法、编程概念、循环、条件语句等基本控制结构,以及素数的概念和可逆素数的编程实现。
1.C语言基本语法和编程概念。
2.循环控制结构:for循环、while循环、do-while循环。
3.条件语句:if语句、if-else语句、switch语句。
4.素数的概念及其性质。
5.可逆素数的编程实现:利用循环、条件语句等基本控制结构编写可逆素数计算程序。
三、教学方法本章节采用讲授法、案例分析法和实验法相结合的教学方法。
1.讲授法:教师讲解C语言基本语法、编程概念、循环、条件语句等基本控制结构,以及素数的概念和可逆素数的编程实现。
2.案例分析法:分析典型的可逆素数程序,让学生理解并掌握编程思路和方法。
3.实验法:学生动手编写可逆素数程序,培养实际编程能力和问题解决能力。
四、教学资源本章节的教学资源包括教材、参考书、多媒体资料和实验设备。
1.教材:C语言编程教程。
2.参考书:C语言参考手册。
3.多媒体资料:C语言编程视频教程、可逆素数案例分析视频。
4.实验设备:计算机、编程环境。
五、教学评估本章节的教学评估主要包括平时表现、作业和考试三个部分,以全面、客观、公正地评价学生的学习成果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
'a'
c[2][3]
8
三、字符串和字符串结束标志
字符串常量: 两个双引号之间的字符序列叫做 字符串常量: 字符串常量, "abcdefg"。 字符串常量,如"abcdefg"。 字符串结束标志: 字符串结束标志:系统自动为每一个字符串 常量加一个字符串结束标志‘ , 常量加一个字符串结束标志‘\0’,在内存中也 占一个字节。 占一个字节。 字符串常量所占的存储单元字节数: 字符串常量所占的存储单元字节数:字符 串中有效字符的个数加1 串中有效字符的个数加1,因为字符串结束 的标志' 0'也占一个字节 也占一个字节。 的标志'\0'也占一个字节。 在TC中,系统是将一个字符串常量按一维 TC中 字符数组处理的。 字符数组处理的。 9
15
五、二维字符数组的初始化4 二维字符数组的初始化
二维数组的初始化就是在定义数组的同时对数组元 二维数组的初始化就是在定义数组的同时对数组元 素赋以初值。 素赋以初值。 格式: 格式:
static 类型说明符 数组名 常量 常量 ]= 数组名[ 常量1][常量 常量2 { 字符串 , 字符串 , ……字符串 } ; 字符串1 字符串2 字符串n 字符串
●例如: 例如:
static char a[ 3 ][ 4 ] = { {' 1' ,' 2' ,' 3' , '4'} ,{'A' ,'B ', 'C' ,'D'} ,{' a' ,' b','c','d '}} ; 将第一个花括号中的常量依次赋给第一行的各个元素, 将第一个花括号中的常量依次赋给第一行的各个元素,将第 二个花括号中的常量依次赋给第二行的各个元素, 二个花括号中的常量依次赋给第二行的各个元素,即数组元 素a[0][0],a[0][1],……,a[2][2],a[2][3]的值分别为 '1', , , , , 的值分别为 , '2','3','4','A','B','C','D','a','b', 'c','d'。 同样 , , , , , , , , , , 。 各行中均无字符串结束的标志‘ 。 各行中均无字符串结束的标志‘\0'。
2
一、一维字符数组的定义1 一维字符数组的定义
格式: 类型标识符 格式: 数组名 [常量]; 常量];
定义的目的: 定义的目的:为指定的数组分配相应字节的存储 单元。 单元。
数组名
char c [ 20 ];
常量, 常量,数组的大小 类型标识符 定义c为字符数组, 20个字符型数据 个字符型数据, 定义c为字符数组,可独立存放 20个字符型数据, 系统要为数组c分配20*1=20个字节的存储单元, 20*1=20个字节的存储单元 系统要为数组c分配20*1=20个字节的存储单元, 且这些存储单元是连续的。 且这些存储单元是连续的。
3
一、一维字符数组的定义2 一维字符数组的定义
如有下面的定义: 如有下面的定义: char c [ 10 ]; 则系统则会为数组c 则系统则会为数组c 分配10 10个字节的连 分配10个字节的连 续存储单元
c
4
一、一维字符数组] 数组名[下标]
11
五、一维字符数组的初始化2 一维字符数组的初始化
字符数组的初始化就是在定义数组的同时对数组元 字符数组的初始化就是在定义数组的同时对数组元 素赋以初值。 素赋以初值。 格式: 格式:
static 类型说明符 数组名[ 常量 ]={ 字符串常量 } ; 数组名
●
例如: 例如: static char c[12] = {"abcd1234567" } ; 或者: 或者: static char c[12] = "abcd1234567" ;
●例如: 例如:
第二维大小为5 第二维大小为
static char a[ 3 ][ 5 ] = { {" 1234"} ,{"ABCD"} ,{"abcd"} } ; 4
将第一个花括号中的各个字符依次赋给第一行的各个元素, 将第一个花括号中的各个字符依次赋给第一行的各个元素, 将第二个花括号中的各个字符依次赋给第二行的各个元素, 将第二个花括号中的各个字符依次赋给第二行的各个元素, 即数组元素a[0][0],a[0][1],……,a[2][2],a[2][3]的值分 即数组元素 , , , , 的值分 别为 '1','2','3','4','A','B','C','D','a','b', 'c', , , , , , , , , , , , 'd'。 但每行的最后都有字符串结束标志 。 。 但每行的最后都有字符串结束标志'\0'。
6
二、二维字符数组的定义2 二维字符数组的定义
如有下面的定义: 如有下面的定义: char c [ 3 ][ 4 ]; 则系统则会为数组c 则系统则会为数组c 分配12 12个字节的连 分配12个字节的连 续存储单元
c
7
二、二维字符数组元素的引用1 二维字符数组元素的引用
格式: 数组名[下标 下标 下标1] 下标2] 格式 数组名 下标 [下标 数组元素各维的下标都从0开始 数组元素各维的下标都从 开始 如有定义: 如有定义: char c [ 3 ][ 4 ];
c [1]='a' ; c [3]=c[2]+1 ; c [5]=9 ;
c
c [6]=c[4]+3 ; c [7]=c[5]+3 ; '9' (57) 9 00111001
c[9]
00000000 00001001 5
二、二维字符数组的定义1 二维字符数组的定义
格式: 格式: 类型标识符 常量1][常量 常量2 数组名 [常量1][常量2];
13
五、二维字符数组的初始化2 二维字符数组的初始化
二维数组的初始化就是在定义数组的同时对数组元 二维数组的初始化就是在定义数组的同时对数组元 素赋以初值。 素赋以初值。 格式: 格式:
static 类型说明符 数组名[ 常量1][常量 ]= 数组名 常量 常量2 常量 { {字符常量表 , {字符常量表 , ……{字符常量表 } ; 字符常量表1} 字符常量表 字符常量表2} 字符常量表n} 字符常量表 字符常量表
定义的目的: 定义的目的:为指定的数组分配相应字节的存储 单元。 单元。
数组名 常量2,第二维的大小 常量 ,
char c [ 3 ][4 ];
常量1, 常量 ,第一维的大小
类型标识符 定义c为二维字符数组, 3*4=12个字 定义c为二维字符数组,可独立存放 3*4=12个字 符型数据,系统要为数组c分配1*12=12 1*12=12个字节的 符型数据,系统要为数组c分配1*12=12个字节的 存储单元,且这些存储单元是连续的。 存储单元,且这些存储单元是连续的。
static 类型说明符 数组名[ 常量 ]={ 字符常量表列 } ; 数组名
●例如: 例如:
只能为常量
static char c[12] = { '*' , '?' , ' ' , '1' , ' 2' , 'A' , 'B' , 'C' , 'a' , 'b' , 'c' , '\0' } ; 将花括号中的常量依次赋给各个数组元素, 将花括号中的常量依次赋给各个数组元素,即数组元素 c[0],c[1],……,c[10],c[11]的值分别为 , , , , 的值分别为 '*','?',…… 'c','\0'。 , , , 。
将双能上能引号中的字符依次赋给各个数组元素, 将双能上能引号中的字符依次赋给各个数组元素,即数 组元素c[0],c[1],……,c[10],c[11]的值分别为 组元素 , , , , 的值分别为 'a','b',…… '5','6','7','\0'。 , , , , , 。
12
六、二维字符数组的初始化1 二维字符数组的初始化
●例如: 例如:
第二维大小为5 第二维大小为
static char a[ 3 ][ 5 ] = { " 1234" , "ABCD" , "abcd" } ;
将第一个字符串常量中的字符依次赋给第一行的各个元素, 将第一个字符串常量中的字符依次赋给第一行的各个元素, 将第二个字符串常量中的字符依次赋给第二行的各个元素, 将第二个字符串常量中的字符依次赋给第二行的各个元素, 即数组元素a[0][0],a[0][1],……,a[2][2],a[2][3]的值分 即数组元素 , , , , 的值分 别为 '1','2','3','4','A','B','C','D','a','b', 'c', , , , , , , , , , , , 'd'。 但每行的最后都有字符串结束标志 。 。 但每行的最后都有字符串结束标志'\0'。