您好,欢迎访问三七文档
王小琼信息科技学院C语言程序设计第五章选择结构程序设计选择结构三种基本结构之一5.1关系表达式与逻辑表达式关系运算符====!=逻辑运算符&&||!a&&ba与b都是真(a、b非0),结果为真a||ba或b中有真,结果为真!a求反,若a为真,则!a为假●表达式的值真1,假0;●注意=与==的区别比较x=3(赋值)与x==3(等于)●在C语言中如何表示0x20?0x&&x20Ex2a=5,b=4,c=3求d=(abc)Ex4x=1,y=1求(!x||y--)Ex5c为小写字母用c语言如何表示?ab即54为真(1)1c即13为假(0)结果为001(先用y后减)结果为1Ex1inta=10,b=-1;求(ab)结果为1例子Ex3a=4求(!a)4非0即为真(1)!4即对真取反结果为0c='a'&&c='z'Ex6x=4,y=1求(++x)||(--y)5(真)--y不执行,y等于原值1结果为1判别是否是闰年•闰年的条件是符合下面二者之一:•1.能被4整除,但不能被100整除;•2.能被400整除;程序的三种基本结构及流程图表示1.结构化程序设计所有计算机程序可以用三种基本结构表示,这三种基本结构就是“顺序结构、分支结构以及循环结构”。2.基本结构描述:(1)顺序结构:计算机按在程序中语句的书写顺序执行程序。其执行语句的顺序过程可用如图形式表示。ABAB(流程图表示)(N-S结构图表示)特点:先执行A操作,再执行B操作,两者是顺序执行的关系。值得注意的是,在计算机中程序执行的顺序本质上是“顺序”执行的。但从概念上我们还是按上述定义来理解顺序结构。(2)分支结构:分支结构能根据运行时的情况自动选择要执行的语句组。见图e代表一个条件,当条件成立(e为真)时执行A,否则执行B。这种分支结构中只能执行其中的一个语句组(A或B)。两条路径会合在一起后,再出去。eAB真(Y)假(N)(3)循环结构:循环结构允许多次重复执行同一组语句。循环结构分两类:①“当型”循环结构:当条件成立时,重复执行一组语句。当e条件成立(e为真)时反复执行A操作,直到条件不成立(e为假)时才结束循环。eA真(Y)假(N)5.3if语句一if语句的形式形式1if(e)s1;e假真s1e—表达式s1—语句说明:先计算表达式e的值,若表达式e的值为真(非0),执行语句s1;否则不执行。形式2if(e)s1;elses2;真e假s1s2e—表达式s1、s2—语句说明:先计算表达式e的值,若表达式e的值为真(非0),执行语句s1;否则执行语句s2。Ex0305求给定整数的绝对值#includestdio.hmain(){intx;scanf(%d,&x);if(x%2)printf(%d是奇数\n,x);elseprintf(“%d是偶数\n,x);}x%2!=0奇数T偶数Fy=xYx0x0y=-xY#includestdio.hmain(){intx,y;scanf(%d,&x);if(x0)y=x;if(x0)y=-x;printf(x=%d,|x|=%d\n,x,y);}y=x;Ex0306判断一个数是奇数还是偶数二if语句的嵌套在if语句中又包含一个或多个if语句,称为if语句的嵌套Ex303编程计算分段函数:x+1x0y=xx=0x-1x0#includestdio.hmain(){intx,y;scanf(%d,&x);printf(x=%d,y=%d\n,x,y);}if(x=0)if(x0)y=x+1;elsey=x;elsey=x-1;嵌套的if语句的配对else总是和在它前面离它最近尚未配对的那个if配对x0y=x-1x=0假真真y=x+1y=x假●最好的办法为加大括号{}●嵌套的if语句的配对else总是和在它前面离它最近尚未配对的那个if配对二if语句的嵌套Ex0303分段函数求值x-1x0y=xx=0x+1x0if(x0)y=x-1;elseif(x==0)y=x;elsey=x+1;#includestdio.hmain(){intx,y;scanf(%d,&x);printf(x=%d,y=%d\n,x,y);}解法1解法2if(x=0)if(x0)y=x+1;elsey=x;elsey=x-1;解法3y=x;if(x!=0)if(x0)y=x+1;elsey=x-1;程序举例设变量x=10.2,y=20.5,编程实现两个变量的值互换#includestdio.hmain(){floatx,y,t;scanf(%f%f,&x,&y);printf(x=%f,y=%f\n,x,y);}t=x;x=y;y=t;tx=10.2y=20.5t=10.2x=10.2y=20.5t=10.2x=20.5y=20.5t=10.2x=20.5y=10.2算法:1定义变量,输入三个数a、b、c#includestdio.hmain(){}if(ab){t=a;a=b;b=t;}if(ac){t=a;a=c;c=t;}if(bc){t=b;b=c;c=t;}2对a、b、c从大到小排序①将a、b进行比较,大数存入a,小数存入b②将a、c进行比较,大数存入a,小数存入c(此时a为最大数)③将b、c进行比较,大数存入b,小数存入c(b比c大,从大到小排序为a、b、c)Ex302输入三个数,从大到小排序后输出复合语句:用{}括起来的几个语句,在语法上作为一个语句使用。printf(%f%f%f\n,a,b,c);floata,b,c,t;printf(Inputa,b,c:“);scanf(%f,%f,%f,&a,&b,&c);3输出从大到小排序后数a、b、c三条件运算符(三目运算符)Ex设a=4,b=3,c=2,执行下面的if语句后,c=?if(ab)if(b0)c=0;elsec++;●如何改变嵌套的if语句的配对⑴加语句括弧if(ab){if(b0)c=0;}elsec++;⑵用if语句的第②种形式if(ab)if(b0)c=0;else;elsec++;Exab?printf(%d\n,a):printf(%d\n,b);相当于if(ab)printf(%d\n,a);elseprintf(%d\n,b);e1?e2:e3e1、e2和e3是三个表达式。若e1的值为真(非0),则表达式的值为e2,否则表达式的值为e3形式:switch(整型表达式){case常量表达式1:语句1;case常量表达式2:语句2;…………case常量表达式n:语句n;default:语句n+1;}5.4switch语句Ex0308输入一个字符,判别是否大写字母,如果是将它转换成小写字母,否则不转换,然后输出最后的得到的字符#includestdio.hvoidmain(){charch;scanf(%c,&ch);ch=(ch='A'&&ch='Z')?(ch+32):ch;printf(%c\n,ch);}例如:根据考试成绩的等级,打印出评语。switch(grade){caseˊAˊ:printf(“优”);break;caseˊBˊ:printf(“良”);break;caseˊCˊ:printf(“中”);break;caseˊDˊ:printf(“及格”);break;caseˊEˊ:printf(“不及格”);break;default:printf(“error\n”);}结果为:?若grade为‘A’,则输出为:优优良中及格不及格errorEx设x=1,a=0,b=0switch(x){case0:b++;case1:a++;case2:a++;b++;}x=1,a++执行2次,b++执行1次,所以a=2,b=1012b++;a++;a++;b++;1(1)switch后的表达式类型C的新标准允许所有类型。(2)常量表达式1~n的值必须互不相同。(3)break语句用于跳出switch。在case后的语句都有break的情况下,case的出现次序不影响执行结果。(4)若没有break语句则执行结果不同。例如,若去掉上面例子中的5个break语句,程序执行时输入A,则输出结果为:优良中及格不及格error注意:举例Ex308用switch语句解Ex307#includestdio.hmain(){intx;printf(Pleaseinputx(0=x=100)\n);scanf(%d,&x);switch(x/10){case9:case10:printf(x=%d--A\n,x);case8:printf(x=%d--B\n,x);case7:case6:printf(x=%d--C\n,x);case5:case4:case3:case2:case1:case0:printf(x=%d--D\n,x);default:printf(x=%ddataerror!\n,x);}}分析程序的输出并修改程序Ex0309输入某学生的成绩,输出该学生的成绩和等级。A级:80~100;B级:70~80;C级:60~70;D级:60#includestdio.hintmain(void){floatscore;printf(Inputascore:);scanf(%f,&score);if(score=80)printf(%fisA\n,score);elseif(score=70)printf(%fisB\n,score);elseif(score=60)printf(%fisC\n,score);elseprintf(%fisD\n,score);return0;}score=80score=70score=60真假等级A真假输入score等级B等级D等级C真假Ex0306求ax2+bx+c=0的解d=b2-4ac1a=01次方程2d=0有两个相等实根3d0有两个不等实根4d0有两个共轭复根NS图1输入a,b,c2if(a==0){解一元一次方程的根-c/b;结束程序;}else解一元二次方程:先计算d=b*b-4*a*c;3if(d==0)输出两个相等的实根-b/(2*a);elseif(d0){x1=(-b+sqrt(d))/(2*a);x2=(-b-sqrt(d))/(2*a);输出两个不相等的实根x1,x2;}else{根的实部rp=-b/(2*a);根的虚部ip=sqrt(-d)/(2*a);输出两个共轭复根;}算法讨论输出两个相等的实根真假a==0计算d=b*b-4*a*c输出一次方程的根真假d0真假d==0计算并输出两个共轭复根计算并输出两个不相等的实根x1,x2程序#includestdio.h#includemath.hmain(){floata,b,c,d,x1,x2,rp,ip;printf(Inputa,b,c:);scanf(%f,%f,%f,&a,&b,&c);if(a==0){printf(x=%f\n,-c/b);gotoexit;}elsed=b*b-4*a*c;if(d==0)printf(x1=x2=%f\n,-b/(2*a));elseif(d0){x1=(-b+sqrt(d))/(2*a);x2=(-b-sqrt(d))/(2*a);printf(x1=%f,x2=%f\n,x1,x2);}else{rp=-b/(2*a);ip=sqrt(-d)/(2*a);printf(complexroot:\n);printf(x1=%f+%fi\n,rp,ip);printf(x2=%f-%fi\n,rp,ip);}exit:;}gotoexit;无条件转向语句,exit是语句标号exit:;带标号的空语句
本文标题:5选择结构程序设计
链接地址:https://www.777doc.com/doc-3815058 .html