C语言程序设计项目式教程-全套ppt课件



《C语言程序设计项目式教程-全套ppt课件》由会员分享,可在线阅读,更多相关《C语言程序设计项目式教程-全套ppt课件(204页珍藏版)》请在装配图网上搜索。
1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,,*,第 一 章,第四章,,,目,两个整数的四则运算,,,项,,一,,企业级卓越人才培养,第 一 章第四章目 两个整数的四则运算项一企业级卓越人才培养,学习目标,,通过编写计算任意两个整数的四则运算程序,介绍,C,语言程序基本结构,调试运行流程,以及实现该功能所必需的,C,语言语法知识。在任务实现过程中:,了解,C,语言程序的基本构成与运行方法。,理解常量、变量的区别以及整型、字符型数据的常量、变量表示方法。,掌握算术运算符、关系运算符及算术表达式、关系表达式。,掌握数据的输入输出函数及使用方法。,具有使用
2、,if-else,语句及,while,语句实现基本功能的能力。,学习目标 通过编写计算任意两个整数的四则运算,学习路径,学习路径,任务一,指定两个非零整数的基本运算,任务名称,任务一 指定两个非零整数的基本运算任务名称,简单的,C,语言程序结构,,学习一种编程语言,最佳途径就是多阅读代码段,多编写程序代码,接下来通过最基本的,C,语言程序的基本构成学习基本格式和书写规范,代码示例如下所示:,简单的C语言程序结构 学习一种编程语言,最佳途径就,简单的,C,语言程序结构,说明,1,——注释,程序注释是书写规范程序时很重要的一个内容,注释可以方便程序的阅读和维护。注释在编译
3、代码时会被忽略,不会编译到最后的可执行文件中,所以注释不会增加可执行文件的大小。,简单的C语言程序结构说明1——注释,简单的,C,语言程序结构,说明,2,——预处理,,include,称为文件包含命令,其意义是把双引号,"",或尖括号,,内指定的文件包含到本程序来,成为本程序的一部分。被包含的文件通常是由系统提供的,其扩展名为,.h,的头文件。,C,语言的头文件中包括了各个标准库函数的函数原型。因此,凡是在程序中调用一个库函数时,都必须包含该函数原型所在的头文,示例代码如下所示:,简单的C语言程序结构说明2——预处理,简单的,C,语言程序结构,说明,3,——,main(),函数,C,语言程序是
4、由若干个函数组成,每个程序有且仅有一个,main(),函数(主函数),不论其在程序中的位置,,C,语言程序总是从,main(),函数开始执行,当,main(),函数执行完毕时,亦即程序执行完毕。,main,后面的一对圆括号是必须的,其中可放置函数的参数列表,也可无参数。用,{},括起来的部分,是主函数的函数体部分,示例代码如下所示:,简单的C语言程序结构说明3——main()函数,简单的,C,语言程序结构,说明,4,——语句,C,语言中以“,;”,作为语句结束的标志。函数体就是由若干语句组成的,同时语句也出现在函数之间,示例代码如下所示:,简单的C语言程序结构说明4——语句,简单的,C,语言程
5、序结构,,学习一种编程语言,最佳途径就是多阅读代码段,多编写程序代码,接下来通过最基本的,C,语言程序的基本构成学习基本格式和书写规范,代码示例如下所示:,简单的C语言程序结构 学习一种编程语言,最佳途径就,整型常量与整型变量,,应用程序运行过程中需要处理数据,并需要部分空间临时存放数据,该技能点讲解,C,语 言中整型、整型常量、整型变量的基本概念。,(,1,)整型 整型用于描述现实生活中的整数,例如,1,,,32,,,-55,等,基本类型符为,int,。,(,2,)整型常量 整型常量就是整常数,程序中不改变的整数数据都可以看成是整型常量。在,C,语言中, 十进制整型常量与日常数学中
6、整数相同。另外还有八进制、十六进制。,(,3,)整型变量的声明和初始化:一般情况下,变量用来保存程序运行过程中输入的数据、计算获得的中间结果以及程序的最终结果。一个变量在使用之前应该有一个名字,在内存中占据一定的存储单元,变量必须“先声明,后使用”。例如变量,r,声明的格式如下所示:,整型常量与整型变量 应用程序运行过程中需要处,变量的命名,变量名属于标识符,命名时,一定要符合标识符的命名规定,即只能由字母、数字和下划线三种字符组成,且第一个字符必须是字母或下划线。如下所示:,a,sum,_avg,b8,a_1,(合法变量名),1a,s um,$_avg,b8’,a_1#,(都
7、是不合法变量名),变量的命名 变量名属于标识符,命名时,一定要符合,算术运算符和表达式,(,1,)算术运算符,C,语言中的算术运算符主要用于执行加、减、乘、除等算术运算。算术运算符分为单目运 算符和双目运算符两类,如表,1.1,所示。 注意,1,:两个整型数据相除结果也是整型数据,即整除。 注意,2,:取余运算,%,,仅能用于整型数据,即运算量仅能是整数或整型变量。,,,,算术运算符和表达式(1)算术运算符,算术运算符和表达式,(,2,)表达式,表达式是用运算符、括号将操作数连接起来所构成的式子。,C,语言的操作数包括常量、变量和函数值等。特殊的情况,一个单个变量或常量也可叫做表达
8、式。,,,算术运算符和表达式(2)表达式,数据输出,,程序中的数据输入输出是指外界(例如用户等)与计算机之间的数据交换,从计算机把数据传给外界称之为输出。常用的数据输出是在显示器上显示信息,在,C,语言中,数据输入输出都是由库函数实现的。,(,1,),printf(),函数,,,printf(),是格式输出函数,是,C,语言中使用最频繁的输出函数。它是一个标准库函数,它 的函数原型在头文件“,stdio.h”,中。,printf,函数的调用格式如下:,数据输出 程序中的数据输入输出是指外界(例如用户等)与计算机,在,Visual Studio 2017,中运行,C,程序,在 Visual St
9、udio 2017 中运行 C 程序,任务一,—,任务实施,本任务:计算指定两个非零整数(,10,和,5,)之和、之差、之积、之商。,任务一—任务实施本任务:计算指定两个非零整数(10 和 5),任务一,—,任务拓展,拓展任务名称:指定长方形的长和宽,求长方形的面积。,任务一—任务拓展拓展任务名称:指定长方形的长和宽,求长方形的,任务二,任务二 随机输入的两个非零整数的基本运算,任务二 任务二 随机输入的两个非零整数的基本运算,scanf(),函数,scanf(),函数是一个标准库函数,它的函数原型在头文件“,stdio.h”,中。,scanf(),函数的一般格式如下所示::,,scanf()
10、 函数 scanf() 函数是一个标准库函数,,scanf(),函数格式说明,①该函数的功能是按用户指定的格式从键盘上把数据输入到指定的变量之中。,②格式控制字符串的作用与,printf(),函数相同,但不能显示非格式字符串,也就是不能显 示提示字符串。,③地址表列中给出各变量的地址。地址是由地址运算符“,&”,后跟变量名组成的。,④在使用,scanf(),函数输入数据时,遇到下面的情况时该数据认为结束:遇空格或按“回 车”键或“跳格”(,Tab,)键;按指定的宽度结束,如“,%3d”,,只取,3,列;遇到非法输入例如,&a,、,&b,,分别表示变量,a,和变量,b,的地址。这个地址就是编译系
11、统在内存中给,a,b,变量分配的地 址。在C语言中,使用了地址这个概念,这是与其他语言不同的。应该把变量的值和变量的地 址这两个不同的概念区别开来。变量的地址是,C,编译系统分配的,用户不必关心具体的地址 是多少。,scanf() 函数格式说明 ①该函数的功能是按用户指定的格,任务二,——,任务实施,本任务:由键盘输入,2,个非零整数,计算这,2,个整数之和、之差、之积、之商。运行结果:,任务二——任务实施本任务:由键盘输入 2 个非零整数,计算这,任务二,—,任务拓展,拓展任务名称:使用键盘输入长方形的长和宽,计算并输出长方形的面积。,任务二—任务拓展拓展任务名称:使用键盘输入长方形的长和宽
12、,计,任务三,任务三 随机输入的整数的基本运算,任务三 任务三 随机输入的整数的基本运算,关系运算符,关系运算符主要实现数据的比较运算,用于比较运算。包括大于,(>),、小于,(<),、大于等于,(>=),、小于等于,(<=),、等于,(==),和不等于,(!=),六种。由关系运算符将两个表达式连接起来的式子,就叫关系表达式。关系表达式的值是一个逻辑值,即“真”或“假”,分别用,1,和,0,表示。,C,语言中的关系运算符如下所示。,关系运算符关系运算符主要实现数据的比较运算,用于比较运算。包,关系运算符的优先级,,关系运算符都是双目运算符,其结合性均为左结合。关系运算符的优先级低于算术运算
13、 符,高于赋值运算符。 在六个关系运算符中,<,、,<=,、,>,、,>=,的优先级相同,高于,==,和,!=,,而,==,和,!=,的优先级相同。,关系运算符的优先级 关系运算符都是双目运算符,其结合性均为左,流程图,流程图是一种常用的算法图形表示方法。流程图是用具有特定涵义的图形符号(例如矩 形、菱形和平行四边形等)通过“流程线(,Flowline,)”连接而成的。它可以清晰地反映程序的执 行过程。流程图的常用图形符号,如下所示。,流程图 流程图是一种常用的算法图形表示方法。流,控制结构,所有的程序无论长短,都只采用,3,种基本程序控制结构,即顺序结构、选择结构和循环结 构。
14、这,3,种结构都具有如下特点:,只有一个入口;,只有一个出口;,每一条语句都应当有一条从入口到出口的路径通过,即每条语句都有机会被执行;,没有死循环。,控制结构所有的程序无论长短,都只采用 3 种基本程序控制结构,控制结构,—,顺序结构,(,1,)顺序结构 顾名思义,顺序结构就是按照程序中语句本身的先后次序,依次执行。如图 所示,先 执行,A,操作,,,再执行,B,操作,,,两者就是顺序执行的关系。,控制结构—顺序结构(1)顺序结构 顾名思义,顺序结构就是按照,控制结构,—,选择结构,在编写程序的时候,许多事情也是事先不固定的,例如,编写程序求任意值的绝对值函数,当自变量的值大于等于,0,时,
15、其值就是其本身;当自变量的值小于,0,时,其值就是其相反数。自变量的值到底是多少,在编写程序的时候是不知道的,所以在程序中必须有判断环节来确定执行不同操作。这种判断环节就是选择结构。选择结构是先判断指定的条件,再决定执行哪个语句,如下所示,当条件成立,即为真时,执行,A,;否则,执行,B,。注意,只能执行,A,或,B,之一。,控制结构—选择结构 在编写程序的时候,许多事情,控制结构,—,循环结构,循环结构分为当型循环结构和直到型循环结构两类。,当型循环结构是指先判断循环条件,当循环条件成立,即为逻辑真时,,,反复执行循环体;,当循环条件不成立,即为逻辑假时,停止循环,执行循环体后
16、面的语句,如下所示。,直到型循环结构是指先执行循环体,再判断循环条件是否成立,若成立,则反复执行循环,体;若不成立,则退出循环,执行循环体后面语句,如下所示。,控制结构—循环结构循环结构分为当型循环结构和直到型循环结构两,单一,if,结构,选择结构中最基本的分支结构是,if,语句,按形式分,if,语句可以分为单分支、双分支和多,分支等,单一,if,语句定义形式如下所示,,,,当上述中“表达式”值为“逻辑真”时,执行“语句”中内容。例如计算整型变量,x,的绝对值,示例代码如下所示:,单一if结构 选择结构中最基本的分支结构是,If-else,结构,if,语句的第二种形式为,if-
17、else,结构的双分支。其定义形式如下所示 :,,,,,当“表达式”值为“逻辑真”时,执行“语句,1”,;当“表达式”值为“逻辑假”时,执行“语句,2”,。例如,判断整型变量,x,是,5,,则输出“,right”,,否则输出“,error”,,示例代码如下所示:,If-else结构 if 语句的第二种形式为 if-,条件运算,条件运算符是,C,语言中唯一的三目运算符,要求有三个运算对象。由条件运算符组成的 表达式称为条件表达式,其格式如下:,,,①条件表达式的求值规则为:如果表达式,1,的值为真,则以表达式,2,的值作为条件表达式,的值,否则以表达式,3,的值作为整个条件表达式的值。,
18、②条件运算符的运算优先级低于关系运算符和算术运算符,但高于赋值符。因此条件表达式通常用于赋值语句之中,③条件运算符,?,和:是一对运算符,不能分开单独使用。,④条件运算符的结合方向是自右至左,条件运算 条件运算符是 C 语言中唯一的三目运算,任务三,—,任务实施,本任务:由键盘输入,2,个任意整数(考虑零不可以做除数),计算这,2,个整数之和、之差、之积、之商。,,任务三—任务实施 本任务:由键盘输入 2 个任意整,任务三,—,任务拓展,拓展任务名称:比较,x,、,y,的大小,如果,x,大则在屏幕中输出“,x>y”,,否则输出“,x<=y”,。,任务三—任务拓展拓展任务名
19、称:比较 x、y 的大小,如果 x,任务四 随机输入一个由两个整数组成的四则运算式,任务四 随机输入一个由两个整数组成的四则运算式,字符型变量及其输入输出,(,1,)字符型变量,字符型的类型名为,char,,声明字符型变量,ch,,语句如下:,,(,2,)用,scanf(),给字符型变量赋值,字符型的输入类型格式符号为“,c”,。例如,从键盘读取字符型变量,ch,的值,语句如下,,字符型变量及其输入输出(1)字符型变量,字符型变量及其输入输出,(,3,)字符输入函数,getchar(),getchar(),为无参函数,其功能就是由键盘获取一个字符型值,它的函数原型在头文件 “,stdio.
20、h”,中。具体格式如下:,,,①函数只能接收一个字符,其返回值就是输入的字符;,②该函数得到的字符可以赋给一个字符变量或整型变量,也可以不赋给任何变量,作为表 达式的一部分,示例代码如下所示:,字符型变量及其输入输出(3)字符输入函数 getchar(),字符型变量及其输入输出,(,4,)字符输出函数,putchar(),putchar(),函数是字符输出函数,其功能是在标准输出设备(显示器)上输出单个字符,使用时一般形式为:,,,(,5,)用,printf(),输出字符型变量的值,,用,printf(),在显示器上显示字符型变量,ch,的值,语句为:,字符型变量及其输入输出(4)字符输出函数
21、 putchar(),If,语句嵌套,在程序设计中经常遇到“,if,语句嵌套”“,switch,语句嵌套”“循环嵌套”等,“嵌套”在此的涵义是个语句里面又包含另外一个完整的语句。就像平常生活中有大盆中放小盆的现象,但应注意,一个大盆中可能放了一个中盆,而中盆中又放了一个小盆;也可能在大盆中并排放了两个小盆。不可能出现的是小盆一部分在大盆里,另一部分在大盆外,也就是说,一旦这种结构性“嵌套”就一定要包含另外一个完整的语句。,if,语句的嵌套是指在,if,语句中又包含一个或多个,if,语句。,例如,有一函数
22、 ,编写程序,其功能是对已知,x,求,y,程序说明 ①,if,和,else,后面的语句可以是复合语句。,,②注意,if,与,else,的配对原则,,else,总是与前面离它最近的没成对的,if,成对。,If语句嵌套 在程序设计中经常遇到“if 语句,任务四,—,任务实施,本任务:由键盘输入一个由,2,个整数组成的四则运算式。,任务四—任务实施本任务:由键盘输入一个由 2 个整数组成的四,任务四,—,任务拓展,拓展任务名称:已知输入某课程的百分制成绩,mark,,要求显示对应于,5,级制的评定。,任务四—任务拓展 拓展任务名称:已知输入某课程,任务五
23、随机输入十次由两个整数组成,的四则运算式,任务五 随机输入十次由两个整数组成,单层循环(,while,语句),,当事先未知循环次数,而根据条件来决定是否循环时,一般使用,while,语句来实现。,while,语句的一般形式如下所示,当“表达式”为非,0,值时,执行循环体中的语句,直到“表达式”为,0,时为止,,单层循环(while 语句) 当事先未知循环,任务五,—,任务实施,本任务:由键盘输入十次,2,个整数的四则运算式。,任务五—任务实施本任务:由键盘输入十次 2 个整数的四则运算,任务五,—,任务拓展,拓展任务名称:实现,100,以内整数求和。,任务五—任务拓展拓展任
24、务名称:实现 100 以内整数求和。,任务总结,本项目通过,3,个任务,介绍,C,语言程序中的基础语法。通过结合项目的学习,了解,C,语 言中浮点常量和变量的运用,学会,printf(),函数的调用格式,掌握结构体书序的使用方式,掌握 文件的概述和操作方式,为后续的学习稳固基础。,任务总结 本项目通过 3 个任务,介绍 C 语,第 一 章,第四章,,,目,绘制图形,,,项,,二,,企业级卓越人才培养,第 一 章第四章目绘制图形项二企业级卓越人才培养,学习目标,了解条件运算及表达式和函数在结构化程序设计中的重要意义,理解在解决问题过程中抽象出规律的重要性,掌握for语句及循环嵌套以
25、及程序功能设计,掌握三种循环语句的区别、联系以及使用情况,具有使用switch语句实现简单的菜单选择功能的能力,学习目标了解条件运算及表达式和函数在结构化程序设计中的重要意,学习路径,学习路径,任务一 使用无参函数,,实现根据不同内容输出不同图形,任务一 使用无参函数,,逻辑运算,(,1,)逻辑运算符的分类,,C语言中的逻辑运算符只有3个,即逻辑与(&&)、逻辑或(||)和逻辑非(!),其中逻辑与和逻辑或是双目运算符,逻辑非是单目运算符,。,,类别,运算符,含义,举例,双目,&&,逻辑与:只有参与运算的两个量都为真时,结果才为真,否则为假。,1>2 && 2>1,的值为,03>2 && 2
26、>1,的值为,11>2 && 2>3,的值为,02>1 && 1>2,的值为,0,,||,逻辑或:参与运算的两个量只要有一个为真,结果就为真。 两个量都为假时,结果为假。,1>2 || 2>1,的值为,13>2 || 2>1,的值为,11>2 || 2>3,的值为,02>1 || 1>2,的值为,1,单目,!,逻辑非:参与运算量为真时,结果为假;参与运算量为假时,结果为真。,!,1,的值是,0,!,0,的值是,1,逻辑运算 (1)逻辑运算符的分类 类别运算符含义举例双目&,逻辑运算,(,2,)逻辑运算符的优先级和结合性,,,三个逻辑运算符中,逻辑非“!”的优先级最高,具有右结合性,其次是逻辑
27、与“&&”,最后是逻辑或“||”,逻辑与和逻辑或都具有左结合性。它们的优先级为:!> && > ||。,当一个复杂的表达式中既有算术运算符、关系运算符,还有逻辑运算符时,它们之间的优先级如下: 算术运算符 > 关系运算符 > 逻辑运算符。,逻辑运算 (2)逻辑运算符的优先级和结合性,条件运算,条件运算符是C语言中唯一的三目运算符,要求有三个运算对象。由条件运算符组成的表达式称为条件表达式。条件表达式的一般格式如下:,,①条件表达式的求值规则为:若表达式1的值为真,则以表达式2的值作为条件表达式的值,否则以表达式3的值作为整个条件表达式的值。,②条件运算符?和:是一对运算符,不能分开单独使用。
28、,③条件运算符的运算优先级低于关系运算符和算术运算符,但高于赋值符。,④条件运算符的结合性是自右至左,例如条件表达式嵌套:a>b?a:c>d?c:d,应理解为a>b?a:(c>d?c:d)。,表达式,1?,表达式,2,: 表达式,3,条件运算 条件运算符是C语言中唯一的三目运算,for和do-while语句,,,(,1,)for语句简介,,C语言中的for语句使用最为灵活,它完全可以代替while语句,。,,其流程图和执行过程分析可以看出,,它相当于while循环中如下形式,,,for(,表达式,1;,表达式,2;,表达式,3) {,循环体,},表达式1;while(表达式2)
29、,{,循环体,表达式3;,},,for和do-while语句 (1)for语句简介for(,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(
30、i=0;;i++);,从0开始,1,2,3,……,不停向上递增,永不停止,for(;i<10;);,当i大于等于10时停止循环,此语句为死循环,for(;(ch=getchar())!='\n';printf("%c",ch));,从键盘读入字符,并输出,直到输入字符为回车键时为止,for和do-while语句 该语句的执行过程为:for,for和do-while语句,,,“表达式1”可以省略,但若使用循环控制变量,则应事先赋初值。,“表达式2”可以省略,则循环判断条件永为逻辑真,循环体中没有其他退出语句,则循环将无终止地进行下去。,“表达式3”可以省略,但一般应另外有使循环控制变量的值趋
31、向循环结束值的语句,以保证循环能正常结束。,三个表达式都可省略,但分号不能省略,表达式1中可以同时初始化多个变量,一般用逗号运算。,表达式2可以是任意表达式,只要其值为非零,就执行循环体。,表达式3可以是任意表达式,例如:逗号表达式、函数调用等。,for和do-while语句 “表达式1”可以省略,但若使,for和do-while语句,,,(,2,)do-while语句,一般格式,,,例如,编写程序进行帐号与密码检查,,直到帐号和密码输入正确为止,,do {,循环体,}while (,表达式,),;,for和do-while语句 (2)do-while语句d,for和do-while语句,
32、,,(,3,)三种循环语句的比较,三种循环一般情况下可以互相代替。,while和do-while循环语句中,循环变量初始化的操作应在while和dowhile语句之前完成;在while后面指定循环条件;在循环体中包含使循环趋于结束的语句(如i++,或i=i+1等)。而for语句可以在表达式1中实现循环变量的初始化;表达式2中是循环条件;表达式3中包含使循环趋于结束的操作,甚至可以将循环体中的操作全部放到表达式3中。for语句的功能更强,凡用while循环能完成的,用for循环都能实现。,while和do-while的区别有两点:①无论循环条件是否成立do-while语句的循环体至少执行一次,
33、而while语句的循环体可能一次都不执行;②while语句中,while()后面的分号可以有也可以没有,有和没有表示的含义不一样,多数情况下有分号会出现逻辑错误;do-while语句中,while()后面必须有分号,没有则出现语法错误。,,for和do-while语句 (3)三种循环语句的比较,for和do-while语句,,,(,4,)嵌套,循环嵌套是指一个循环体内又包含另一个完整的循环结构,三种循环语句(while循环、do-while循环和for循环)可以互相嵌套,并且可以多层嵌套。,,for和do-while语句 (4)嵌套,函数概述,(,1,)函数简介,,C语言的结构有一个特点,
34、它是由一个个被称为函数的程序块组成的。C源程序是由函数组成的。虽然在前面各章的程序中大都只有一个主函数main),但应用程序往往是由多个函数组成。函数是C源程序的基本结构,通过对函数的调用实现特定的功能。C语言不仅提供了极为丰富的库函数,还允许用户建立自己定义的函数。用户可把自己的算法编成一个个相对独立的函数结构,然后用调用的方法来使用函数。可以说C程序的全部工作都是由各式各样的函数完成的。比如我们先前使用的输入输出函数等。,函数概述 (1)函数简介,函数概述,(,2,)函数的优势,对于每一个函数单独编写和调试,可以简化程序设计。,函数的逻辑简单、明确,可以增加程序的可读性,方便维护与调试。,
35、采用函数编程,C语言程序易于实现结构化程序设计,从而使程序的层次结构清晰。,可以像搭积木一样,把不同函数进行相应组合,实现一个完整的应用程序。函数的重复使用,可以避免重复劳动,提高软件开发效率。,函数具有模块化功能,一个程序由功能不同的函数组成,可以分别编写,利于团队开发,能加快程序开发速度。,当程序需要扩充新功能时,也不会涉及整个程序的修改,从而使程序具有良好的可维护性和可用性。,函数概述 (2)函数的优势,函数概述,(,3,)函数的分类,根据函数的概念我们可以对函数进行分类,在C语言中可从不同的角度对函数分类,从函数定义的角度看,函数可分为库函数和用户定义函数两种。,①库函数,由C系统提供
36、,用户无须定义, 也不必在程序中作类型说明,只需在程序前包含有该函数原型的头文件即可在程序中直接调用。例如,在之前的示例中反复用到printf()、scanf()、getchar()等函数均属此类。,C语言提供了多种库函数,不仅数量多,而且有的还需要硬件知识才会使用,因此要想全部掌握则需要一个较长的学习过程。应首先掌握一些最基本、最常用的库函数,再逐步深入。由于篇幅关系,本书只介绍了很少一部分库函数,其余部分可根据需要查阅有关手册。,函数概述 (3)函数的分类,函数概述,①库函数,常用数学库函数
37、 常用其他库函数,,函数声明,功能,int abs(int i) ;,求整数的绝对值,double acos(double x) ;,反余弦函数,double asin(double x) ;,反正弦函数,double atan(double x) ;,反正切函数,double ceil(double x);,向上舍入,double cos(double x);,余弦函数,double exp(double x);,指数函数,doub
38、le log(double x);,对数函数ln(x),double log10(double x);,对数函数log,double pow(double x, double y);,指数函数(x的y次方),double pow10(int p);,指数函数(10的p次方),double sin(double x);,正弦函数,double sqrt(double x) ;,计算平方根,函数声明,功能,void *calloc(size_t nelem, size_t elsize);,分配主存储器,void *malloc(unsigned size);,内存分配函数,int random(
39、int num);,随机数发生器,unsigned sleep(unsigned seconds);,执行挂起一段时间,void srand(unsigned seed);,初始化随机数发生器,logn time(long *tloc);,取一天的时间,函数概述 ①库函数函数声明功能int abs(int i),函数概述,②用户自定义函数,由用户按实际需要编写的函数。对于用户自定义函数,不仅要在程序中定义函数本身,而且一般在主调函数模块中还必须对该被调函数进行类型说明,然后才能使用。,从主调函数和被调函数间数据传送的角度看又可分为无参函数和有参函数两种。,①无参函数,函数定义、函数说明及函数调
40、用中均不带参数,主调函数和被调函数之间不进行参数传送。此类函数通常用来完成一组指定的功能,可以返回或不返回函数值。,②有参函数,也称为带参函数。在函数定义及函数说明时都有参数,称为形式参数(简称为形参)。在函数调用时也必须给出参数,称为实际参数(简称为实参)。进行函数调用时,主调函数将把实参的值传送给相应形参,供被调函数使用。,C语言的函数兼有其它语言中的函数和过程两种功能,从这个角度看,又可把函数分为有返回值函数和无返回值函数两种。,①有返回值函数,此类函数被调用执行完后将向调用者返回一个执行结果,称为函数返回值。比如数学函数即属于此类函数。由用户定义的这种有返回值的函数,必须在函数定义和函
41、数说明中明确返回值的类型,有返回值的函数定义如下所示:,②无返回值函数,此类函数用于完成某项特定的处理任务,执行完成后不向调用者返回函数值,这类函数类似于其它语言的过程。由于函数无须返回值,用户在定义此类函数时可指定它的返回为“空类型”,空类型的说明符为“void”。,函数概述 ②用户自定义函数,函数声明,,在一个函数中被调用的函数(即被调用函数)需要具备如下条件:,(1)被调用的函数必须是已经存在的函数(是库函数或用户自定义函数)。,(2)如果使用库函数,一般应在文件开头用#include命令包含头文件。,如果使用用户自己定义的函数,尤其是主调函数在前,被调函数定义在后时,必须在主调函数中对
42、被调用函数进行函数声明。函数声明,也称函数原型,其一般格式如下所示:,,,,数据类型 函数名(形参类型1 形参1,形参类型2 形参2,……,)或者:函数类型 函数名(形参类型1,形参类型2,……,),函数声明 在一个函数中被调用的函数(即被调用函数)需要具备如,函数的定义,函数的定义可以位于源程序中预处理命令(以,#,开始的命令)之后的任何位置。,C,语言函数定义,ANSI,格式如下:,,,函数定义一般有两部分组成:函数首部和函数体。函数首部包括:,数据类型,是指函数的类型,即函数返回值的类型。函数可以有返回值,也可以没有返回值。若没有返回值时,数据类型为,void,;若在函数首部没有“数据类
43、型”项,则表示函数返回值类型为,int,。,函数名,是指由用户定义的标识符,它应该符合标识符起名规则,并且最好能“见名思义”。,参数列表,在每个函数名的后面紧跟一对括号,注意:即使是无参函数该括号也不能缺省。若是有参函数,则分别声明每一个形参,形参之间用逗号分隔。,函数体,被一对花括号括起来,通过函数体中的语句来实现函数的功能。一般函数体又是由声明部分和执行部分组成的。声明部分往往用于声明属于该函数的局部变量和该函数要调用的其他用户自定义函数。执行部分就是由各个所需的执行语句组成。,,,[数据类型] 函数名([形参类型1 形参1,形参类型2 形参2,,……,]) /*函数首部*/{ 函
44、数体;},函数的定义函数的定义可以位于源程序中预处理命令(以#开始的命,无参函数的调用,(,1,)函数调用过程,,函数只有仅当被程序调用的时候,函数中的语句才会被执行。调用函数时,程序可以通过一个或多个参数给它传递信息。参数是程序传递给函数的数据,函数可以使用这些数据执行任务。然后执行函数中的语句,完成被设计的任务。函数中的语句执行完毕后,控制权将返回调用函数的地方。函数能够以返回值的形式将信息返回给程序,。,无参函数的调用(1)函数调用过程,无参函数的调用,(,2,)函数调用形式,,函数调用的一般格式如下所示:,,在函数调用时应注意:,① 函数名后的“实参表列”可以省略,但()不能省略。,②
45、 实参表列可以包含多个实参,各参数间用逗号分隔。,③ 实参与形参一一对应,实参与形参的个数应相等,类型应一致或相兼容,在调用函数时实参把值传递给对应的形参。,④ 实参表列中的参数可以是常量、变量、表达式或函数。在进行函数调用时,实参必须具有确定的值,以便把这些值传递给相应形参。因此应预先用赋值、输入等方法使实参获得确定值。,函数名(实参表列);,无参函数的调用(2)函数调用形式 函数名(实参表列);,无参函数的调用,(,3,)函数调用的方式,,①,函数作为一个单独的语句。把函数调用作为一个语句,不要求函数有返回值。一般格式如下所示,,②函数作为表达式中的一项出现在表达式中。函数出现在一个表
46、达式中,要求函数带回一个确定的值。一般格式如下所示:,,③函数作为调用另一个函数时的实参一般格式如下所示:,,函数名(实参表列);,变量名=函数表达式;,result=fun4(fun4(number1,number2),number1);/*函数实参,先计算fun4(number1,number2),再把其返回作为实参 */,无参函数的调用(3)函数调用的方式函数名(实参表列);变量名,任务二 使用有参函数,分别显示不同图形,任务二 使用有参函数,分别显示不同图形,有参函数的调用,(,1,)函数调用过程,所有程序都是从main()开始执行,遇到函数调用时,把当前断点地址压入堆栈,执行被调
47、用函数,当被调用函数执行结束之后,由堆栈中弹出主调函数断点地址,继续执行主调函数后面的语句,.,,int add(int,int); /*函数声明*/,main(),{,int sum;,sum=add(10,20);,,sum=add(30,40);,},int add(int a,int b),{,return a+b;,},①,⑤,⑨,②,③,⑥,④,⑤⑥⑦⑧⑨,⑧,⑦,有参函数的调用(1)函数调用过程 int add(int,i,有参函数的调用,(,2,)函数的调用形式,,函数调用的一般格式如下所示:,,在函数调用时应注意:,① 函数名后的“实参表列”可以省略,但()不能省略。,②
48、 实参表列可以包含多个实参,各参数间用逗号分隔。,③ 实参与形参一一对应,实参与形参的个数应相等,类型应一致或相兼容,在调用函数时实参把值传递给对应的形参。,④ 实参表列中的参数可以是常量、变量、表达式或函数。在进行函数调用时,实参必须具有确定的值,以便把这些值传递给相应形参。因此应预先用赋值、输入等方法使实参获得确定值。,,函数名(实参表列);,有参函数的调用(2)函数的调用形式 函数名(实参表列);,有参函数的调用,(,3,)函数调用的方式,①函数作为一个单独的语句。把函数调用作为一个语句,不要求函数有返回值。一般格式如下所示:,,②函数作为表达式中的一项出现在表达式中。函数出现在一个
49、表达式中,要求函数带回一个确定的值。一般格式如下所示:,,③函数作为调用另一个函数时的实参一般格式如下所示:,,函数名(实参表列);,变量名=函数表达式;,result=fun4(fun4(number1,number2),number1);/*函数实参,先计算fun4(number1,number2),再把其返回作为实参 */,有参函数的调用(3)函数调用的方式 函数名(实参表列);变量,形参与实参,,函数的形参和实参具有以下特点:,(1) 形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只有在函数内部有效。,(2) 函数调用是数据单向值传递,即只能把
50、实参的值传送给形参,而不能把形参的值反向地传送给实参。因此在函数调用过程中,形参的值可以发生改变,而实参的值不会随之变化。,,形参与实参,任务三 设计主菜单,由用户选择不同图形,任务三 设计主菜单,由用户选择不同图形,switch语句,switch语句是开关语句,也称多分支选择语句,用来实现多分支选择结构。 其一般格式如下所示:,,switch (表达式) {,case 常量表达式1:语句1,case 常量表达式2:语句2,…,,case 常量表达式n:语句n,default :语句n+1,},switch语句 switch语句是开关语句,switch语句,(1) s
51、witch后面括弧内的“表达式”只能是整型或字符型表达式。为什么?因为前面讲过,float和double类型的值进行“等于”或“不等”的判断往往是没有意义的。,(2) 每一个case的常量表达式的值必须互不相同。,(3) case语句必须以冒号结尾。,(4) 各个case和default的出现次序可以是任意的。,(5) 执行完一个case后面的语句后,流程控制转移到下一个case继续执行。,(6) break语句:终止switch语句的执行,使流程跳出switch结构。例如:当score的值为85时,s的值是8,则执行printf("B\n"),遇到break就不接着执行下面的语句,而是直接退
52、出switch结构。,(7) 在case后面中虽然包含一个以上执行语句,但可以不必用花括弧括起来,会自动顺序执行本case后面所有的执行语句。当然加上花括弧也可以。,(8) 多个case可以共用一组执行语句。例如:,当s的值为10和9时都执行同一组语句。,(9) 在一个switch语句中,最多只能有一个default子句。,,,case 10:case 9: printf(,",A\n,",);break;,switch语句(1) switch后面括弧内的“表达式”只,函数的返回值,函数的返回值是指函数被调用之后,执行函数体中的程序段所取得的并返回给主调函数的值。例如:调用数学函数时都会取得相
53、应的值。函数的值只能通过return语句返回主调函数。return语句的一般格式为:,,return语句中的“()”可有可无。该语句的功能是计算表达式的值,并返回给主调函数。 在函数中允许有多个return语句,但每次调用只能有一个return 语句被执行,因此只能返回一个函数值。若函数中没有return语句,则不能带回一个确定的、用户所希望得到的函数值,而是带回的是一个不确定的值。函数值的类型和函数定义中函数的类型应保持一致,若两者不一致,则以函数类型为准,自动进行类型转换。若函数值为int,在函数定义时可以省去类型说明。不返回函数值的函数,可用void定义为“空类型”,一旦函数被定义为空类
54、型后,就不能在主调函数中使用被调函数的函数值,否则系统报错。为了使程序有良好的可读性并减少出错,凡不要求返回值的函数都应定义为空类型void。,,,return 表达式; 或者 return (表达式);,函数的返回值 函数的返回值是指函数被调用之后,,任务四 函数的嵌套调用,任务四 函数的嵌套调用,函数嵌套调用,函数之间允许相互调用,也允许嵌套调用。main()是主函数,它可以调用其他函数,而不允许被其它函数调用。函数嵌套调用是指在调用一个函数的过程中,又调用另一个函数。函数嵌套调用正好符合前面所说的结构化程序设计思想,即顶层函数调用第二层函数,第二层函数再调第三层
55、函数,……,直到最底层。,,函数嵌套调用函数之间允许相互调用,也允许嵌套调用。main,循环跳出语句,(1)break语句,break 语句有两种用途,可以使用它来终止 switch 语句中的 case 语句,保证多路分支情况的正确执行;也可以使用它来强迫程序立即退出一个循环,跳过正常的循环条件测试(相当于本层循环的断路)。,当在 do…while、for、while 循环语句中遇到 break 语句,循环立即终止,程序转入循环后的下一条语句开始执行。,,循环跳出语句(1)break语句,循环跳出语句,(,2,)continue 语句,continue语句有点像break语句,continue
56、语句仅能用于循环语句中,但它并不能终止本层循环,而只是绕过本次循环,即continue只能跳过循环体中continue后面的语句,强行进入下一次的循环(相当于本次循环的短路)。,,循环跳出语句(2)continue 语句,任务总结,,本项目通过,4,个任务,编写程序绘制由“*”组成的不同图形,介绍设计C语言程序的一种最基本思路——学会找规律,以及理解函数在程序中的作用,,并,掌握三种循环语句的区别、联系以及使用情况。,任务总结 本项目通过 4 个任务,编写程序绘制,第 一 章,第四章,,,目,万年历,,,项,,三,,企业级卓越人才培养,第 一 章第四章目万年历项三企业级卓越人才培
57、养,学习目标,了解符号常量的用法,掌握一维数组的定义和使用,掌握二维数组及字符数组的定义和使用,掌握逻辑运算,学会编写复杂条件,具备函数嵌套调用,及函数之间数据传输的能力,学习目标了解符号常量的用法,学习路径,学习路径,任务一,,在屏幕上显示2019年1月的日历,每行一周,任务一,符号常量的定义,,符号常量在使用之前必须先定义,其一般格式为:,,,,,其中#define是一条预处理命令(预处理命令都以"#"开头),称为宏定义命令,其功能是把该标识符定义为其后的常量值。一经定义,以后在程序中所有出现该标识符的地方均代之以该常量值(双引号括起的除外),,#define 标识符(符号常量名) 常量值
58、,符号常量的定义 符号常量在使用之前必须先定义,其一般,逻辑运算,(,2,)逻辑运算符的优先级和结合性,,,三个逻辑运算符中,逻辑非“!”的优先级最高,具有右结合性,其次是逻辑与“&&”,最后是逻辑或“||”,逻辑与和逻辑或都具有左结合性。它们的优先级为:!> && > ||。,当一个复杂的表达式中既有算术运算符、关系运算符,还有逻辑运算符时,它们之间的优先级如下: 算术运算符 > 关系运算符 > 逻辑运算符。,逻辑运算 (2)逻辑运算符的优先级和结合性,使用符号常量的原因,对于一个成熟的程序员来说,在一个程序中,反复多次使用的常量,都定义为符号常量,这是为什么呢?这主要是因为在程序
59、中使用符号常量有明显的好处。,,(1) 见名知意,清晰明了。为了便于记忆,常常用一个能够表示意义的单词或字母组合来为符号常量命名,增强了程序的可读性。,(2) 避免反复书写,减少出错率。如果一个程序中多次使用一个常量,就要多次书写,而定义了符号常量,只需要书写一次数值,在使用的地方用符号替代就可以了,能够有效地减少出错概率。,(3) 一改全改,方便实用。当程序中多次出现同一个常量需要修改时,必须逐个修改,很可能出错。而用符号常量,在需要修改时,只需修改定义,就可以做到“一改全改”,非常方便。,使用符号常量的原因 对于一个成熟的程序员来说,任务二 并排显示2019年前3个月的
60、日历,,每行显示每个月的同一周,任务二 并排显示2019年前3个月的日历,,为什么要用数组,,,,C语言引入了数组的概念,是为了方便在计算机中描述事物的某些特征及这些特征之间的联系。数组相当于是由若干数据类型相同的变量组成的一个有序的集合,可以通过一个统一的数组名称和一个位置编号的方式来访问数组中的数据。下面通过介绍一个整型一维数组a,该数组中包含10个元素,用来表示10个学生成绩。,,,,,,,通过数组名及其后面方括号[]内的下标,就可以引用数组中该元素。数组中第一个元素是下标为0的元素。因此,数组a的第1个元素记为a[0],数组a的第2个元素记为a[1],依次类推,数组a的第10个元素
61、记为a[9],一般来说,数组a的第n个元素记为a[n-1],,,为什么要用数组 C语言引入了数组的概念,,一维数组的引用,,,声明了数组以后,如何来使用数组中的元素呢?C语言规定只能逐个引用数组元素而不能一次引用整个数组, 数组元素是组成数组的基本单元。数组元素也是一种变量,其标识方法为在数组名后跟一个下标,下标表示了元素在数组中的顺序号。一维数组的引用格式如下:,,引用一维数组时应注意:,(1) 数组名是表示要引用哪一个数组中的元素,这个数组必须已经声明。,(2) 下标用一对中括号[]括起来,它表示要引用数组中的第几个元素,可以是变量表达式也可以是常量表达式。如为小数时,
62、C编译将自动取整。举例如下代码所示,:,数组名[下标],num[3];,num[i+j];,num[i++];,一维数组的引用 声明了数组以后,如何来使用,一维数组的引用,,,(3) C语言规定,数组下标从0开始。一个含有n个元素的数组,数组下标的取值范围为[0,n-1],举例如下代码所示:,,,,,其中,整型数组num的下标只能取0、1、2三个值,即可以引用数组元素num[0]、num[1]、num[2]。,,如将上述程序段中第二行改为:num [3] =k;则错误,引用num[3]是超界的,它表示数组中的第四个元素。C语言编译时并不指出“下标超界”的错误,而是把num[2
63、]下面一个单元的内容作为num[3]引用,从而引起程序潜在的错误。因此,引用数组元素时要特别小心。,,int num[3],k=10;num[0]=k;,一维数组的引用 (3) C语言规定,数组下标从0开始。一个,一维数组的初始化,,,与使用变量一样,一维数组在使用之间必须进行声明。一维数组的声明格式如下:,,,,数据类型 数组名[常量表达式];,(1),数据类型用来声明数组中各个数据元素的类型,如,int,、,float,、,char,等。在任何一个数组中,数据元素的类型都是一致的。,(2),数组名的命名规则与变量名的命名规则一样。,(3),数组名中存放的是一个地址常量,它代表整个数组的首
64、地址。同一数组中的所有元素,在内存单元中按其下标的顺序占用一段连续的存储单元。一维数组的逻辑结构与存储结构是相同的,数组,a,的存储结构为:,,,,(4) 常量表达式的值表示数组元素的个数。常量表达式必须是整数或者整数表达式而不能有变量。常量表达式是放在一对中括号[]中。,一维数组的初始化 与使用变量一样,一维数组在使用之间必须进,一维数组的初始化,,,数组声明后,必须对其元素进行初始化。数组初始化是指在数组声明时给数组元素赋予初值。可以在运行时显示地初始化数组,也可以像普通变量一样,在声明数组同时初始化数组元素。这种方法是在编译阶段进行的,可以减少运行时间,提高效率。一维数组的初始格式如下
65、:,,,,数据类型 数组名[常量表达式]={初值表},一维数组的初始化 数组声明后,必须对其元,任务三,,显示2019年全年日历,每3个月一排,,每行显示相邻3个月的同一周,任务三,二维数组的声明,,具有多个下标的数组称为多维数组,其中最常用的是二维数组,主要用来表示数值表格。二维数组的声明格式如下:,,,,声明二维数组时应注意:,(1) 与一维声明基本相同,只多了一个常量表达式,表示二维。第一个常量表达式为行下标,声明了这个数组的行数,第二个常量表达式为列下标,声明了每行的列数。因此,元素个数=行数*列数。如上面二维数组a由3×4=12个元素组成。,,,,数据类型 数组
66、名[常量表达式] [常量表达式];,二维数组的声明 具有多个下标的数组称为多维数,二维数组的声明,(2) C语言把二维数组看成是一维数组,基元素又是一个一维数组。例如,a有三个元素a[0],a[1]和a[2],它们各自又可以看作为一个包含5个元素的一维数组,,,,,,(3) 二维数组的元素在内存中按线性方式存放,即按行存放,先存放第一行的元素,再存放第二行的元素。数组a的存放顺序为:,,,a[0][0] →a[0][1] →a[0][2] →a[0][3] →a[1][0] →a[1][1] →a[1][2],……,→a[2][3],二维数组的声明(2) C语言把二维数组看成是一维数组,基元素,二维数组的引用,,二维数组的引用格式如下:,,,,,引用二维数组元素时,对数组下标的值要求与引用一维数组相同,即行或列下标表达式的值只能从0到数组所规定的下标上界之间的整数。,,数组名[下标],二维数组的引用 二维数组的引用格式如下:数组名[下标],二维数组的初始化,,,在声明二维数组同时,可以用下列方法给数组元素初始化:,(1) 按存放顺序,举例如下:,二维数组的初始化 在
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。