《C语言总复习(二)课件.ppt》由会员分享,可在线阅读,更多相关《C语言总复习(二)课件.ppt(73页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第第第4 4 4 4章章章章 程序的控制结构程序的控制结构程序的控制结构程序的控制结构2023/2/22内容提要内容提要内容提要内容提要 算法的描述方法算法的描述方法 基本控制结构基本控制结构 基本控制语句基本控制语句 常用算法,如累加、累乘、统计、递推、常用算法,如累加、累乘、统计、递推、迭代、穷举等迭代、穷举等 程序的基本版式程序的基本版式 结构化程序设计的基本思想结构化程序设计的基本思想2023/2/23算法的表示方法算法的表示方法算法的表示方法算法的表示方法 自然语言表示自然语言表示 传统的流程图表示传统的流程图表示 N-S结构化流程图表示结构化流程图表示 伪代码表示伪代码表示202
2、3/2/24 N-SN-SN-SN-S流程图用以下的流程图符号:流程图用以下的流程图符号:流程图用以下的流程图符号:流程图用以下的流程图符号:(1)顺序结构(2)选择结构(3)循环结构5管理系统计算机模拟条件语句条件语句条件语句条件语句if if if if(表达式)(表达式)(表达式)(表达式)语句语句语句语句if if if if(表达式)(表达式)(表达式)(表达式)语句语句语句语句1 1 1 1 else else else else 语句语句语句语句2 2 2 2if if if if(表达式(表达式(表达式(表达式1 1 1 1)语句)语句)语句)语句1 1 1 1 else if
3、 else if else if else if(表达式(表达式(表达式(表达式2 2 2 2)语句语句语句语句2 2 2 2else else else else 语句语句语句语句3 3 3 3开关语句开关语句开关语句开关语句4.3 4.3 选择结构选择结构2023/2/264.3 4.3 选择结构:条件语句选择结构:条件语句选择结构:条件语句选择结构:条件语句例:例:if(score=90)if(score=90)range=1;range=1;else else if(scoreif(score=80)=80)range=2;range=2;else else if(scoreif(sc
4、ore=70)=70)range=3;range=3;else else if(scoreif(score=60)=60)range=4;range=4;else else range=5;range=5;2023/2/27练习练习练习练习 3.判断闰年判断闰年year year能被能被4整除但不能被整除但不能被100整除整除 能被能被400整除整除2023/2/28 关系运算符和逻辑运算符关系运算符和逻辑运算符 条件条件p:逻辑表达式:逻辑表达式 真假的判断真假的判断非非非非0 0即为真即为真即为真即为真if (a)if (a)printf(“OKprintf(“OK!”);!”);x=-5
5、;if (x)x=-5;if (x)printf(“OKprintf(“OK!”);!”);y=0;if (y=0)y=0;if (y=0)printf(“OKprintf(“OK!”);!”);y=0;if (y)y=0;if (y)printf(“OKprintf(“OK!”);!”);2023/2/29switchswitch 多路选择多路选择多路选择多路选择 switchswitch(表达式表达式表达式表达式)casecase 常数常数常数常数1:1:语句序列语句序列语句序列语句序列1;1;casecase 常数常数常数常数2:2:语句序列语句序列语句序列语句序列2;2;default
6、default:语句序列语句序列语句序列语句序列3;3;defaultdefault可以没有,但最好不省略可以没有,但最好不省略可以没有,但最好不省略可以没有,但最好不省略 不要忘记不要忘记不要忘记不要忘记breakbreak2023/2/210 注意:注意:常量常量n仅起语句标号作用,不做求值判断仅起语句标号作用,不做求值判断 常量常量n的值必须是惟一的,没有先后次序的值必须是惟一的,没有先后次序 多个多个case语句可以共用一组执行结果语句可以共用一组执行结果2023/2/211循环循环循环循环whilewhile,forfor while(表达式表达式)语句语句;固定?固定?变化?变化?
7、2023/2/212whilewhile int k=1,s=0;while(k=100)s=s=s+ks+k;k+;k+;循环控制表达式循环控制表达式循环控制变量(循环控制变量(k k)循环体循环体2023/2/213 注意:注意:循环体出现多条语句,应以复合语句的形循环体出现多条语句,应以复合语句的形循环体出现多条语句,应以复合语句的形循环体出现多条语句,应以复合语句的形式出现式出现式出现式出现循环前必须给循环控制变量赋初值循环前必须给循环控制变量赋初值循环前必须给循环控制变量赋初值循环前必须给循环控制变量赋初值循环体中,必须有改变循环控制变量值的循环体中,必须有改变循环控制变量值的循环体
8、中,必须有改变循环控制变量值的循环体中,必须有改变循环控制变量值的语句语句语句语句循环体可以为空循环体可以为空循环体可以为空循环体可以为空while while((c=(c=getchargetchar()!=A()!=A);2023/2/214dodo-whilewhile do 语句语句;while(表达式表达式);首先执行首先执行语句语句,然后判断,然后判断表达式表达式的值。的值。如果表达式为如果表达式为0,继续向下执行,否则,继续向下执行,否则,再次执行再次执行语句语句,再次判断,再次判断表达式表达式的值的值 语句语句会被至少执行一次会被至少执行一次 最后分号不可省略!最后分号不可省略
9、!2023/2/215循环循环循环循环whilewhile,forfor for(表达式表达式1;表达式表达式2;表达式表达式3)语句语句;2023/2/216选择三种循环的一般原则选择三种循环的一般原则选择三种循环的一般原则选择三种循环的一般原则 如果循环次数已知,用如果循环次数已知,用for 如果循环次数未知,用如果循环次数未知,用while 如果循环体至少要执行一次,用如果循环体至少要执行一次,用do-while 这只是这只是“一般一般”原则,不是原则,不是“原则原则”2023/2/217合法的嵌套循环合法的嵌套循环合法的嵌套循环合法的嵌套循环2023/2/218for(i=0;i3;i
10、+)printf(“i=%d:”,i);for(j=0;j4;j+)printf(“j=%-4d”,j);printf(“n”);2023/2/219现场编程完成例现场编程完成例现场编程完成例现场编程完成例4.14 4.14 编程输出如下形式的乘法九九表编程输出如下形式的乘法九九表 2023/2/220#include main()int m,n;for(m=1;m10;m+)printf(%4d,m);/*打印表头打印表头*/printf(n);for(m=1;m10;m+)printf(-);printf(n);for(m=1;m10;m+)for(n=1;n10;n+)printf(%4
11、d,m*n);printf(n);2023/2/221现场编程完成例现场编程完成例现场编程完成例现场编程完成例4.164.16 马克思手稿中有一道趣味数学题:有马克思手稿中有一道趣味数学题:有30个人,个人,其中有男人、女人和小孩,在一家饭馆里吃其中有男人、女人和小孩,在一家饭馆里吃饭共花了饭共花了50先令,每个男人各花先令,每个男人各花3先令,每个先令,每个女人各花女人各花2先令,每个小孩各花先令,每个小孩各花1先令,问男先令,问男人、女人和小孩各有几人?人、女人和小孩各有几人?解方程组解方程组 穷举穷举法法2023/2/222breakbreak和和和和continuecontinue假假
12、真真break表达式1表达式2循环语句的下一条语句循环语句的下一条语句假假真真 contiue表达式1表达式2continue2023/2/223这一章我们学习了这一章我们学习了这一章我们学习了这一章我们学习了 算法的描述方法算法的描述方法算法的描述方法算法的描述方法流程图流程图流程图流程图 与基本控制结构相应的结构化的控制语句与基本控制结构相应的结构化的控制语句与基本控制结构相应的结构化的控制语句与基本控制结构相应的结构化的控制语句if-elseif-elseswitchswitchforforwhilewhiledo-whiledo-whilebreakbreakcontinueconti
13、nue 常用算法,如常用算法,如常用算法,如常用算法,如累加、累乘、统计累加、累乘、统计累加、累乘、统计累加、累乘、统计、递推、迭代、穷举、递推、迭代、穷举、递推、迭代、穷举、递推、迭代、穷举等等等等2023/2/224这一章我们学习了这一章我们学习了这一章我们学习了这一章我们学习了 常用算法常用算法 求阶乘求阶乘:数据类型的定义数据类型的定义数据类型的定义数据类型的定义,long,long或或或或doubledouble 求累加和求累加和:long 统计统计:统计正数、平均分以上、统计正数、平均分以上、统计正数、平均分以上、统计正数、平均分以上、n n个成绩中个成绩中个成绩中个成绩中1009
14、010090、89808980、79707970、69606960、60?:););2023/2/237(2 2)函数的返回值应当属于某一个确定的类型,在定函数的返回值应当属于某一个确定的类型,在定义函数时指定函数返回值的类型。义函数时指定函数返回值的类型。例如例如:下面是下面是3个函数的首行:个函数的首行:int max(float,float)/*函数值为整型*/char letter(char c1,char c2)/*函数值为字符型*/double min(int,int)/*函数值为双精度型*/注意:注意:凡不加类型说明的函数,自动按整型处理。2023/2/238(3 3)在定义函数
15、时指定的函数类型一般应该和在定义函数时指定的函数类型一般应该和returnreturn语句中的表达式类型一致。语句中的表达式类型一致。如果函数值的类型和如果函数值的类型和return语句中表达式的值不一语句中表达式的值不一致,则以函数类型为准。致,则以函数类型为准。对数值型数据,可以自动进行类型转换。即函数对数值型数据,可以自动进行类型转换。即函数类型决定返回值的类型。类型决定返回值的类型。(4 4)对于不带回值的函数,应当用)对于不带回值的函数,应当用“voidvoid”定义函数定义函数为为“无类型无类型”(或称(或称“空类型空类型”)。此时在函数体中)。此时在函数体中不得出现不得出现ret
16、urnreturn语句。语句。2023/2/239函数调用(函数调用(函数调用(函数调用(callcall)单向值传递单向值传递 调用函数时,必须提供所有的参数调用函数时,必须提供所有的参数printfprintf和和和和scanfscanf是采用变长变量表定义的函数,是采用变长变量表定义的函数,是采用变长变量表定义的函数,是采用变长变量表定义的函数,所以变量的个数不固定。所以变量的个数不固定。所以变量的个数不固定。所以变量的个数不固定。提供的参数个数、类型、顺序与定义时相同提供的参数个数、类型、顺序与定义时相同 有返回值时有返回值时放到一个数值表达式中,如放到一个数值表达式中,如放到一个数值
17、表达式中,如放到一个数值表达式中,如c=c=max(a,bmax(a,b););作为另一个函数调用的参数,如作为另一个函数调用的参数,如作为另一个函数调用的参数,如作为另一个函数调用的参数,如 c=c=max(max(a,b),cmax(max(a,b),c););printf(printf(%dn%dn,max(a,bmax(a,b););无返回值时无返回值时函数调用表达式,如函数调用表达式,如函数调用表达式,如函数调用表达式,如display(a,bdisplay(a,b););2023/2/240变量的作用域变量的作用域变量的作用域变量的作用域 指在源程序中定义变量的位置及其能被读写指在
18、源程序中定义变量的位置及其能被读写访问的范围访问的范围 分为分为局部变量(局部变量(局部变量(局部变量(Local VariableLocal Variable)全局变量全局变量全局变量全局变量(Global Variable)(Global Variable)2023/2/241局部变量局部变量局部变量局部变量 局部变量局部变量在语句块内定义的变量在语句块内定义的变量在语句块内定义的变量在语句块内定义的变量形参也是局部变量形参也是局部变量形参也是局部变量形参也是局部变量定义时不会自动初始化,除非程序员指定初定义时不会自动初始化,除非程序员指定初定义时不会自动初始化,除非程序员指定初定义时不会
19、自动初始化,除非程序员指定初值值值值进入语句块时获得内存,仅能由语句块内语进入语句块时获得内存,仅能由语句块内语进入语句块时获得内存,仅能由语句块内语进入语句块时获得内存,仅能由语句块内语句访问,退出语句块时释放内存,不再有效句访问,退出语句块时释放内存,不再有效句访问,退出语句块时释放内存,不再有效句访问,退出语句块时释放内存,不再有效 并列语句块各自定义的同名变量互不干扰并列语句块各自定义的同名变量互不干扰并列语句块各自定义的同名变量互不干扰并列语句块各自定义的同名变量互不干扰 2023/2/242全局变量全局变量全局变量全局变量 全局变量全局变量在所有函数之外定义的变量在所有函数之外定义
20、的变量在所有函数之外定义的变量在所有函数之外定义的变量在程序中定义它的位置以后都有效在程序中定义它的位置以后都有效在程序中定义它的位置以后都有效在程序中定义它的位置以后都有效自动初始化为自动初始化为自动初始化为自动初始化为0 0从程序运行起即占据内存,程序运行过程中可随从程序运行起即占据内存,程序运行过程中可随从程序运行起即占据内存,程序运行过程中可随从程序运行起即占据内存,程序运行过程中可随时访问,程序退出时释放内存时访问,程序退出时释放内存时访问,程序退出时释放内存时访问,程序退出时释放内存 在定义点之前或在其他文件中引用,应该进行如在定义点之前或在其他文件中引用,应该进行如在定义点之前或
21、在其他文件中引用,应该进行如在定义点之前或在其他文件中引用,应该进行如下声明:下声明:下声明:下声明:extern extern 类型名类型名类型名类型名 变量名变量名变量名变量名;使函数之间的数据交换更容易,也更高效使函数之间的数据交换更容易,也更高效但是并不推荐使用但是并不推荐使用但是并不推荐使用但是并不推荐使用因为谁都可以改写全局变量,所以很难确定是谁因为谁都可以改写全局变量,所以很难确定是谁因为谁都可以改写全局变量,所以很难确定是谁因为谁都可以改写全局变量,所以很难确定是谁改写了它改写了它改写了它改写了它 尽量少用全局变量。不得不用时,要严格控制尽量少用全局变量。不得不用时,要严格控制
22、对它的改写对它的改写2023/2/243静态变量(静态变量(静态变量(静态变量(staticstatic)一个函数的内部变量在函数退出后失效。一个函数的内部变量在函数退出后失效。再次进入函数,变量值重新初始化再次进入函数,变量值重新初始化 把此变量定义为把此变量定义为static,则变量的值可,则变量的值可以保存到下次进入函数以保存到下次进入函数static static intint i;i;静态变量和全局变量都是静态存储类型静态变量和全局变量都是静态存储类型自动初始化为自动初始化为自动初始化为自动初始化为0 0从静态存储区分配,生存期为整个程序运从静态存储区分配,生存期为整个程序运从静态存
23、储区分配,生存期为整个程序运从静态存储区分配,生存期为整个程序运行期间行期间行期间行期间但作用域不同但作用域不同但作用域不同但作用域不同2023/2/244float Add(int x,int y)return(x+y);main()int a=3,c=5;float b=c-a;printf(%3.0fn,Add(a+b,(int)b-a);2023/2/245float Add(int x,int y)return(x+y);main()int a=3,c=5;float b=c-a;printf(“%-3.0fn”,Add(a,Add(c,(int)b-a);第第第第6 6 6 6章章
24、章章 数组数组数组数组2023/2/247内容提要内容提要内容提要内容提要 数组类型;数组类型;向函数传递一维数组和二维数组;向函数传递一维数组和二维数组;常用算法:排序、查找、求最大最小值常用算法:排序、查找、求最大最小值等;等;用字符数组存取字符串;用字符数组存取字符串;使用字符串处理函数处理字符串使用字符串处理函数处理字符串 保存大量同类型的相关数据保存大量同类型的相关数据如矩阵运算,表格数据等如矩阵运算,表格数据等如矩阵运算,表格数据等如矩阵运算,表格数据等 2023/2/248数组的定义与初始化数组的定义与初始化数组的定义与初始化数组的定义与初始化 数组定义后的初值仍然是随机数,一般
25、需要我数组定义后的初值仍然是随机数,一般需要我们来初始化们来初始化 int a5=12,34,56,78,9;int a5=0;int a=11,22,33,44,55;数组大小最好用宏来定义,以适应未来可能的数组大小最好用宏来定义,以适应未来可能的变化变化#define#define SIZE 10 SIZE 10intint aSIZEaSIZE;数组大小定义好后,将永远不变数组大小定义好后,将永远不变2023/2/249数组的使用数组的使用数组的使用数组的使用 数组的下标都是从数组的下标都是从0开始开始 对数组每个元素的使用与普通变量无异对数组每个元素的使用与普通变量无异 可以用任意表达
26、式作为下标,动态决定访问哪可以用任意表达式作为下标,动态决定访问哪个元素个元素forfor(i=0;iSIZE;i+)(i=0;iSIZE;i+)aiai=2*i;=2*i;下标越界是下标越界是大忌大忌!使用大于最大下标的下标,将访问数组以外的空使用大于最大下标的下标,将访问数组以外的空使用大于最大下标的下标,将访问数组以外的空使用大于最大下标的下标,将访问数组以外的空间。那里的数据是未知的,可能带来严重后果间。那里的数据是未知的,可能带来严重后果间。那里的数据是未知的,可能带来严重后果间。那里的数据是未知的,可能带来严重后果 sizeof可以用来获得数组大小可以用来获得数组大小2023/2/
27、250只能逐个对数组元素进行操作(字符数组例外)只能逐个对数组元素进行操作(字符数组例外)输入方法:输入方法:输入方法:输入方法:int a10,i;输入第输入第输入第输入第i i个数组元素:个数组元素:个数组元素:个数组元素:scanf(%d,&ai);输入整个数组元素输入整个数组元素输入整个数组元素输入整个数组元素:for(i=0;i10;i+)scanf(%d,&ai);输出方法:输出方法:输出方法:输出方法:输出第输出第输出第输出第i i个数组元素:个数组元素:个数组元素:个数组元素:printf(%d,ai);输出整个数组元素:输出整个数组元素:输出整个数组元素:输出整个数组元素:f
28、or(i=0;i10;i+)printf(%d,ai);一维数组的输入和输出一维数组的输入和输出2023/2/251 输入某个班级所有同学的学号和成绩。输入某个班级所有同学的学号和成绩。算法:算法:1、输入学生人数、输入学生人数 2、从键盘依次输入学号和成绩,分别存、从键盘依次输入学号和成绩,分别存入两个数组中入两个数组中(1)计算平均分)计算平均分(2)查找最高分)查找最高分(3)将成绩从低到高排序)将成绩从低到高排序(4)计算及格率和优秀率)计算及格率和优秀率2023/2/252数组名作函数参数数组名作函数参数数组名作函数参数数组名作函数参数 用数组名作参数,就是将用数组名作参数,就是将数
29、组的首地址传递传递给函数给函数 实参数组与形参数组占用同一段内存实参数组与形参数组占用同一段内存 在函数中可对形参数组元素修改的结果,会在函数中可对形参数组元素修改的结果,会影响结果主调函数中的实参数组影响结果主调函数中的实参数组2023/2/253简单变量作函数参数简单变量作函数参数简单变量作函数参数简单变量作函数参数 2023/2/254数组作函数参数数组作函数参数数组作函数参数数组作函数参数 2023/2/255二维数组的定义和引用二维数组的定义和引用 二维数组定义的一般形式为二维数组定义的一般形式为类型说明符类型说明符 数组名数组名常量表达式常量表达式常量表达式常量表达式;例如:例如:
30、定义定义a a为为3 34(34(3行行4 4列列)的数组,的数组,b b为为5 510(510(5行行1010列列)的数组。如下:的数组。如下:float afloat a3 34 4,b b5 51010;不能写成不能写成 float afloat a3 3,4 4,b b5 5,1010;2023/2/256二维数组的定义二维数组的定义 二维数组中的元素在内存中的排列顺序是:按行存放,即先顺序存放第一行的元素,再存放第二行的元素 一维数组在内存中的存放一维数组在内存中的存放一维数组在内存中的存放一维数组在内存中的存放下图表示对下图表示对下图表示对下图表示对a a3 34 4数组存放的顺序
31、数组存放的顺序数组存放的顺序数组存放的顺序 2023/2/257可以用下面可以用下面4 4种方法对二维数组初始化种方法对二维数组初始化数据类型数据类型 数组名数组名 常量表达式常量表达式1 1常量表达式常量表达式2 2 初始化数据初始化数据;(1)(1)分行给二维数组赋初值。分行给二维数组赋初值。如:如:int a34=1,2,3,4,5,6,7,8,9,10,11,12;(2)(2)可以将所有数据写在一个花括弧内,按数组排列可以将所有数据写在一个花括弧内,按数组排列的顺序对各元素赋初值。的顺序对各元素赋初值。如:如:intint a a3 34 4=1=1,2 2,3 3,4 4,5 5,6
32、 6,7 7,8 8,9 9,1010,1111,12;12;二维数组的引用二维数组的引用2023/2/258(3)(3)可以对部分元素赋初值。可以对部分元素赋初值。如如 int a34=1,5,9;1 0 0 01 0 0 05 0 0 0 5 0 0 0 9 0 0 0也可以对各行中的某一元素赋初值,如int a34=1,0,6,0,0,11;1 0 0 01 0 0 00 6 0 00 6 0 00 0 0 0 110 0 11 1 0 0 01 0 0 05 6 0 0 5 6 0 0 0 0 0 0也可以只对某几行元素赋初值。如:也可以只对某几行元素赋初值。如:int a34=1,5
33、,6;2023/2/259(4)(4)如果对全部元素都赋初值,则定义数组时对第一维如果对全部元素都赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。的长度可以不指定,但第二维的长度不能省。如:如:intint a a3 34 4=1=1,2 2,3 3,4 4,5 5,6 6,7 7,8 8,9 9,1010,1111,12;12;它等价于:它等价于:intint a a4 4=1=1,2 2,3 3,4 4,5 5,6 6,7 7,8 8,9 9,1010,1111,12;12;在定义时也可以只对部分元素赋初值而省略第一维的在定义时也可以只对部分元素赋初值而省略第一维的长度
34、,但应分行赋初值。如:长度,但应分行赋初值。如:intint a a4 4=0=0,0 0,33,00,10;10;0 0 3 00 0 0 00 10 0 0 7.2.3 7.2.3二维数组的引用二维数组的引用2023/2/260二维数组的输入和输出二维数组的输入和输出数组的输入和输出只能逐个对数组元素进行操作数组的输入和输出只能逐个对数组元素进行操作(字符数组例外)(字符数组例外)int b23,i,j;输入方法:输入方法:输入方法:输入方法:输入第输入第i行第行第j列元素:列元素:scanf(“%d”,&aij);输入整个数组元素:输入整个数组元素:for(i=0;i2;i+)for(j
35、=0;j3;j+)scanf(“%d”,&aij);输出方法:输出方法:输出方法:输出方法:输出第输出第i行第行第j列列元素:元素:printf(“%d”,aij);输出整个数组元素:输出整个数组元素:for(i=0;i2;i+)for(j=0;j字符串2,函数值为一正整数。(3)(3)如果字符串1str2)if(str1str2)printf(yesprintf(yes););而只能用if(strcmp(str1if(strcmp(str1,str2)0)str2)0)printf(yesprintf(yes););2023/2/2724.strlen函数函数 其一般形式为其一般形式为:st
36、rlen(字符数组字符数组)strlen是测试字符串长度的函数。函数的值为字符串中的实际长度(不包括0在内)。如:char char strstr1010=China;=China;printf(%dprintf(%d,strlen(strstrlen(str););输出结果不是10,也不是6,而是5。也可以直接测试字符串常量的长度,如strlen(China);2023/2/273这一章我们学习了这一章我们学习了这一章我们学习了这一章我们学习了 了解了在什么情况下使用数组这种数据了解了在什么情况下使用数组这种数据类型类型 向函数传递一维数组和二维数组的方法向函数传递一维数组和二维数组的方法 用数组名作为函数参数和用简单变量作用数组名作为函数参数和用简单变量作为函数参数的不同之处为函数参数的不同之处