收藏 分销(赏)

C语言程序设计项目式教程课件全书电子教案教材课件.ppt

上传人:精**** 文档编号:10251509 上传时间:2025-04-30 格式:PPT 页数:204 大小:5.48MB
下载 相关 举报
C语言程序设计项目式教程课件全书电子教案教材课件.ppt_第1页
第1页 / 共204页
C语言程序设计项目式教程课件全书电子教案教材课件.ppt_第2页
第2页 / 共204页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,3.0,3.0,3.0,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,威迅教育开发部监制,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,3.0,3.0,3.0,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,威迅教育开发部监制,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,3.0,3.0,3.0,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,威迅教育开发部监制,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,3.0,3.0,3.0,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,威迅教育开发部监制,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,3.0,3.0,3.0,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,威迅教育开发部监制,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,第 一 章,第四章,目,两个整数的四则运算,项,一,学习,目标,通过编写计算任意两个整数的四则运算程序,介绍,C,语言程序基本结构,调试运行流程,以及实现该功能所必需的,C,语言语法知识。在任务实现过程中:,了解,C,语言程序的基本构成与运行方法。,理解常量、变量的区别以及整型、字符型数据的常量、变量表示方法。,掌握算术运算符、关系运算符及算术表达式、关系表达式。,掌握数据的输入输出函数及使用方法。,具有使用,if-else,语句及,while,语句实现基本功能的能力。,学习路径,任务一,指定两个非零整数的基本运算,任务名称,简单,的,C,语言程序结构,学习一种编程语言,最佳途径就是多阅读代码段,多编写程序代码,接下来通过最基本的,C,语言程序的基本构成学习基本格式和书写规范,代码示例如下所示:,简单,的,C,语言程序结构,说明,1,注释,程序注释是书写规范程序时很重要的一个内容,注释可以方便程序的阅读和维护。注释在编译代码时会被忽略,不会编译到最后的可执行文件中,所以注释不会增加可执行文件的大小。,简单,的,C,语言程序结构,说明,2,预处理,include,称为文件包含命令,其意义是把双引号,或尖括号,内指定的文件包含到本程序来,成为本程序的一部分。被包含的文件通常是由系统提供的,其扩展名为,.h,的头文件。,C,语言的头文件中包括了各个标准库函数的函数原型。因此,凡是在程序中调用一个库函数时,都必须包含该函数原型所在的头文,示例代码如下所示:,简单,的,C,语言程序结构,说明,3,main(),函数,C,语言程序是由若干个函数组成,每个程序有且仅有一个,main(),函数(主函数),不论其在程序中的位置,,C,语言程序总是从,main(),函数开始执行,当,main(),函数执行完毕时,亦即程序执行完毕。,main,后面的一对圆括号是必须的,其中可放置函数的参数列表,也可无参数。用,括起来的部分,是主函数的函数体部分,示例代码如下所示:,简单,的,C,语言程序结构,说明,4,语句,C,语言中以“,;”,作为语句结束的标志。函数体就是由若干语句组成的,同时语句也出现在函数之间,示例代码如下所示:,简单,的,C,语言程序结构,学习一种编程语言,最佳途径就是多阅读代码段,多编写程序代码,接下来通过最基本的,C,语言程序的基本构成学习基本格式和书写规范,代码示例如下所示:,整型常量与整型,变量,应用程序运行过程中需要处理数据,并需要部分空间临时存放数据,该技能点讲解,C,语 言中整型、整型常量、整型变量的基本概念。,(,1,)整型 整型用于描述现实生活中的整数,例如,1,,,32,,,-55,等,基本类型符为,int,。,(,2,)整型常量 整型常量就是整常数,程序中不改变的整数数据都可以看成是整型常量。在,C,语言中,十进制整型常量与日常数学中整数相同。另外还有八进制、十六进制。,(,3,)整型变量的声明和初始化:一般情况下,变量用来保存程序运行过程中输入的数据、计算获得的中间结果以及程序的最终结果。一个变量在使用之前应该有一个名字,在内存中占据一定的存储单元,变量必须“先声明,后使用”。例如变量,r,声明的格式如下所示:,变量的命名,变量名属于标识符,命名时,一定要符合标识符的命名规定,即只能由字母、数字和下划线三种字符组成,且第一个字符必须是字母或下划线。如下所示:,a,sum,_avg,b8,a_1,(合法变量名),1a,s,um,$_avg,b8,a_1#,(都是不合法变量名),算术运算符和表达式,(,1,)算术运算符,C,语言中的算术运算符主要用于执行加、减、乘、除等算术运算。算术运算符分为单目运 算符和双目运算符两类,如表,1.1,所示。注意,1,:两个整型数据相除结果也是整型数据,即整除。注意,2,:取余运算,%,,仅能用于整型数据,即运算量仅能是整数或整型变量。,算术运算符和表达式,(,2,)表达式,表达式是用运算符、括号将操作数连接起来所构成的式子。,C,语言的操作数包括常量、变量和函数值等。特殊的情况,一个单个变量或常量也可叫做表达式。,数据输出,程序中的数据输入输出是指外界(例如用户等)与计算机之间的数据交换,从计算机把数据传给外界称之为输出。常用的数据输出是在显示器上显示信息,在,C,语言中,数据输入输出都是由库函数实现的。,(,1,),printf(),函数,printf(),是格式输出函数,是,C,语言中使用最频繁的输出函数。它是一个标准库函数,它 的函数原型在头文件“,stdio.h”,中。,printf,函数的调用格式如下:,在,Visual Studio 2017,中运行,C,程序,任务一,任务实施,本任务:计算指定两个非零整数(,10,和,5,)之和、之差、之积、之商。,任务一,任务拓展,拓展任务名称:指定长方形的长和宽,求长方形的面积。,任务二,任务二 随机输入的两个非零整数的基本运算,scanf,(),函数,scanf(),函数是一个标准库函数,它的函数原型在头文件“,stdio.h”,中。,scanf(),函数的一般格式如下所示:,scanf(),函数格式说明,该函数的功能是按用户指定的格式从键盘上把数据输入到指定的变量之中。,格式控制字符串的作用与,printf(),函数相同,但不能显示非格式字符串,也就是不能显 示提示字符串。,地址表列中给出各变量的地址。地址是由地址运算符“,&”,后跟变量名组成的。,在使用,scanf(),函数输入数据时,遇到下面的情况时该数据认为结束:遇空格或按“回 车”键或“跳格”(,Tab,)键;按指定的宽度结束,如“,%3d”,,只取,3,列;遇到非法输入例如,&a,、,&b,,分别表示变量,a,和变量,b,的地址。这个地址就是编译系统在内存中给,a,b,变量分配的地 址。在语言中,使用了地址这个概念,这是与其他语言不同的。应该把变量的值和变量的地 址这两个不同的概念区别开来。变量的地址是,C,编译系统分配的,用户不必关心具体的地址 是多少。,任务二,任务实施,本任务:由键盘输入,2,个非零整数,计算这,2,个整数之和、之差、之积、之商。运行结果:,任务二,任务拓展,拓展任务名称:使用键盘输入长方形的长和宽,计算并输出长方形的面积。,任务三,任务三 随机输入的整数的基本运算,关系运算符,关系运算符主要实现数据的比较运算,用于比较运算。包括大于,(),、小于,(=),、小于等于,(=),、等于,(=),和不等于,(!=),六种。由关系运算符将两个表达式连接起来的式子,就叫关系表达式。关系表达式的值是一个逻辑值,即“真”或“假”,分别用,1,和,0,表示。,C,语言中的关系运算符如下所示。,关系运算符的优先级,关系运算符都是双目运算符,其结合性均为左结合。关系运算符的优先级低于算术运算 符,高于赋值运算符。在六个关系运算符中,、,、,=,的优先级相同,高于,=,和,!=,,而,=,和,!=,的优先级相同。,流程图,流程图是一种常用的算法图形表示方法。流程图是用具有特定涵义的图形符号(例如矩 形、菱形和平行四边形等)通过“流程线(,Flowline,)”连接而成的。它可以清晰地反映程序的执 行过程。流程图的常用图形符号,如下所示。,控制结构,所有的程序无论长短,都只采用,3,种基本程序控制结构,即顺序结构、选择结构和循环结 构。这,3,种结构都具有如下特点:,只有一个入口;,只有一个出口;,每一条语句都应当有一条从入口到出口的路径通过,即每条语句都有机会被执行;,没有死循环。,控制结构,顺序结构,(,1,)顺序结构 顾名思义,顺序结构就是按照程序中语句本身的先后次序,依次执行。如图 所示,先 执行,A,操作,再执行,B,操作,两者就是顺序执行的关系。,控制结构,选择结构,在编写程序的时候,许多事情也是事先不固定的,例如,编写程序求任意值的绝对值函数,当自变量的值大于等于,0,时,其值就是其本身;当自变量的值小于,0,时,其值就是其相反数。自变量的值到底是多少,在编写程序的时候是不知道的,所以在程序中必须有判断环节来确定执行不同操作。这种判断环节就是选择结构。选择结构是先判断指定的条件,再决定执行哪个语句,如下所示,当条件成立,即为真时,执行,A,;否则,执行,B,。注意,只能执行,A,或,B,之一。,控制结构,循环结构,循环结构分为当型循环结构和直到型循环结构两类。,当型循环结构是指先判断循环条件,当循环条件成立,即为逻辑真时,反复执行循环体;,当循环条件不成立,即为逻辑假时,停止循环,执行循环体后面的语句,如下所示。,直到型循环结构是指先执行循环体,再判断循环条件是否成立,若成立,则反复执行循环,体;若不成立,则退出循环,执行循环体后面语句,如下所示。,单一,if,结构,选择结构中最基本的分支结构是,if,语句,按形式分,if,语句可以分为单分支、双分支和多,分支等,单一,if,语句定义形式如下所示,当上述中“表达式”值为“逻辑真”时,执行“语句”中内容。例如计算整型变量,x,的绝对值,示例代码如下所示:,If-else,结构,if,语句的第二种形式为,if-else,结构的双分支。其定义形式如下所示:,当“表达式”值为“逻辑真”时,执行“语句,1”,;当“表达式”值为“逻辑假”时,执行“语句,2”,。例如,判断整型变量,x,是,5,,则输出“,right”,,否则输出“,error”,,示例代码如下所示:,条件运算,条件运算符是,C,语言中唯一的三目运算符,要求有三个运算对象。由条件运算符组成的 表达式称为条件表达式,其格式如下:,条件表达式的求值规则为:如果表达式,1,的值为真,则以表达式,2,的值作为条件表达式,的值,否则以表达式,3,的值作为整个条件表达式的值。,条件运算符的运算优先级低于关系运算符和算术运算符,但高于赋值符。因此条件表达式通常用于赋值语句之中,条件运算符,?,和:是一对运算符,不能分开单独使用。,条件运算符的结合方向是自右至左,任务三,任务实施,本任务:由键盘输入,2,个任意整数(考虑零不可以做除数),计算这,2,个整数之和、之差、之积、之商。,任务三,任务拓展,拓展任务名称:比较,x,、,y,的大小,如果,x,大则在屏幕中输出“,xy”,,否则输出“,x2&21,的值为,032&21,的值为,112&23,的值为,021&12,的值为,0,|,逻辑或:参与运算的两个量只要有一个为真,结果就为真。两个量都为假时,结果为假。,12|21,的值为,132|21,的值为,112|23,的值为,021|12,的值为,1,单目,!,逻辑非:参与运算量为真时,结果为假;参与运算量为假时,结果为真。,!,1,的值是,0,!,0,的值是,1,逻辑运算,(,2,)逻辑运算符的优先级和结合性,三个逻辑运算符中,逻辑非“!”的优先级最高,具有右结合性,其次是逻辑与“&”,最后是逻辑或“|”,逻辑与和逻辑或都具有左结合性。它们的优先级为:!&|。,当一个复杂的表达式中既有算术运算符、关系运算符,还有逻辑运算符时,它们之间的优先级如下:算术运算符 关系运算符 逻辑运算符。,条件运算,条件运算符是C语言中唯一的三目运算符,要求有三个运算对象。由条件运算符组成的表达式称为条件表达式。条件表达式的一般格式如下:,条件表达式的求值规则为:若表达式1的值为真,则以表达式2的值作为条件表达式的值,否则以表达式3的值作为整个条件表达式的值。,条件运算符?和:是一对运算符,不能分开单独使用。,条件运算符的运算优先级低于关系运算符和算术运算符,但高于赋值符。,条件运算符的结合性是自右至左,例如条件表达式嵌套:ab?a:cd?c:d,应理解为ab?a:(cd?c:d)。,表达式,1?,表达式,2,:表达式,3,for,和,do-while,语句,(,1,)for语句简介,C语言中的for语句使用最为灵活,它完全可以代替while语句,。,其流程图和执行过程分析可以看出,,它相当于while循环中如下形式,for(,表达式,1;,表达式,2;,表达式,3),循环体,表达式1;while(表达式2),循环体,表达式3;,for,和,do-while,语句,该语句的执行过程为:,第一步:执行表达式1;,第二步:求表达式2的值,若其值为true(非0),则执行一次循环体,若其值为false,(0),则结束循环,转而执行循环体后面的语句;,第三步:执行表达式3,然后转到第二步继续执行。,for循环,含义,for(sum=0,i=1;i=10;sum+=i,i+);,求1+2+3+4+5+6+7+8+9+10的和,for(sum=0,i=1;i=10;sum+=i,i+=2);,求1+3+5+7+9的和,for(i=0;i+);,从0开始,1,2,3,不停向上递增,永不停止,for(;i&|。,当一个复杂的表达式中既有算术运算符、关系运算符,还有逻辑运算符时,它们之间的优先级如下:算术运算符 关系运算符 逻辑运算符。,使用符号常量的原因,对于一个成熟的程序员来说,在一个程序中,反复多次使用的常量,都定义为符号常量,这是为什么呢?这主要是因为在程序中使用符号常量有明显的好处。,(1)见名知意,清晰明了。为了便于记忆,常常用一个能够表示意义的单词或字母组合来为符号常量命名,增强了程序的可读性。,(2)避免反复书写,减少出错率。如果一个程序中多次使用一个常量,就要多次书写,而定义了符号常量,只需要书写一次数值,在使用的地方用符号替代就可以了,能够有效地减少出错概率。,(3)一改全改,方便实用。当程序中多次出现同一个常量需要修改时,必须逐个修改,很可能出错。而用符号常量,在需要修改时,只需修改定义,就可以做到“一改全改”,非常方便。,任务二 并排显示2019年前3个月的日历,,每行显示每个月的同一周,为什么要用数组,C语言引入了数组的概念,是为了方便在计算机中描述事物的某些特征及这些特征之间的联系。数组相当于是由若干数据类型相同的变量组成的一个有序的集合,可以通过一个统一的数组名称和一个位置编号的方式来访问数组中的数据。下面通过介绍一个整型一维数组a,该数组中包含10个元素,用来表示10个学生成绩。,通过数组名及其后面方括号内的下标,就可以引用数组中该元素。数组中第一个元素是下标为0的元素。因此,数组a的第1个元素记为a0,数组a的第2个元素记为a1,依次类推,数组a的第10个元素记为a9,一般来说,数组a的第n个元素记为an-1,一维数组的引用,声明了数组以后,如何来使用数组中的元素呢?C语言规定只能逐个引用数组元素而不能一次引用整个数组,数组元素是组成数组的基本单元。数组元素也是一种变量,其标识方法为在数组名后跟一个下标,下标表示了元素在数组中的顺序号。一维数组的引用格式如下:,引用一维数组时应注意:,(1)数组名是表示要引用哪一个数组中的元素,这个数组必须已经声明。,(2)下标用一对中括号括起来,它表示要引用数组中的第几个元素,可以是变量表达式也可以是常量表达式。如为小数时,C编译将自动取整。举例如下代码所示,:,数组名下标,num3;,numi+j;,numi+;,一维数组的引用,(3)C语言规定,数组下标从0开始。一个含有n个元素的数组,数组下标的取值范围为0,n-1,举例如下代码所示:,其中,整型数组num的下标只能取0、1、2三个值,即可以引用数组元素num0、num1、num2。,如将上述程序段中第二行改为:num 3=k;则错误,引用num3是超界的,它表示数组中的第四个元素。C语言编译时并不指出“下标超界”的错误,而是把num2下面一个单元的内容作为num3引用,从而引起程序潜在的错误。因此,引用数组元素时要特别小心。,int num3,k=10;num0=k;,一维数组的初始化,与使用变量一样,一维数组在使用之间必须进行声明。一维数组的声明格式如下:,数据类型 数组名常量表达式;,(1),数据类型用来声明数组中各个数据元素的类型,如,int,、,float,、,char,等。在任何一个数组中,数据元素的类型都是一致的。,(2),数组名的命名规则与变量名的命名规则一样。,(3),数组名中存放的是一个地址常量,它代表整个数组的首地址。同一数组中的所有元素,在内存单元中按其下标的顺序占用一段连续的存储单元。一维数组的逻辑结构与存储结构是相同的,数组,a,的存储结构为:,(4)常量表达式的值表示数组元素的个数。常量表达式必须是整数或者整数表达式而不能有变量。常量表达式是放在一对中括号中。,一维数组的初始化,数组声明后,必须对其元素进行初始化。数组初始化是指在数组声明时给数组元素赋予初值。可以在运行时显示地初始化数组,也可以像普通变量一样,在声明数组同时初始化数组元素。这种方法是在编译阶段进行的,可以减少运行时间,提高效率。一维数组的初始格式如下:,数据类型 数组名常量表达式初值表,任务三,显示2019年全年日历,每3个月一排,,每行显示相邻3个月的同一周,二维数组的声明,具有多个下标的数组称为多维数组,其中最常用的是二维数组,主要用来表示数值表格。二维数组的声明格式如下:,声明二维数组时应注意:,(1)与一维声明基本相同,只多了一个常量表达式,表示二维。第一个常量表达式为行下标,声明了这个数组的行数,第二个常量表达式为列下标,声明了每行的列数。因此,元素个数=行数*列数。如上面二维数组a由34=12个元素组成。,数据类型 数组名常量表达式 常量表达式;,二维数组的声明,(2)C语言把二维数组看成是一维数组,基元素又是一个一维数组。例如,a有三个元素a0,a1和a2,它们各自又可以看作为一个包含5个元素的一维数组,(3)二维数组的元素在内存中按线性方式存放,即按行存放,先存放第一行的元素,再存放第二行的元素。数组a的存放顺序为:,a00 a01 a02 a03 a10 a11 a12,a23,二维数组的引用,二维数组的引用格式如下:,引用二维数组元素时,对数组下标的值要求与引用一维数组相同,即行或列下标表达式的值只能从0到数组所规定的下标上界之间的整数。,数组名下标,二维数组的初始化,在声明二维数组同时,可以用下列方法给数组元素初始化:,(1)按存放顺序,举例如下:,二维数组的初始化,(2)按行分段初始化,举例如下:,结果与第一种方法相同,但更为直观。有几组用逗号分隔的大括号,就代表二维数组有几行,而每组大括号有几个用逗号分隔的数值,就代表该行有几列。最后将所有的初始化内容用一对大括号括起来。这种方法特别适用于对数组部分元素赋初值,系统自动将没有赋值的元素赋值成0,举例如下:,二维数组的初始化,(3)声明同时对数组元素全部赋值,可省略第一维的长度,但必须指定其他维的长度,如下所示:,根据初值的个数,编译系统会自动确定第一维的下标,如下所示:,编译系统会根据初值数据的行数自动确定第一维下标的长度,int a4=1,2,3,4,5,6,7,8,9,10,11,12;,int a4=1,9,10;/*数组a中各元素如图3-13(c)所示。*/,字符数组与字符串的关系,用字符数组表示字符串时需注意:,(1)0代表字符串结束,处理字符数组时,一旦遇到该字符,剩下的字符就不再处理。,(2)在进行字符串处理时,0不作为字符串的有效字符进行处理,它只起到判别作用。,(3)0在字符数组中,仍占用一个单元,如字符串program的长度为7,但它却占用了字符数组8个的单元的大小。因此,大小为n的字符数组最多只能存放长度为n-1的字符串,需要预留出字符串结束符0的位置。,字符数组的声明,字符数组的声明与前面介绍的类似。例如,char c10;/*一维字符数组,每个元素占用1个字节内存单元*/char c34;/*二维字符数组,每个元素占用1个字节内存单元*/,字符数组初始化,字符数组可以使用这两种方法来进行初始化。,使用字符常量初始化数组,举例如下,(2)使用字符串常量(字符串)初始化数组,举例如下:,char c10=C,L,a,n,g,u,a,g,e;,/*声明同时对各个元素赋初值*/,char c=C Language;/*此时数组c长度为11*/char c=C Language;/*大括号也可以省略*/,输入输出字符串,在C语言中,有两个函数可以在控制台(显示器)上输出字符串,它们分别是:,puts():输出字符串并自动换行,该函数只能输出字符串。,printf():通过格式控制符%s输出字符串,不能自动换行。除了字符串,printf()还能输出其他类型的数据。,同样在C语言中,有两个函数可以让用户从键盘上输入字符串,它们分别是:,scanf():通过格式控制符%s输入字符串。除了字符串,scanf()还能输入其他类型的数据。,gets():直接输入字符串,并且只能输入字符串。,输入输出字符串,使用格式符“%c”,以单个字符形式输入输出,在用键盘输入字符串时,通常以回车符或空格符结束一个字符串的输入。如本例,当输入“abcd abcd abcd”时,实际存入字符数组c中的字符只有“abcd”,这一点请注意。,在未知字符串长度情况下,声明字符数组长度时应尽量长些,但这势必会造成资源浪费。我们可以用字符串初始化字符数组,就显得方便多了。,输入输出字符串,使用格式符“%s”,以字符串整体形式输入或输出,(1)输出字符串时不包括0。,(2)用“%s”格式将字符串整体输出时,在printf函数中输出项应是字符数组名,而不是数组元素名。如printf(%s,ci)是错误的。,(3)如果数组长度字符串实际长度时,printf函数也只输出到第一个0为止。,(4)使用scanf输入整个字符串时,输入项是字符数组名,不要再加地址符&,并且它应该是已经被声明过。如:scanf(%s,ci)或scanf(%s,&ci)都是错误的。,(5)利用scanf函数输入多个字符串以空格分隔。,字符串处理函数,gets()函数,gets()函数使用时格式如下所示:,(1)与使用scanf的“%s”格式输入字符串不同,gets()函数接受的字符串可以包含空格。,(2)scanf()函数可以采用多个“%s”格式可以同时输入多个字符串,而gets()函数一次只能输入一个字符串,以回车符作为字符输入结束。,gets(字符数组名);,字符串处理函数,puts()函数,puts()函数使用时格式如下所示:,作用:将数组中的以0结束的字符串输出,输出完毕自动换行。它的功能与printf()的“%s”格式的功能基本相同,只是每次只能输出一个字符串。,puts(字符数组名);,字符串处理函数,strcat()字符串连接函数,strcat()字符串连接函数使用时格式如下所示:,作用:将字符数组1中的字符串结束符0删除,将字符数组2连接到字符数组1后面,并返回字符数组1的首地址。,strcat(字符数组1,字符数组2);,字符串处理函数,strcpy()函数,strcpy()函数使用时格如下所示:,作用:把字符串数组2的内容拷贝到字符数组1中,拷贝结束后,系统会自动在字符数组1中加入结束符0。,strcpy(字符数组1,字符数组2);,字符串处理函数,strcmp()函数,strcmp()函数使用时格式如下所示:,作用:比较两个字符串的大小,比较时对两个字符串自左至右逐个字符按ASCII码值大小比较,直到出现不同字符或0为止。比较结果由函数值返回。,字符串1 字符串2,函数返回值是正整数,为两个字符串中第一个不同字符的ASCII码值的差值。在字符串比较时,字符串结束符0也参加比较。,字符串1字符串2,函数返回值是负整数,其它同上。,字符串1=字符串2,函数返回值为0。,C语言规定,不能使用“=”比较两个字符串,只能用strcmp()函数来处理。,strcmp(字符数组1,字符数组2);,字符串处理函数,strlen()函数,strlen()函数使用时格式如下所示:,作用:测试字符串长度,函数的返回值为字符实际长度,不包含“0”。,strlen(字符数组名/字符串);,任务四,输入年份,显示该年的日历,每3个月一排,每行显示相邻3个月的同一周,任务技能 变量,(,1,)变量的作用域,函数形参变量只在被调用期间才分配内存单元,调用结束立即释放。这一点表明形参变量只有在函数内才是有效的,离开该函数就不能再使用了。这种变量有效性的范围称变量的作用域。不仅对于形参变量,语言中所有的变量都有自己的作用域。变量说明的方式不同,其作用域也不同。在C语言中,按作用域范围不同可分为局部变量和全局变量。,任务技能 变量,(,2,)局部变量,局部变量也称为内部变量。局部变量是在函数体内声明的变量。其作用域仅限于函数内,离开声明它的函数后就失去作用。,任务技能 变量,关于局部变量的作用域的几点说明:,(1)main()中定义的变量也只能在main()中使用,不能在其它函数中使用。同时,main()中也不能使用其它函数中定义的变量,因为main()也是一个函数,它与其它函数是平行关系。这一点与其它语言不同的,应予以注意。,(2)形参变量是属于被调函数的局部变量,实参变量是属于主调函数的局部变量。,(3)允许在不同的函数中使用相同的变量名,它们代表不同的对象,分配不同的单元,互不干扰,也不会发生混淆。,(4)在复合语句中也可定义变量,其作用域只在复合语句范围内。,任务技能 变量,(,3,)全局变量,全局变量也称为外部变量,它是在任何一个函数体外定义的变量,它不属于任何函数,它属于整个源程序文件,即其作用域是从其定义之处到整个源程序结束。,在一个函数中既可以使用本函数中的局部变量,又可以使用有效的全局变量。在一个函数之前定义的全局变量,在该函数内使用可不再加以说明。,任务技能 变量,关于局部变量和全局变量的几点说明:,(1)对于局部变量的定义和声明,可以不加区分。但对于全局变量则不然,全局变量的定义和声明有不同的涵义。全局变量的定义必须在所有函数体之外,且只能有一次。,(2)全局变量可加强函数模块之间的数据联系,但是又使函数要依赖这些变量,因而使得函数的独立性降低。从模块化程序设计的观点来看这是不利的,因此在不必要时尽量不要使用全局变量。,(3)在同一源文件中,允许全局变量和局部变量同名。在局部变量的作用域内,全局变量不起作用。,(4)外部变量和全局变量是对同一类变量的两种不同角度的提法。全局变量是从它的作用域提出的,外部变量从它的存储方式提出的,表示了它的生存期。当一个源程序由若干个源文件组成时,在一个源文件中定义的外部变量在其它的源文件中也有效。,(5)程序在内存中存在期间,外部变量始终存在,不会随着函数的调用或退出而存在或消失。,任务技能 变量,(,4,)变量的存储类型,变量的存储方式可分为静态存储和动态存储两种。静态存储变量通常是在变量定义时就分配存储单元并一直保持不变,直至整个程序结束。动态存储变量是在程序执行过程中,使用它时才分配存储单元,使用完毕立即释放。典型的例子是函数的形参,在函数定义时并不给形参分配存储单元,只是在函数被调用时,才予以分配,调用函数完毕立即释放。如果一个函数被多次调用,则反复地分配、释放形参变量的存储单元。从以上分析可知,静态存储变量是一直存在的,而动态存储变量则时而存在时而消失。这种由于变量存储方式不同而产生的特性称变量的生存期。生存期表示了变量存在的时间。生存期和作用域是从时间和空间这两个不同的角度来描述变量的特性,这两者既有联系,又有区别。一个变量究竟属于哪一种存储方式,并不能仅从其作用域来判断,还应有明确的存储类型说明。,在语言中,对变量的存储类型说明有四种:自动变量(auto)、静态变量(static)、外部变量(extern)和寄存器变量(register)。,自动变量和寄存器变量属于动态存储方式,外部变量和静态变量属于静态存储方式。在介绍了变量的存储类型之后,可以知道对一个变量的说明不仅应说明其数据类型,还应说明其存储类型。,任务技能 变量,自动变量,自动变量具有以下特点:,(1),自动变量的作用域仅限于定义该变量的个体内。在函数中定义的自动变量,只在该函数内有效。在复合语句中定义的自动变量只在该复合语句中有效。,(2),自动变量属于动态存储方式,只有在定义该变量的函数被调用时才给它分配存储单元,开始它的生存期。函数调用结束,释放存储单元,结束生存期。因此函数调用结束之后,自动变量的值不能保留。在复合语句中定义的自动变量,在退出复合语句后也不能再使用,否则将引起错误。,(3),由于自动变量的作用域和生存期都局限于定义它的个体内,(,函数或复合语句内,),,因此不同的个体中允许使用同名的变量而不会混淆。即使在函数内定义的自动变量也可与该函数内部的复合语句中定义的自动变量同名。例如,例,9-6,中的变量,k,。,任务技能 变量,静态变量,静态变量的类型说明符是static,属于静态存储方式。但是属于静态存储方式的量不一定就是静态变量,例如外部变量虽属于静态存储方式,但不一定是静态变量,必须由 static加以定义后才能成为静态外部变量,或称静态全局变量。,静态局部变量具有以下特点:,静态局部变量在函数内定义,但不象自动变量那样,当调用时就存在,退出函数时就消失。静态局部变量始终存在着,也就是说它的生存期为整个源程序。,静态局部变量的生存期虽然为整个源程序,但是其作用域仍与自动变量相同,即只能在定义该变量的函数内使用该变量。退出该函数后,尽管该变量还继续存在,但不能使用它。,对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋予0值。而对自动变量不赋初值,则其值是不定的。,任务技能 变量,静态全局变量,全局变量的声明之前加上static就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。静态全局变量和非静态全局变量的区别在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的;而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。,从以上分析可以看出,把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。因此static这个说明符在不同的地方所起的作用是不同的,应予以注意。,任务技能 变量,寄存器变量,上述各类变量都存放在存储器内,因此当对一个变量频繁读写时,必须要反复访问内存储器,从而花费大量的存取时间。为此,语言提供了另一种变量,即寄存器变量。这种变量存放在CPU的寄存器中,使用时,不需要访问内存,而直接从寄存器中读写,这样可提高效率。寄存器变量的说明符是register。对于循环次数较多的循环控制变量及循环体内反复使用的变量均可定义为寄存器变量。,对寄存器变量还要说明以下几点:,(1)只有局部自动变量和形参才可以定义为寄存器变量。因为寄存器变量属于动态存储方式,凡需要采用静态存储方式的量不能定义为寄存器变量。,s,(2)在Turbo C中,实际上是把寄存器变量当成自动变量处理的。因此速度并不能提高。而在程序中允许使用寄存器变量只是为了与标准C保持一致。,(3)即使能真正使用寄存器变量的机器,由于CPU中寄存器的个数是有限的,因此使用寄存器变量的个数也是有限的。当今的优化编译系统能够自动将使用频繁的变量放在寄存器中,不需要程序设计者指定。在实际上用register声明变量是不必要的。,任务,总结,本项目,通过编写万年历程序,介绍符号常量的用法、体现数组在程序中的重要性以及变量的使用方式,实现可以在屏幕上显示任意指定年份的日历,。,第 一 章,第四章,目,计算个人所得税,项,四,学习,目标,了解浮点型相关知识,掌握结构体的含义,掌握结构体数组的定义和使用,掌握引入文件的意义,具有文件基本操作的能力,学习路径,任务一 计算个人所得税后输出,浮点型,(,1,)浮点型概念,浮点型用于描述现实生活中的实数,例如,1.2,、,123.45,等,基本类型为,float,。可以根据取值 的范围和数据精度的不同,通常情况下,将浮点数分为单精度(,float,)和双精度(,double,)。,浮点型,(,2,)浮点型常量,浮点型也称为实型。浮点型常量也称为实数或者浮点数。在,C,语言中,实数只采用十进 制。它有二种形式:十进制小数形式和指数形式。,1,)十进制数形式:由数码,0 9,和小数点组成。,2,)指数形式:由十进制数,加阶码标志“,e”,或“,E”,以及阶码(只能为整数,可以带符号)组 成。其一般格式为:,a E n,(,a,为十进制数,,n,为十进制整数,表示阶码),其值为,a10n,。,1.0,、,15.8,、,5.678,、,-0.13,、,500.,、,-267.8230,等均为合法的实数。,3.2E5,(等于,3.2105,),,4.7E-2,(等于,4.710-2,),,0.6E7,(等于,0.6107,浮点型,(,3,)浮点型变量,C,语言中浮点型变量指的就是实数变量(存放可以带小数的数据的变量),分为两类:,float,(单精度型)和,double,(双精度型
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服