首页 05-《高级语言程序设计(C)》选择结构

05-《高级语言程序设计(C)》选择结构

举报
开通vip

05-《高级语言程序设计(C)》选择结构Copyright©2000-2011王灿辉.AllRightsReserved.第三章:选择结构程序设计福州大学·软件学院·软件工程系·王灿辉电子邮件:wangcanhui@fzu.edu.cnCopyright©2000-2011王灿辉.AllRightsReserved.选择结构程序设计Øif语句格式1(注意缩进排列的写法)if(条件){//条件为逻辑表达式〈语句(组)〉}//多条语句必须用{}括起来或者if(条件){〈语句(组)〉}...

05-《高级语言程序设计(C)》选择结构
Copyright©2000-2011王灿辉.AllRightsReserved.第三章:选择结构程序设计福州大学·软件学院·软件工程系·王灿辉电子邮件:wangcanhui@fzu.edu.cnCopyright©2000-2011王灿辉.AllRightsReserved.选择结构程序设计Øif语句格式1(注意缩进排列的写法)if(条件){//条件为逻辑表达式〈语句(组)〉}//多条语句必须用{}括起来或者if(条件){〈语句(组)〉}Ø其语义是:如果条件(表达式)的值为真(非0值),则执行其后的语句(组),否则不执行该(组)语句。Copyright©2000-2011王灿辉.AllRightsReserved.选择结构程序设计Øif语句格式2(注意缩进排列的写法)if(条件)//条件为逻辑表达式〈语句1〉//多条语句必须用{}括起来else〈语句2〉//多条语句必须用{}括起来或者if(条件)〈语句1〉else〈语句2〉Ø其语义是:如果条件(表达式)的值为真(非0值),则执行语句1,否则执行语句2。Copyright©2000-2011王灿辉.AllRightsReserved.选择结构程序设计Øif语句格式3(注意缩进排列的写法)if(条件1)//条件为逻辑表达式〈语句1〉//多条语句必须用{}括起来elseif(条件2)〈语句2〉//多条语句必须用{}括起来//……elseif(条件n)〈语句n〉//多语句必须用{}括住else〈语句n+1〉//多语句必须用{}括住Copyright©2000-2011王灿辉.AllRightsReserved.选择结构程序设计Ø三目运算符:<表达式1>?<表达式2>:<表达式3>Ø先求表达式1的值,如果为真,则执行表达式2,并返回表达式2的结果,如果表达式1的值为假,则执行表达式3,并返回表达式3的结果。Ø例如:max=a>b?a:b;Copyright©2000-2011王灿辉.AllRightsReserved.选择结构程序设计Ø使用最合理的表达方式,如:Ømax=(max>=a?max:a);不如改写为:if(max<a)max=a;Copyright©2000-2011王灿辉.AllRightsReserved.选择结构程序设计Ø实例1:输入两个数,输出其大者。#include<stdio.h>voidmain(){floata,b,max;printf("InputValueAandB:");scanf("%f%f",&a,&b);if(a>b)max=a;elsemax=b;printf("a=%f,b=%f,MAX=%f\n",a,b,max);}Copyright©2000-2011王灿辉.AllRightsReserved.选择结构程序设计Ø实例1:输入两个数,输出其大者。#include<stdio.h>voidmain(){floata,b,max;printf("InputValueAandB:");scanf("%f%f",&a,&b);max=a;//或:max=b;if(a<b)max=b;//if(a>b)max=a;printf("a=%f,b=%f,MAX=%f\n",a,b,max);}Copyright©2000-2011王灿辉.AllRightsReserved.选择结构程序设计Ø实例1:输入两个数,输出其大者。#include<stdio.h>voidmain(){floata,b,max;printf("InputValueAandB:");scanf("%f%f",&a,&b);max=(a>b?a:b);printf("a=%f,b=%f,MAX=%f\n",a,b,max);}Copyright©2000-2011王灿辉.AllRightsReserved.选择结构程序设计Ø实例1:输入两个数,输出其大者。#include<stdio.h>voidmain(){floata,b;printf("InputValueAandB:");scanf("%f%f",&a,&b);printf("a=%f,b=%f,MAX=%f\n",a,b,(a>b?a:b));}Copyright©2000-2011王灿辉.AllRightsReserved.选择结构程序设计Ø实例2:计算y=sgn(x),即-1x<0y=0x=01x>0Ø类似上一个实例,可以写出n个完成上述功能的程序。Copyright©2000-2011王灿辉.AllRightsReserved.选择结构程序设计#include<stdio.h>//实例2voidmain(){floatx;shortinty;printf("InputValue:");scanf("%f",&x);if(x<0)y=-1;elseif(x=0)y=0;elsey=1;printf("x=%f,SGN(x)=%1hd\n",x,y);}//程序对吗?其实际功能是?Copyright©2000-2011王灿辉.AllRightsReserved.选择结构程序设计#include<stdio.h>//实例2voidmain(){floatx;shortinty;printf("InputValue:");scanf("%f",&x);if(x<0)y=-1;elseif(x==0)y=0;elsey=1;printf("x=%f,SGN(x)=%1hd\n",x,y);}//与此类似的解法自己编写Copyright©2000-2011王灿辉.AllRightsReserved.选择结构程序设计#include<stdio.h>//实例2voidmain(){floatx;shortinty;printf("InputValue:");scanf("%f",&x);if(x<0)y=-1;elseif(0=x)y=0;//这样写编译时可查出错!elsey=1;printf("x=%f,SGN(x)=%1hd\n",x,y);}//与此类似的解法自己编写Copyright©2000-2011王灿辉.AllRightsReserved.选择结构程序设计#include<stdio.h>//实例2voidmain(){floatx;shortinty;printf("InputValue:");scanf("%f",&x);y=0;if(x<0)y=-1;if(x>0)y=1;//与上一语句顺序互换可以?printf("x=%f,SGN(x)=%1hd\n",x,y);}//与此类似的解法自己编写Copyright©2000-2011王灿辉.AllRightsReserved.选择结构程序设计//下述程序正确吗?#include<stdio.h>//实例2voidmain(){floatx;shortinty;printf("InputValue:");scanf("%f",&x);y=0;if(x<0)y=-1;elsey=1;printf("x=%f,SGN(x)=%1hd\n",x,y);}Copyright©2000-2011王灿辉.AllRightsReserved.选择结构程序设计#include<stdio.h>//实例2,程序正确吗?voidmain(){floatx;shortinty;printf("InputValue:");scanf("%f",&x);if(x=0)y=0;if(x<0)y=-1;if(x>0)y=1;printf("x=%f,SGN(x)=%1hd\n",x,y);}Copyright©2000-2011王灿辉.AllRightsReserved.选择结构程序设计Ø嵌套if语句:else语句总是和最近一个还没有匹配的then配对。Ø例如:if(条件1)if(条件2)〈语句1〉else〈语句2〉Ø被认为是:if(条件1)if(条件2)〈语句1〉else〈语句2〉Copyright©2000-2011王灿辉.AllRightsReserved.选择结构程序设计Ø如果希望else〈语句2〉和if(条件1)配对,则必须如下改写程序:if(条件1){if(条件2)〈语句1〉}else〈语句2〉Copyright©2000-2011王灿辉.AllRightsReserved.选择结构—逻辑运算符复习Ø逻辑运算符:&&(与)||(或)!(非)Ø含义和真值表、优先级Ø数学的0≤x≤1对应的C表达式是0<=x&&x<=1绝不是0<=x<=1Ø!(0<=x&&x<=1)等价于x<0||x>1,尽量少用!运算符Ø求值顺序:intx=4,y=11;//VC:19printf("%d\n",(x++)+(y+x));Ø和短路求值:if(n!=0&&m/n>=1)…Copyright©2000-2011王灿辉.AllRightsReserved.选择结构—逻辑运算符#include<stdio.h>voidmain(void){intx=5;if(0<=x<=1)//初学者常犯!printf("0<=x<=1\n");elseprintf("x<0,x>1\n");}Ø编译报错吗?不报错输出什么?Copyright©2000-2011王灿辉.AllRightsReserved.选择结构—逻辑运算符#include<stdio.h>voidmain(void){intm=5;if(m=4,6,9,11)printf("月份是小月!\n");elseprintf("月份是2月或大月!\n");}Ø编译报错吗?不报错输出什么?Copyright©2000-2011王灿辉.AllRightsReserved.选择结构—逻辑运算符#include<stdio.h>voidmain(void){intm=5;if(m=(4,6,9,11))printf("月份是小月!\n");elseprintf("月份是2月或大月!\n");}Ø编译报错吗?不报错又输出什么?Copyright©2000-2011王灿辉.AllRightsReserved.选择结构—逻辑运算符#include<stdio.h>voidmain(void){intm=5;if(m==4,6,9,11)printf("月份是小月!\n");elseprintf("月份是2月或大月!\n");}Ø编译报错吗?不报错输出什么?Copyright©2000-2011王灿辉.AllRightsReserved.选择结构—逻辑运算符#include<stdio.h>voidmain(void){intm=4;if(m==(4,6,9,11))printf("月份是小月!\n");elseprintf("月份是2月或大月!\n");}Ø编译报错吗?不报错又输出什么?Copyright©2000-2011王灿辉.AllRightsReserved.选择结构程序设计Ø实例3:输入年份和月份,计算本月的天数Ø分析:主要难点在判闰年Ø方法:年份被4整除并且年份不能被100整除,或年份被400整除,该年是闰年;否则不是闰年(year%4==0&&year%100!=0||year%400==0)Copyright©2000-2011王灿辉.AllRightsReserved.选择结构程序设计#include<stdio.h>//一定要用缩进排列voidmain(void){intyear,month,days;printf("PleaseInputYearandMonth:");scanf("%d%d",&year,&month);if(1<=month&&month<=12){/*很多人将条件写成(1<=month<=12)*///……}elseprintf("MonthERROR!!!\n");}Copyright©2000-2011王灿辉.AllRightsReserved.选择结构程序设计if(month==4||month==6||month==9||month==11)days=30;/*很多人将条件写成(month=4,6,9,11)等*/elseif(month==2)if(year%4==0&&year%100!=0||year%400==0)days=29;elsedays=28;elsedays=31;//month为1,3,5,7,8,10,12printf("year=%dmonth=%ddays=%d\n",year,month,days);Copyright©2000-2011王灿辉.AllRightsReserved.选择结构--switch语句switch(表达式){case〈值表1〉:〈语句1〉;case〈值表2〉:〈语句2〉;//……case〈值表n-1〉:〈语句n-1〉;case〈值表n〉:〈语句n〉;default〈语句n+1〉//可以没有!}Ø表达式必须是int(char)类型,“值表1~n”只能是int(char)类型的常量(表达式)!Copyright©2000-2011王灿辉.AllRightsReserved.选择结构--switch语句Ø几个case的值不能一样,如:case65:case'A':两者是完全一样的。Øcase1:case2:case3:不能写成:case1,2,3:Ø没有特殊的情况,“语句1~n”的最后一般都是break;语句!Copyright©2000-2011王灿辉.AllRightsReserved.选择结构--switch语句//实例3:输入年份和月份,计算本月的天数#include<stdio.h>voidmain(){inty,m,days;printf("Inputyear&month:");scanf("%d%d",&y,&m);switch(m){/*……*/}printf("year=%dmonth=%ddays=%d\n",y,m,days);}Copyright©2000-2011王灿辉.AllRightsReserved.选择结构--switch语句switch(m){case1:case3:case5:case7:case8:case10:case12:days=31;break;//没有break;怎么样?case4:case6:case9:case11://不能写成case4,6,9,11:days=30;break;case2:if(y%4==0&&y%100!=0||y%400==0)days=29;elsedays=28;break;default:days=-1;//错误的月份值!}Copyright©2000-2011王灿辉.AllRightsReserved.选择结构程序设计Ø将百分制的成绩转化为五分制的成绩(A--E)。1、变量定义:doublegrade;//百分制的成绩chargc;//五分制的成绩2、输入百分制的成绩3、成绩转换4、输出2种成绩Copyright©2000-2011王灿辉.AllRightsReserved.选择结构程序设计//将百分制的成绩转化为五分制的成绩#include<stdio.h>voidmain(void){doublegrade;//百分制的成绩chargc;//五分制的成绩printf("请输入百分制的成绩:");scanf("%lf",&grade);if(grade>=90)gc='A';if(grade>=80&&grade<90)gc='B';if(grade>=70&&grade<80)gc='C';if(grade>=60&&grade<70)gc='D';if(grade<60)gc='E';printf("百分制的成绩:%0.1lf,五分制的成绩:%c\n",grade,gc);}Copyright©2000-2011王灿辉.AllRightsReserved.选择结构程序设计//将百分制的成绩转化为五分制的成绩#include<stdio.h>voidmain(void){doublegrade;//百分制的成绩chargc;//五分制的成绩printf("请输入百分制的成绩:");scanf("%lf",&grade);if(grade>=90)gc='A';elseif(grade>=80)gc='B';elseif(grade>=70)gc='C';elseif(grade>=60)gc='D';elsegc='E';printf("百分制的成绩:%0.1lf,五分制的成绩:%c\n",grade,gc);}Copyright©2000-2011王灿辉.AllRightsReserved.选择结构程序设计//将百分制的成绩转化为五分制的成绩#include<stdio.h>voidmain(){doublegrade;//百分制的成绩chargc;//五分制的成绩printf("请输入百分制的成绩:");scanf("%lf",&grade);gc=(grade>=90?'A':grade>=80?'B':grade>=70?'C':grade>=60?'D':'E');printf("百分制的成绩:%0.1lf,五分制的成绩:%c\n",grade,gc);}Copyright©2000-2011王灿辉.AllRightsReserved.选择结构程序设计#include<stdio.h>voidmain(){doublegrade;chargc;printf("请输入百分制的成绩:");scanf("%lf",&grade);switch(int(grade/10)){case10:case9:gc='A';break;case8:gc='B';break;case7:gc='C';break;case6:gc='D';break;default:gc='E';}printf("百分制的成绩:%0.1lf,五分制的成绩:%c\n",grade,gc);}Copyright©2000-2011王灿辉.AllRightsReserved.选择结构程序设计//将百分制的成绩转化为五分制的成绩#include<stdio.h>voidmain(){doubleg;chargc;charg_str[][7]={"优秀","良好","中等","及格","不及格"};printf("请输入成绩:");scanf("%lf",&g);gc=(g>=90?'A':g>=80?'B':g>=70?'C':g>=60?'D':'E');printf("百分制的成绩:%0.1lf,五分制的成绩:%s\n",g,g_str[gc-'A']);}Copyright©2000-2011王灿辉.AllRightsReserved.选择结构程序设计Ø逻辑表达式错误(优先级、||与&&混淆、用,代替||等)。Ø复合语句没有加{},例如:if(条件)写成:if(条件){<语句1>;<语句1>;<语句2>;<语句2>;}Copyright©2000-2011王灿辉.AllRightsReserved.选择结构程序设计if(……)printf("只有该语句属于if语句!\n");printf("该语句即使有缩进排列也不属于上述的if语句!想属于上述的if语句必须加上{}!\n");else{//……}Ø注意:缩进排列只是给人看,计算机只能按语言的语法理解。Copyright©2000-2011王灿辉.AllRightsReserved.选择结构程序设计Ø在if后错加分号:导致逻辑(Logic)错误。下述语句在VC++6.0环境下,编译时会得到警告:warningC4390:';':emptycontrolledstatementfound;isthistheintent?if(…);{//......}Ø很多初学者易犯这类错误,务必注意!Copyright©2000-2011王灿辉.AllRightsReserved.选择结构程序设计Ø下述片段导致编译(语法,Syntax)错误if(条件);{//语句1......}else{//语句2......}Copyright©2000-2011王灿辉.AllRightsReserved.选择结构程序设计Ø程序正确吗?if(…);else{//......}Ø等价于:if(!(…)){//......}Copyright©2000-2011王灿辉.AllRightsReserved.选择结构程序设计复习Øif语句,if_else语句,if_elseif_..._elseif_else语句,注意缩进排列的写法。Ø当存在嵌套时,出现if-then-else的配对错误。嵌套if语句:else语句总是和最近一个还没有匹配的then配对。Øif(1<=month<=12)…报错吗?不报错又是什么含义?Copyright©2000-2011王灿辉.AllRightsReserved.选择结构程序设计复习Øswitch语句的分支未加break;语句。Ø混淆=和==,例如:if(a=2)printf("a=2");写成:if(2=a)printf("a=2");可以在编译时检测出错误!Øif(a&b&c>0)…报错?含义是?Ø混淆各种运算符的优先级,如:if(c=getchar()!=EOF)……Copyright©2000-2011王灿辉.AllRightsReserved.选择结构程序设计复习Øif(x)中的x与下面条件()等价。A.x==0B.x!=0C.x=0D.x==1Ø使用最合理的表达方式,如:Ømax=(max>=a?max:a);Ø不如改写为:if(max<a)max=a;BCopyright©2000-2011王灿辉.AllRightsReserved.选择结构程序设计复习Ø要用C语言表示数学式子a≤b≤c,正确的表达式是()。A.a<=b<=cB.(a<=b)||(b<=c)C.(a<=b)&(b<=c)D.(a<=b)&&(b<=c)DCopyright©2000-2011王灿辉.AllRightsReserved.选择结构程序设计复习Ø已知charch;判断ch是否为大写字母的正确的表达式是()。A.'A'<=ch<='Z'B.(ch>=65)&(ch<=90)C.(ch>='A')&&(ch<='Z')D.(ch≥'A')AND(ch≤'Z')Ø更好的判别方法是:isupper(ch)//必须#include<ctype.h>CCopyright©2000-2011王灿辉.AllRightsReserved.选择结构程序设计复习Ø执行下列程序段后,x,y,z的值是()intx=10,y=20,z=30;if(x>y)z=x;x=y;y=z;A.x=10,y=20,z=30B.x=20,y=30,z=30C.x=20,y=10,z=10D.编译时报告错误BCopyright©2000-2011王灿辉.AllRightsReserved.选择结构程序设计复习Ø执行下列程序段后,x,y,z的值是()intx=10,y=20,z=30;if(x>y){z=x;x=y;y=z;}A.x=10,y=20,z=30B.x=20,y=30,z=30C.x=20,y=30,z=10D.x=20,y=30,z=20ACopyright©2000-2011王灿辉.AllRightsReserved.本章介绍到此结束
本文档为【05-《高级语言程序设计(C)》选择结构】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
招财进宝
暂无简介~
格式:pdf
大小:3MB
软件:PDF阅读器
页数:0
分类:工学
上传时间:2018-04-04
浏览量:15