c语言程序设计5第五讲(第三章中).ppt_第1页
c语言程序设计5第五讲(第三章中).ppt_第2页
c语言程序设计5第五讲(第三章中).ppt_第3页
c语言程序设计5第五讲(第三章中).ppt_第4页
c语言程序设计5第五讲(第三章中).ppt_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

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

文档简介

“做”中“学” 周日27日晚7:009:00上机 10月10号补10月8号周四的上机课! 10月11号补10月9号周五的理论课! 1 高级语言程序设计 主讲教师:贾彩燕 计算机与信息技术学院 计算机科学与技术系 2 第三章 变量、函数和控制结构 3 n语句、复合语句 n变量概念、定义、使用 n定义函数(初步,第五章深入) n关系表达式、逻辑表达式、条件表达式 n语句与控制语句 q条件语句(if语句) q循环语句(while语句) q循环语句(for语句) q循环语句(do-while语句) q从循环中跳出(break和continue语句) n常用结构和问题 主要内容:程序设计的基本知识 4 回顾 n如何定义变量? n如何对变量进行初始化? n函数定义的一般形式是什么? n函数声明语句及其作用是什么? nC程序的结构是什么? 5 课堂练习 n从键盘输入一华氏温度F(degree Fahrenheit),调用自定义函 数FtoC()将华氏温度转化为摄氏温度C(centigrade degree) ,并在主程序中输出。公式如下: 6 q特点:“单向”传递 void swap(int x, int y) int temp; temp = x; x = y; y = temp; int main() int a,b; scanf(“%d,%d“, swap(a, b); printf(“n%d,%dn“, a, b); return 0; 例 两数交换 . 2000 2008 200A 2002 2004 2006 5 变量a 变量b (main) 9 变量temp 变量y 变量x (swap) 5 5 9 5 9 COPY 难点:函数的参数传递方式之值传递 运行结果:5, 9 值传递 7 n语句、复合语句 n变量概念、定义、使用 n定义函数(初步,第五章深入) n关系表达式、逻辑表达式、条件表达式 n语句与控制语句 q条件语句(if语句) q循环语句(while语句) q循环语句(for语句) q循环语句(do-while语句) q从循环中跳出(break和continue语句) n常用结构和问题 主要内容:程序设计的基本知识 8 3.4 关系表达式/逻辑表达式/条件表达式 问题:已有机制的编程能力还很弱。 如:返回两参数中的较大值: double dmax(double, double) 需要: 1. 比较数据大小(判断) 2. 根据判断结果决定做什么(分情 况处理) 本节主要讨论如何描述逻辑判断,判断的结果如何确定,怎样 利用逻辑判断控制计算过程 选择结构 xy 返回y返回x 9 1.关系运算符/关系表达式 关系运算符确定数据间是否存在某种关系。 关系表达式的结果可用于控制计算过程。 n关系运算符共 6 个 q = a+b ab=c a=bc c(a+b) (ab)=c a=(bc) 相当于a=1,b=4,c=5 1 0 0 a=0 12 n运算符功能 n与运算量关系 q要求运算量个数(单、双、多目) q要求运算量类型 n运算符优先级别 n结合方向 n结果的类型 学习运算符应注意 13 n关系运算符 q种类:= != q结合方向:自左向右 q优先级别: = = != 优先级6(高) 优先级7(低) 关系表达式的值:是逻辑值“真”或“假”,用1和0表示 关系运算符和表达式 14 例 若a = 0; b = 0.5; x = 0.3; 则 a 2 7 8在C中是允许的, 值为 0 例 int i = 1, j = 7,a; a = i + (j % 4 != 0); 则a=2 例 a0 结果为 A100 结果为 1 0 关系运算注意(1) 15 例 注意区分“=”与“=” int a = 0,b = 1,c; c = (a = b); 例 应避免对实数作相等或不等的判断 如 1.0/3.0*3.0 = 1.0 结果为 可改写为:fabs(1.0 / 3.0*3.0 - 1.0) y ? x : y; 例:z = dmax(2, 3) 符号函数 sign对应的C函数: double sign(double x) return x 0 ? 1 :(x = 0 ? 0 : -1); sign(x)= 1 x0 0 x=0 -1 x 0 ? 1 : x = 0 ? 0 : -1 条件运算符的优先级高于赋值,低于关系运算符; z = x != 0 ? y/x : 1; 当x值非0时,变量z将被赋予由y/x的值,否则z赋值1 19 算术运算符 关系运算符 赋值运算符 低 高 条件运算符 = = 3 ? (x = 3 b = 2; c = 3; d = 4; m = 1; n = 1; (m = a b) x=2 ?x=4 ?x=8 ?121 28 例:根据运算符优先级关系,逻辑表达式: x + 3 y + z 逻辑表达式的值就是1和0。函数可简写为: int leapYear(int year) return (year % 400 = 0 | year % 4 = 0 使用实例,输出二月天数的语句: printf(“Days of Feb. is %d.n“, leapYear(year) ? 29 : 28); 30 完整的程序 #include int leapYear(int year) return (year % 400 = 0 | year % 4 = 0 int main() int year; scanf(“%d”, printf(“Days of Feb. is %d.n“, leapYear(year) ? 29 : 28); return 0; 31 n语句、复合语句 n变量概念、定义、使用 n定义函数(初步,第五章深入) n关系表达式、逻辑表达式、条件表达式 n语句与控制语句 q条件语句(if语句) q循环语句(while语句) q循环语句(for语句) q循环语句(do-while语句) q从循环中跳出(break和continue语句) n常用结构和问题 主要内容:程序设计的基本知识 32 u程序设计实践总结出三种基本流程模式 3.5 语句与控制结构 33 特点:只有一个入口/出口。 这几个流程模式称为结构化的流程模式。 已证明,这三种模式对写任何程序都够了。 nC 提供了很丰富的控制机制,包括对应上面各种模式 的结构化控制结构。 n控制结构也被看作语句,也称控制语句。 n复合结构是一种控制结构,实现顺序执行。 34 if语句的三种形式 p形式一: 格式:if (expression) statement; 执行过程: expr statement 非0 =0 例:if (xy) printf(“%d”,x); expr statement1statement2 非0=0 p形式二: n格式:if (expression) statement1; else statement2; n执行过程: 例:if (xy) max=x; else max=y; 条件语句(if 语句) 35 p形式三: 格式: 执行过程 if ( expr1 ) statement1; else if (expr2 ) statement2; else if (expr3 ) statement3; . else statementn; expr1 statemnt1 非0 =0 expr2 expr3 statemntnstatemnt3statemnt2 非0 非0 =0 =0 例:if (salary1000) index=0.4; else if (salary800) index=0.3; else if (salary600) index=0.2; else if (salary400) index=0.1; else index=0; If语句的三种形式 36 建议书写格式 1) if (XXXXXX) xxxxxxx(后有;) else xxxxxxx(后有;) 2)当“语句” 为复合语句时,常用写法有两种: if (XXXXXX) if (XXXXXX) xxxxxxxxxxx xxxxxxxxxxx xxxxxxxxxxxx xxxxxxxxxxxx else xxxxxxxxxxx else xxxxxxxxxxx xxxxxxxxxxxx xxxxxxxxxxxx 后无分号 37 条件语句可以是单个语句,也可以是复合语句 if (a0) y = 1; z = 2; else y = 3; z = 4; if (a0) y = 1; z = 2; else y = 3; z = 4; 什么时候必须用复合语句? 38 /程序功能:从小到大排列三个数并输出 #include void main( ) double a, b, c, t; scanf(“%lf,%lf,%lf“, if (a b) t = a; a = b; b = t; if (a c) t = a; a = c; c = t; if (b c) t = b; b = c; c = t; printf(“%5.2f,%5.2f,%5.2fn“, a, b, c); 运行:3, 2.5, 6.0 2.50, 3.00, 6.00 例 :输入三个实数由从小到大的顺序输出 if语句示例1 39 void pc_area (double r) if (r #include void main( ) double a, b, c, s, area; scanf(“%lf,%lf,%lf“, if (a + b c area = sqrt(s*(s-a)*(s-b)*(s-c); printf(“area=%7.2fn“, area); else printf(“input data error”); 运行结果: 3,4,5 area= 6.00 4,1,2 input data error 41 例:写函数 void root2(double a, double b, double c) 参数看作二次方程系数,求方程实根并输出。 基本设计框架(算法思想): void root2(double a, double b, double c) /* 1,计算判别式d */; /* 2,根据d大于、等于、小于0分别处理 */ 数学:求二次方程的实根,需先求判别式值,区分三种情况: 两个实根,一个重根,无实根。 else-If语句示例1 42 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,处理a为0也不困难(加判断) 43 例3 用公式f=p*w*s*(1-d) 计算运输费。 吨公里运价 运输距离 折扣 货重 s250(公里) d=0 250s500 d=0.02 500s1000 d=0.05 1000s2000 d=0.08 2000s3000 d=0.10 3000s d=0.15 else-If语句示例2 44 #include int main() double s, p, w, d, f; int c; scanf(“%lf,%lf,%lf”, if (s 0) if(y1)z=1; else z=2; /* else与哪个 if匹配?*/ 要使else部分属于外层if,可用: if (x0) if (y1) z=1; else z=2; q缺省 时,else总是和它上面离它最近的未配对 的if配对 if() if() if() else. else. else. if else 配对原则: 47 /程序功能:输出三个整数的最大值 #include int main( ) int a, b, c; scanf(“%d,%d,%d“, if (a b) max = a; if (c max) max = c; else max = b; if (c max) max = c; printf(“max=%dn”, max); return 0; 运行:8 11 3 max = 11 例 求三个整数的最大值并输出 if语句嵌套示例 /程序功能:输出三个整数的最大值 #include int main( ) int a, b, c; scanf(“%d,%d,%d“, if (a b) max = a; else max = b; if (c max) max = c; printf(“max=%dn”, max); return 0; 48 v一般形式: switch( 表达式) case E1: 语句组 1; break; case E2: 语句组 2; break; . case En: 语句组 n; break; default: 语句组 ; break v执行过程 switch 表达式 语句组1语句组2语句组n语句组 . E 1E 2Endefault case switch语句(开关分支语句)第四种选择结构语句 49 v: lE1,E2,En是常量表达式,且值必须互不相同 l语句标号作用,必须用break跳出 lcase后可包含多个可执行语句,且不必加 lswitch可嵌套 l多个case可共用一组执行语句 如: case A: case B: case C: printf(“score60n”); break; 说明: 50 例,按x的值确定分支,1和2分别处理,其他统一 处理 switch (x) case 1: x=x+1; break; case 2: x=x+5; break; default: x=x+8;break; 51 例:写出下面程序的输出结果. void main() int x; scanf(“%d”, switch(x) case 5:printf(“excellent”); case 4:printf“Good”); case 3:printf(“Pass”); case 2:printf(“Fail”);/*break;*/ default:printf(“Poor”); 则程序的输出为:PassFailPoor 若从键盘输入3 52 例:若变量已正确定义,则以下程序段的运行结果是: a=2;b=7;c=5; switch(a0) case 1:switch(b void main( ) int x, y, z; char ch; printf(“Enter an operator(+,-,*,/):n“); ch = getchar(); printf(“Enter two numbers:“); scanf(“%d,%d“, switch(ch) case +: z = x+y;printf(“x+y=%d“,z); break; case -: z=x-y;printf(“x-y=%d“,z); break; case *: z=x*y;printf(“x*y=%d“,z); break; case /: z=x/y; printf(“x/y=%d“,z); break; default:printf(“The error operator“); 54 例 用公式f=p*w*s*(1-d) 计算运输费。 吨公里运价 运输距离 折扣 货重 s250(公里) d=0 250s500 d=0.02 500s1000 d=0.05 1000s2000 d=0.08 2000s3000 d=0.10 3000s d=0.15 If语句和switch语句示例 55 ? 要根据运输距离计算折扣d,关键 是要构造switch后的表达式,根据 题目,选择 c=s/250 来求

温馨提示

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

评论

0/150

提交评论