资源预览内容
第1页 / 共73页
第2页 / 共73页
第3页 / 共73页
第4页 / 共73页
第5页 / 共73页
第6页 / 共73页
第7页 / 共73页
第8页 / 共73页
第9页 / 共73页
第10页 / 共73页
亲,该文档总共73页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第4章 程序的控制结构,C语言大学实用教程,内容提要,算法的描述方法 基本控制结构 基本控制语句 常用算法,如累加、累乘、统计、递推、迭代、穷举等 程序的基本版式 结构化程序设计的基本思想,算法的表示方法,自然语言表示 传统的流程图表示 N-S结构化流程图表示 伪代码表示,N-S流程图用以下的流程图符号:,(1)顺序结构,(2)选择结构,(3)循环结构,条件语句 if (表达式) 语句 if (表达式) 语句1 else 语句2 if (表达式1)语句1 else if (表达式2) 语句2 else 语句3 开关语句,4.3 选择结构,4.3 选择结构:条件语句,例: if (score=90) range=1; else if(score=80) range=2; else if(score=70) range=3; else if(score=60) range=4; else range=5;,练习,3.判断闰年year year能被4整除但不能被100整除 能被400整除,关系运算符和逻辑运算符 条件p:逻辑表达式 真假的判断 非0即为真 if (a) printf(“OK!”); x=-5; if (x) printf(“OK!”); y=0; if (y=0) printf(“OK!”); y=0; if (y) printf(“OK!”);,switch,多路选择 switch (表达式) case 常数1: 语句序列1; case 常数2: 语句序列2; default: 语句序列3; default可以没有,但最好不省略 不要忘记break,注意: 常量n仅起语句标号作用,不做求值判断 常量n的值必须是惟一的,没有先后次序 多个case语句可以共用一组执行结果,循环while,for,while (表达式) 语句; 固定? 变化?,while,int k=1,s=0; while (k=100) s=s+k; k+; ,循环控制表达式,循环控制变量(k),循环体,注意: 循环体出现多条语句,应以复合语句的形式出现 循环前必须给循环控制变量赋初值 循环体中,必须有改变循环控制变量值的语句 循环体可以为空 while ((c=getchar()!=A);,do-while,do 语句; while (表达式); 首先执行语句,然后判断表达式的值。如果表达式为0,继续向下执行,否则,再次执行语句,再次判断表达式的值 语句会被至少执行一次 最后分号不可省略!,循环while,for,for (表达式1; 表达式2; 表达式3) 语句; ,选择三种循环的一般原则,如果循环次数已知,用for 如果循环次数未知,用while 如果循环体至少要执行一次,用do-while 这只是“一般”原则,不是“原则”,合法的嵌套循环,for (i=0;i3;i+) printf(“i=%d:”,i); for (j=0;j4;j+) printf(“j=%-4d”,j); printf(“n”); ,现场编程完成例4.14,编程输出如下形式的乘法九九表,#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(“%4d“, m*n); printf(“n“); ,现场编程完成例4.16,马克思手稿中有一道趣味数学题:有30个人,其中有男人、女人和小孩,在一家饭馆里吃饭共花了50先令,每个男人各花3先令,每个女人各花2先令,每个小孩各花1先令,问男人、女人和小孩各有几人? 解方程组 穷举法,break和continue,这一章我们学习了,算法的描述方法 流程图 与基本控制结构相应的结构化的控制语句 if-else switch for while do-while break continue 常用算法,如累加、累乘、统计、递推、迭代、穷举等,这一章我们学习了,常用算法 求阶乘: 数据类型的定义, long或double 求累加和: long 统计: 统计正数、平均分以上、n个成绩中10090、8980、7970、6960、60的人数;输入字符串中字母d的个数 设置一个计数变量k:初始化为1,每遇到一次将其加1:k+;,这一章我们学习了,累加和 存放累加和的变量: 初始化为0或第一项,再循环加每一项; 循环控制: 前n项之和已知循环次数,可设置一个循环变量如i来控制; 加到某一项或累加和满足一定条件。例: 1+2+.+n 与 1+3+5+7+.和 2+4+6+8+.及12+32+52+72+ 输入n或累加和大于2000的最小的n,这一章我们学习了,累加的项较复杂时,得专门求,例: 前后项之间无关 1m+3m +5m +7m +. /4=1-1/3+1/5-1/7+.直到最后一项的绝对值小于10-6为止 前后项之间有关 1!+2!+.+n! x0+x1 +x2+x3+. 1+1+2+3+5+8+13+21+. 2/1+3/2+5/3+8/5+13/8+21/13+. a+aa+aaa+aaaa+aaaaa+a是一个数字,例a=2,2+22+222+2222+,第5章 函数与程序结构,C语言大学实用教程,内容提要,函数定义、函数调用、函数原型、函数返回值 难点:函数的参数传递与返回值 全局变量、自动变量、静态变量、寄存器变量 难点:变量的作用域与存储类型 程序调试 结构设计与模块化,5.2.1 函数的分类,库函数 第三方函数库 自定义函数,5.2.2 函数定义(definition),返回值类型 函数名 (参数表) 函数体 return 表达式; (1)返回值类型与return语句配合 如果不需要返回值,则应该用void定义返回值类型,同时return语句之后不再需要任何表达式,5.2.2 函数定义(definition),返回值类型 函数名 (参数表) 函数体 return 表达式; 当函数执行到return语句时,就中止函数的执行,返回到调用它的地方 函数内部可以定义只能自己使用的变量,称内部变量。参数表里的变量也是内部变量,5.2.3 函数的调用、参数和返回值,一个C程序可以由若干函数组成 只有一个main()函数 子函数与主函数 子函数可以相互调用,不能调用主函数 C程序总是从主函数开始执行,调用其他函数,最后还要返回到主函数,程序在主函数结束时结束,例5.1b 使用了Average函数的main(),main() int a = 12; int b = 24; int ave; ave = Average(a, b); printf(“Average of %d and %d is %d.n“, a, b, ave); ,关于形参与实参的说明:,(1) 在定义函数中指定的形参,在未出现函数调用时,它们并不占内存中的存储单元。只有在发生函数调用时,函数max中的形参才被分配内存单元。在调用结束后,形参所占的内存单元也被释放。,(2) 实参可以是常量、变量或表达式, 例如: max(,); 但要求它们有确定的值。在调用时将实参的值赋给形参。,(3)在被定义的函数中,必须指定形参的类型。,(4)实参与形参的类型应相同或赋值兼容。,(5)值传递:实参向形参的数据传递是单向“值传递”,只能由实参传给形参,而不能由形参传回来给实参。 在调用函数时,给形参分配存储单元,并将实参对应的值传递给形参,调用结束后,形参单元被释放,实参单元仍保留并维持原值。,说明: (1)函数的返回值是通过函数中的return语句获得的。 return语句后面的括弧也可以不要 例如: “return ;” 等价于 “return ();” return后面的值可以是一个表达式。 例如: (int ,int ) return(?:); ,(2)函数的返回值应当属于某一个确定的类型,在定义函数时指定函数返回值的类型。 例如:下面是3个函数的首行: int max(float ,float ) /* 函数值为整型 */ char letter(char c1,char c2) /* 函数值为字符型 */ double min(int ,int ) /* 函数值为双精度型 */,注意: 凡不加类型说明的函数,自动按整型处理。,(3)在定义函数时指定的函数类型一般应该和return语句中的表达式类型一致。 如果函数值的类型和return语句中表达式的值不一致,则以函数类型为准。 对数值型数据,可以自动进行类型转换。即函数类型决定返回值的类型。,(4)对于不带回值的函数,应当用“void”定义函数为“无类型”(或称“空类型”)。此时在函数体中不得出现return语句。,函数调用(call),单向值传递 调用函数时,必须提供所有的参数 printf和scanf是采用变长变量表定义的函数,所以变量的个数不固定。 提供的参数个数、类型、顺序与定义时相同 有返回值时 放到一个数值表达式中,如c = max(a,b); 作为另一个函数调用的参数,如 c = max(max(a,b),c); printf(“%dn“, max(a,b); 无返回值时 函数调用表达式,如display(a,b);,变量的作用域,指在源程序中定义变量的位置及其能被读写访问的范围 分为 局部变量(Local Variable) 全局变量(Global Variable ),局部变量,局部变量 在语句块内定义的变量 形参也是局部变量 定义时不会自动初始化,除非程序员指定初值 进入语句块时获得内存,仅能由语句块内语句访问,退出语句块时释放内存,不再有效 并列语句块各自定义的同名变量互不干扰,全局变量,全局变量 在所有函数之外定义的变量 在程序中定义它的位置以后都有效 自动初始化为0 从程序运行起即占据内存,程序运行过程中可随时访问,程序退出时释放内存 在定义点之前或在其他文件中引用,应该进行如下声明: extern 类型名 变量名; 使函数之间的数据交换更容易,也更高效 但是并不推荐使用 因为谁都可以改写全局变量,所以很难确定是谁改写了它 尽量少用全局变量。不得不用时,要严格控制对它的改写,静态变量(static),一个函数的内部变量在函数退出后失效。再次进入函数,变量值重新初始化 把此变量定义为static,则变量的值可以保存到下次进入函数 static int i; 静态变量和全局变量都是静态存储类型 自动初始化为0 从静态存储区分配,生存期为整个程序运行期间 但作用域不同,float 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); ,float 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章 数组,C语言大学实用教程,内容提要,数组类型; 向函数传递一维数组和二维数组; 常用算法:排序、查找、求最大最小值等; 用字符数组存取字符串; 使用字符串处理函数处理字符串 保存大量同类型的相关数据 如矩阵运算,表格数据等,数组的定义与初始化,数组定义后的初值仍
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号