3选择结构程序设计 ■学习方法: 课前按照授课计划上指明的进度预习 >上课认真听讲,课件可下载作为笔记 课下参照教材理解课件上所讲的内容和 相关知识点 >完成作业&上机调试
3 选择结构程序设计 ▪学习方法: ➢课前按照授课计划上指明的进度预习 ➢上课认真听讲,课件可下载作为笔记 ➢课下参照教材理解课件上所讲的内容和 相关知识点 ➢完成作业&上机调试
例1:比较两个数 从键盘输入两个数,输出其中最大的一个 数。 开始 问题分析 输入两整数a,b 如果a>b, a是最大值, 否则, a>b b是最大值。 输出a 「输出b」 结束
例1:比较两个数 ▪ 从键盘输入两个数,输出其中最大的一个 数。 ▪ 问题分析 开 始 输入两整数a,b a>b 输出a 输出b 结 束 如果a>b, a是最大值, 否则, b是最大值
程序1 比较两个数* Include int maino int a, b printf("Please input two integers: In) scanf( %d %d", &a, &b); ifa>b)/比较后直接输出比较结果* printf(max=%d", a) else printf(" max=%d ", b); return(0)
程序1 /*比较两个数 */ #include int main() { int a, b; printf("Please input two integers:\n"); scanf("%d %d",&a,&b); if(a>b) /*比较后直接输出比较结果*/ printf(" max=%d ", a); else printf(" max=%d ", b); return (0); }
涉及的语法 选择结构语句格式 条件表达式) else分支可以省 略,此时为单分 支结构
涉及的语法 ▪ 选择结构语句格式 if(条件表达式) { … … } else { … … } else分支可以省 略,此时为单分 支结构
涉及的语法 关系运算符 ><><=|= 大于,小于,大于等于,小于等于,等于, 不等于 运算结果只有两个值:0和非0,0表示假, 即该关系不成立;非0,表示真,即该关 系成立 例如:2006%4=0的结果是? 0,表示关系不成立) 优先级:在算术运算符和赋值运算符之间。 结合性:自左向右
涉及的语法 -关系运算符 ▪ > = <= == != ▪ 大于,小于,大于等于,小于等于,等于, 不等于 ▪ 运算结果只有两个值:0和非0,0表示假, 即该关系不成立;非0,表示真,即该关 系成立 ▪ 例如:2006%4==0的结果是? 0,表示假(关系不成立) 优先级:在算术运算符和赋值运算符之间。 结合性:自左向右
程序2 比较两个数 include 请根据下列算法写程序。 int maino inta,b,max;/max用来存储最大值* printf( Please input two integers:in";开始门 scanf( %d %d", &a, &b); if(a>b) 输入两整数a,b maxed b else maxed. max-a max printf( max=%d", max) return(0) 匚输出mx 结束
程序2 /*比较两个数 */ #include int main() { int a, b,max;/*max用来存储最大值*/ printf("Please input two integers:\n"); scanf("%d %d",&a,&b); if(a>b) max=a; else max=b; printf(" max=%d ",max); return (0); } 开 始 输入两整数a,b a>b max=a max=b 输出max 结 束 请根据下列算法写程序
例2:判断闰年 ■从键盘上输入一个年份,然后判断这个年 份是否为闰年。 分析结果(算法) >输入year >判断year是否为国年 输出yes或mo如果y能被整除且不能被100 整除,或者year能被400整除 year是闰年, 否则 year不是闰年
例2:判断闰年 ▪ 从键盘上输入一个年份,然后判断这个年 份是否为闰年。 ▪ 分析结果(算法) ➢输入year ➢判断year是否为闰年 ➢输出yes或no 如果year能被4整除且不能被100 整除,或者year能被400整除, year是闰年, 否则 year不是闰年
分析 如果year能被4整除且不能被100整除,或者year能被400整除, year是闰年, 否则 if(year %4==0&&year%100=o)(year%400==0) year不是 (?&& printf(god is a leap year!". year) (y ea ese printf("yod is not a leap year!",year)
分析 ▪ year能被4整除且不能被100整除,或者year能被 400整除 ▪ (?)或者(?) ▪ (?且?)或者(?) ▪ (?&&?)||(?) ▪ (year%4==0&&year%100!=0)||(year%400==0) 如果year能被4整除且不能被100整除,或者year能被400整除, year是闰年, 否则 year不是闰年。 if(year%4==0&&year%100!=0)||(year%400==0) { printf(“%d is a leap year!”,year); } else { printf(“%d is not a leap year!”,year); }
结果 include 输入1998,输出结果是什么? 1998%4=0不成立,然后 void main(判断闰年 1998%400==0不成立,所以, int year: 整个条件不成立,不是闰年, print( please input year:"); 注意:1998%100==0并没有判 断,这里采用了懒情求值法, scanf(%d,&year); 因为无论它是何值,第一个条 if((year %4==0&&year% 件都不可能成立了。 输入2004,会怎样? 2000%4==0成立, prn"% d is a leap year!'2-200090010咸立,所以左边 的第一个条件成立, 2004%400==0不用再判断了 else 同样是使用懒惰求值法。 输入2100,又会怎样? 不是闰年 printf("/d is not a leap year!
结果 #include void main()/*判断闰年*/ { int year; printf(“please input year:”); scanf(“%d”,&year); if((year%4==0&&year%100!=0)||(year%400==0)) { printf(“%d is a leap year!”,year);/*一般要缩进*/ } else { printf(“%d is not a leap year!”,year); /*缩进与上边一致*/ } } •输入1998,输出结果是什么? •1998%4==0不成立,然后 1998%400==0不成立,所以, 整个条件不成立,不是闰年, 注意:1998%100==0并没有判 断,这里采用了懒惰求值法, 因为无论它是何值,第一个条 件都不可能成立了。 •输入2004,会怎样? •2000%4==0成立, 2000%100!=0成立,所以左边 的第一个条件成立, 2004%400==0不用再判断了, 同样是使用懒惰求值法。 •输入2100,又会怎样? •不是闰年
简单的程序测试 一次输入,得到正确的输出结果并不能说明问题, 要精心选择不同的输入,反复进行测试,才能逐 渐发现程序里的问题 程序测试分为结构测试和功能测试两类 结构测试又为分: 语句覆盖法 分支覆盖法 >条件覆盖法 >组合条件覆盖法 对于前一个例题,最好根据条件中的三个表达式 的组合,即选择2*2*2=8个输入进行程序的测试
简单的程序测试 ▪ 一次输入,得到正确的输出结果并不能说明问题, 要精心选择不同的输入,反复进行测试,才能逐 渐发现程序里的问题 ▪ 程序测试分为结构测试和功能测试两类 ▪ 结构测试又为分: ➢ 语句覆盖法 ➢ 分支覆盖法 ➢ 条件覆盖法 ➢ 组合条件覆盖法 ▪ 对于前一个例题,最好根据条件中的三个表达式 的组合,即选择2*2*2=8个输入进行程序的测试