计算机编程课件:第3章 变量、函数和流程控制 (2)_第1页
计算机编程课件:第3章 变量、函数和流程控制 (2)_第2页
计算机编程课件:第3章 变量、函数和流程控制 (2)_第3页
计算机编程课件:第3章 变量、函数和流程控制 (2)_第4页
计算机编程课件:第3章 变量、函数和流程控制 (2)_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第3章 变量、函数和流程控制,要目 关系、条件、逻辑表达式 控制结构 if 语句和分支程序 while 语句和循环程序 for 语句,问题,要写一个函数,返回两参数中的较大值: double dmax (double, double) 需要: 比较数据大小(判断) 根据判断结果决定做什么(分情况处理) 写这种程序,需要描述逻辑判断,取得判断的结果,利用逻辑判断控制计算过程。,关系运算符,关系运算符确定数据间是否有某种关系。共 6 个: = = 大于/大于等于/小于等于/小于 = !=等于/不等于 关系表达式的结果用 int 值表示,成立/不成立时值分别是1/0 (3.24 = 2.98) 的值

2、是 int 类型的 0 (5 != 3 + 1) 的值是 int 类型的 1,关系运算符,一般不采用连续写关系算符的形式(易误解),例: 5 = 3 = 2 这实际上表示的是 (5 = 3) = 2 括号里得到 1,整个表达式得到 0,逻辑值,关系表达式的计算结果为逻辑值 不成立时结果是逻辑值“假” 成立时结果是逻辑值“真” 所有基本类型的值都可当作逻辑值用: 值等于 0 表示逻辑值“假” 所有非 0 值都当作逻辑值“真”,条件运算符,条件运算符“?:” 要求三个成分 条件表达式的语法形式: 表达式1 ? 表达式2 : 表达式3 先算表达式1(条件); 条件成立时算表达式2,以其结果作为条件表

3、达式的值 条件不成立算表达式3,以其结果作为条件表达式的值 注意:条件成立时不算表达式3;不成立时不算表达式2 函数 dmax 的定义: double dmax (double x, double y) return x y ? x : y; 例:z = dmax(2, 3);,逻辑运算符,逻辑运算符共有三个: !、 else printf(radius: %f, area: %fn, r, 3.14159265*r*r); ,if 语句的建议书写格式,1)简单情况 if (XXXXXX) xxxxxxxxxxxx else xxxxxxxxxxxx 2)当“语句” 为复合语句时,常见写法:

4、if (XXXXXX) xxxxxxxxxxxx xxxxxxxxxxxx else xxxxxxxxxxxx xxxxxxxxxxxx ,例3.9 求二次方程的根,写一个函数 void root2(double a, double b, double c) 参数看作二次方程系数,希望求出方程的实根并输出 根据数学知识:求二次方程的实根,需要先求判别式值,而后分三种情况处理:两个实根,一个重根,无实根 函数的基本设计: void root2(double a, double b, double c) /* 1,计算判别式d */; /* 2,根据d大于、等于、小于0分别处理 */ 第一步按公式

5、计算,第二步用if语句分情况处理,求二次方程的根,void root2(double a, double b, double c) double d = b*b - 4*a*c; if (d 0.) d = sqrt(d); printf(Two real roots: %f, %fn, (-b+d)/2./a, (-b-d)/2./a); else if (d = 0.) printf(One real root: %fn, -b/2./a); else printf(No real rootn); 这里假定了a不为0,连续 if 条件判断,前例中出现了连续的条件判断: 成立时做某些操作 不

6、成立时判断下一条件 这种情况下的建议书写形式: if (.) . . else if (.) . . . . else . . ,循环语句(1):while 语句,循环控制结构实现特定条件下某些操作的重复执行 形式: while (条件) 语句 其中的语句称为循环体,这里经常出现复合语句,也可以是循环(构成多重循环)或其他结构 语义: (1) 求值条件表达式,将它的值作为逻辑值 (2) 若第1步得到值0则循环结束;否则 (3) 执行作为循环体的语句,完成后回到 (1),例3.10 写程序输出1-10的平方,一共输出十个数,直接写10个语句很容易 #include int main() prin

7、tf(1*1n); printf(2*2n); printf(3*3n); printf(4*4n); printf(5*5n); printf(6*6n); printf(7*7n); printf(8*8n); printf(9*9n); printf(10*10n); return 0; ,这个程序没错,但很不令人满意 如果题目要输出1到100的平方,是否必须写100个输出语句? 如果要输出10000个平方呢?,输出1-10的平方的程序,有规律的重复可以用循环结构描述 基本考虑是用一个变量(如k)记录“当前值”: 开始时给 k 赋值 1 只要 k 的值小于等于 10 就重复做下面工作:

8、输出 k 的值,而后把 k 的值加 1 这种重复动作很容易借助于 while 结构描述 重复的条件是 k = 10,输出1-10的平方的程序,#include int main () int k = 1; while (k = 10) printf(%dn, k*k); k = k + 1; return 0; 有许多优点 只有一个输出语句,修改输出形式只需修改一个地方 改变数的范围很方便,输出10000个平方,程序也不需要做很多变化,等等,例3.11 循环求和,问题:写出求前100个数的平方和的程序 与前面问题的不同在于需要求出和数 保存信息需要用变量。这里需要一个保存和数的变量 假设用 s

9、um 保存和数 sum = 0; i = 1; while (i = 100) sum = sum + i * i; i = i + 1; ,循环求和,#include int main() long i, sum; sum = 0; i = 1; while (i = 100) sum = sum + i * i; i = i + 1; printf(Sum: %dn, sum); return 0; 为什么这里用 long 类型? 考虑 sum 的值可能变得比较大,一些 C 系统用 16 位int类型,将无法表示这个和数(会溢出),循环工作的特点,循环程序的特点 进入循环前需要给循环中使用

10、的变量设置初值,可以通过赋值语句或变量初始化完成 在循环体里要修改(更新)一些变量 循环中每次执行同样语句,变量值变化,做的事情不同 一个循环需要有一个继续条件,它控制循环的进行或结束 由于有循环,循环体多次执行,引起的计算时间可能很长 在编实际程序时,一项重要工作就是发掘计算中的重复性动作,通过适当的循环形式正确描述这种重复动作,循环语句(2):for 语句,形式: for (表达式1; 表达式2; 表达式3) 语句 执行过程: 1)求值表达式1(只做一次),通常用于设置变量初值 2)求值表达式2,值为0时循环结束(作为循环条件) 3)执行语句(循环体) 4)求值表达式3,通常用于更新循环变

11、量 5)转到 2),for 语句,for 语句头部的各个表达式都可缺,但要保留分号 for 语句功能强大,覆盖了while语句功能。循环控制信息集中在语句前部,常使程序比较紧凑清晰,例3.14 求一个区间整数立方和的函数,函数的类型特征(考虑到立方和的值比较大): long cube_sum(int n) 同样需要一个变量记录当前已经处理的整数,一个累积变量记录部分和,定义: int k; long sum; 基本计算用 for 循环描述,简洁而清晰: sum = 0; for (k = 1; k = n; k = k + 1) sum = sum + k * k * k; 当然也可以用 while 写循环,求一个区间整数立方和的函数,包装为一个函数: int cube_sum (int n) long k, sum = 0; for (k = 1; k = n; k = k + 1) sum += k * k * k;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论