资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,4,章 选择程序设计,2,回顾,了解语句的基本概念,了解语句的分类,掌握字符输入输出函数,getchar,和,putchar,掌握格式输入输出函数,scanf,和,printf,掌握顺序程序设计,3,教学目标,熟练使用关系运算符,熟练使用逻辑运算符,掌握简单的条件语句的使用,熟练使用多重,if,结构,熟练使用嵌套,if,结构,熟练使用,switch,结构,理解条件运算符的用法,掌握选择程序设计的基本方法,4,#include ,main(),char c;,printf(,输入一个字符,:);,c=getchar();,c=c+32;,putchar(c);,选择程序设计引例,例,:,输入一个大写字母,,转化为小写字母输出。,#include ,main(),char c;,printf(,输入一个字符,:);,c=getchar();,if(c=A&c=65&c,!=,=,=,=,、,=,、,、,关系运算符,&|,短路运算,:逻辑表达式在执行时,先处理左边。如左边已能决定此逻辑表达式的结果,则右边不执行。因此,在,&,逻辑表达式中,应把,false,可能性较大的条件放在左边,在,|,表达式中,应把,true,可能性较大的条件放在左边,这样可以减少程序执行的时间。,例如,假设,n1,、,n2,、,n3,、,n4,、,x,、,y,的值分别为,1,、,2,、,3,、,4,、,1,、,1,,则求解表达式“,(x=n1n2)&(y=n3n4)”,后,,x,的值变为,0,,而,y,的值不变,仍等于,1,!,10,将关系写成表达式,A,:洞庭最大,洪泽最小,鄱阳第三,B,:洪泽最大,洞庭最小,鄱阳第二,太湖第三,C,:洪泽最小,洞庭第三,D,:鄱阳最大,太湖最小,洪泽第二,洞庭第三,用,a,b,c,d,分别表示四个湖。,a,表示洞庭,,b,表示洪泽,,c,表示鄱阳,,d,表示太湖。,A,学生的回答可表示为:,a=1&b=4&c=3,B,学生的回答可表示为:,a=4&b=1&c=2&d=3,C,学生的回答可表示为:,a=3&b=4,D,学生的回答可表示为:,a=3&b=2&c=1&d=4,11,条件结构,条件结构就是需要根据不同条件进行判断,然后执行不同的操作,简单,if,语句的一般形式为:,if,(,),如果条件为真,,if,语句执行一个语句或一组语句;,如果条件为假,则执行,if,语句后面的语句(如果有)。,12,条件结构,if-else,语句的一般形式为:,if,(,),else,如果条件为真,执行,if,后面的一个语句或一组语句;,如果条件为假,则执行,else,后面的语句。,13,#include,main()/*,求,a,和,b,的最大值*,/,int a,b,max;,printf(Input a and b=);,scanf(%d%d,max=a;,if(max b)/*,如果,ab,,将,a,存入,max*/,max=a;,else /*,否则,将,b,存入,max*/,max=b;,printf(The max of a and b:%dn,max);,15,if-else,语句的使用,#include,main(),int num;,printf(n,请输入一个整数,:,);,scanf(%d,if(num%2)=0),printf(%d,是一个偶数,。,n,num);,else,printf(%d,是一个奇数,。,n,num);,if(num%2),printf(%d,是一个奇数。,n,num);,else,printf(%d,是一个偶数。,n,num);,16,简单,if,和,if-else,语句的使用,求分段函数值,x+1 x,0,y=,x-1 x,0)y=x+1;,if(x=0),y=x+1;,else,y=x-1;,y=x-1;,if,(x=0),y=x+1;,y=x+1;,if,(x=90),printf(n,优,);,else if(grade=80),printf(n,良,);,else if(grade=60),printf(n,中,);,else,printf(n,差,);,printf(n);,20,嵌套,if,结构就是,将整个,if,块插入另一个,if,块中,嵌套,if,结构,if(,表达式,1,),if(,表达式,2,),if(,表达式,3,),语句,;,else,语句,;,21,if(x 0),if(y 1),z=1;,else,/*,这个,else,部分属于哪个,if,?,*,/,z=2;,嵌套,if,结构,C,语言规定,每个,else,部分总属于前面最近的那个缺少对应的,else,部分的,if,语句。,提倡使用大括号括起来,以避免看起来有二义性。,?,22,例:,根据平面上一点,M(x,y),的坐标判断点,M,所在的象限。,分析:,将,x,和,y,的值分别与,0,进行比较,即可判断出点,M(x,y),所处的象限。在这里,不考虑坐标轴上的点,认为它们可以处于任意象限。,嵌套,if,结构的使用,23,#include,main(),float x,y;,printf(input x,y:);,scanf(%f,%f,if,(x 0),if,(y 0)printf(,在第一象限,n);,else,printf(,在第四象限,n);,else,if,(y 0)printf(,在第二象限,n);,else,printf(,在第三象限,n);,嵌套,if,结构的使用,24,switch-case,语句是多路判断语句,switch,语句计算条件表达式并对照多个常数值进行检查,switch,结构,switch(,表达式,),case,常量,1:,语句,;,break;,case,常量,2:,语句,;,break;,default:,语句,;,25,switch,结构,在使用,switch,结构时应注意以下几点:,在,case,后的各常量表达式的值不能相同,否则会出现错误;,在,case,后,允许有多个语句,可以不用,括起来;,每个,case,语句后一般情况下应该有一个,break,语句,用于退出,swith,结构;,各,case,和,default,子句的先后顺序可以变动,而不会影响程序执行结果;,default,子句可以省略。,26,例:,将百分制成绩划分为五段输出,用,switch,语句实现。,分析:,除不及格档次外,其他各等级中每个数的十位数字均相同(,100,除外),我们可以用成绩的十位数字作条件来写程序。设成绩为,score,,除以,10,取整后的结果为,k,。,switch,结构使用,27,#include,main(),int score,k;,printf(input a score:);,scanf(%d,k=score/10;,switch(k),case 10:,case 9:printf(,优秀,n);,break;,case 8:printf(,良好,n);,break;,case 7:printf(,中等,n);,break;,case 6:printf(,及格,n);,break;,default:printf(,不及格,n);,switch,结构,28,switch,结构使用,用户输入月份,显示该月的最大天数。,#include,main(),int month;,printf(n,请输入月份数,:);,scanf(%d,switch(month),case 4:,case 6:,case 9:,case 11:printf(n,最大天数为,30,。,n);break;,case 1:,case 3:,case 5:,case 7:,case 8:,case 10:,case 12:printf(n,最大天数为,31,。,n);break;,case 2:printf(n,最大天数为,28,或,29n);break;,default:printf(n,错误输入,n);,29,多重,if,结构和,switch,结构都可以用来实现多路分支,多重,if,结构用来实现两路、三路分支比较方便,而,switch,结构实现三路以上分支比较方便,在使用,switch,结构时,应注意分支条件要求是整型表达式,而且,case,语句后面必须是常量表达式,有些问题只能使用多重,if,结构来实现,例如要判断一个值是否处在某个区间的情况,比较多重,if,和,switch,结构,30,条件运算符,?,?,条件表达式,考试是,否及格,?,是,不是,真,表达式,1,假,表达式,2,31,例:,从键盘上输入任意一个字符,如果它是大写字母,则把它转换成小写字母输出;否则,不做转化,直接输出。,分析:,输入的字符只要在,A,和,Z,之间,就是大写字母,再加上,32,即可转换成小写字母。,#include,main(),char ch;,printf(Input a character:);,scanf(%c,ch=(ch=A&ch%cn,ch);,条件运算符,if(ch=A,32,选择程序设计,问题描述:,要求判别键盘输入字符的类别。可以根据输入字符的,ASCII,码来判别类型。由,ASCII,码表可知,ASCII,码值小于,32,的为控制字符。在,0,9,之间的为数字,在,A,Z,之间为大写字母,在,a,z,之间为小写字母,其余则为其它字符。,#include,main(),char c;,printf(n,请输入一个字符,:);,c=getchar();,if(c=0&c=A&c=a&c=z),printf(n,该字符是一个小写字母,。,n);,else,printf(n,该字符是其他字符,。,n);,33,选择程序设计,问题描述:,编写一个简单的计算器,实现两个整型数的四则运算。,#include,main(),int a,b;char op;,printf(n,输入操作数,1,运算符,操作数,2:);,scanf(%d,%c,%d,switch(op),case+:printf(n%d+%d=%dn,a,b,a+b);break;,case-:printf(n%d-%d=%dn,a,b,a-b);break;,case*:printf(n%d%d=%dn,a,b,a*b);break;,case/:printf(n%d/%d=%dn,a,b,a/b);break;,default:printf(n,运算符错误,!,);,34,选择程序设计,求某年某月的天数。,解题思路:,对年份进行闰年的判断,如果是闰年,,2,月份有,29,天;否则有,28,天。,对月份进行天数的判断,一个月有,30,天(,4,、,6,、,9,、,11,月),,31,天(,1,、,3,、,5,、,7,、,8,、,10,、,12,月),,28,天或,29,天(,2,月),35,选择程序设计,闰年的判断规则:,能被,400,整除,如,2000,年,,1600,年。,年份能被,4,整除,不能被,100,整除,如,1996,年,,2004,年。,逻辑表达式判断闰年,(year%400=0)|(year%4=0&year%100!=0),如果上述表达式的结果为,1,,则,year,是闰年;否则为非闰年。,36,选择程序设计,月份中天数的判断,switch,switch(month),case 1:,case 3:,case 5:,case 7:,case 8:,case 10:,case 12:/31,天,case 4:,case 6:,case 9:,case 11:/30,天,case 2:/,闰年,29,天,非闰年,28,天,37,#include,main(),int year,month;,printf(n,请输入年份和月份,:);,scanf(%d%d,switch(month),case 1:,case 3:,case 5:
展开阅读全文