第2章 选择结构(C语言程序设计)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第2章选择程序结构设计2.1问题的提出2.1.1问题从键盘输入3个不同的整数,分别存放到变量x,y,z中,然后通过判断输出3个数中的最大数,最大数存放在变量max中。2.1.2问题分析输入x,y,z三个数Xy?YNMax=xMax=yMaxzYNMax=z输出max结束2.1.3程序的实现/*程序功能:从3个数中找出最大数*/#include“stdio.h”voidmain(){intx,y,z,max;printf(“\n从键盘上输入三个整数:”);scanf(“%d%d%d”,&x,&y,&z);if(xy)max=x;elsemax=y;if(maxz)max=z;Printf(“\nThemaxis%d.\n”,max);}程序中变量a和b说明时初始化为3和5,x、y、z是由赋值语句得到值的。2.2与选择结构有关的运算符符和表达式.2.2.1关系运算符和关系表达式用关系运算符将两个运算对象连接起来形成的表达式,称为“关系表达式”。.关系运算符的作用是比较左、右两个运算对象,测试它们之间是否具有所要求的关系。关系表达式的最终结果是逻辑值:如果关系成立,则表达式取逻辑值“真”,用数值1表示;如果关系不成立,则表达式取逻辑值“假”,用数值0表示。关系表达式中的运算对象可以是数值型的,也可以是字符型的。若是字符型的,则是按照它们的ASCII码值来进行比较。..要特别区分符号“==”和符号“=”。前者是关系运算符,表示检验左右两个量之间是否具有“等于、相等”的关系;后者是赋值运算符,表示把右边的表达式值赋给(或存入)左边的变量。试分析下面的程序输出。例:#includestdio.hmain(){inta=3,b=5,x,y,z;x=ab;y=ab;z=a==b;printf(x=%d,y=%d,z=%d\n,x,y,z);}(1)(2)现在变量a的值为3,b的值为5,关系ab和a==b不成立,关系ab成立。因此顺序执行3条赋值语句后,分别把值0赋给变量x,值1赋给变量y,值0赋给变量z。printf()最终输出为:x=0,y=1,z=0逻辑非运算符是一个单目运算符,它作用在其右的运算对象上,运算结果是得到运算对象的“反”。2.2.2逻辑运算符与逻辑表达式.C语言的逻辑运算符及其含义名称运算符运算对象个数含义逻辑非!单目真为“假”,假为“真”逻辑与&&双目左右都成立才为“真”逻辑或||双目左右有一个为真时就为“真”.C语言逻辑运算符的运算规则aba&&ba||b000001011001!a11111100.逻辑非运算符:!1..比如:intx=5;。因x不为0,表示逻辑值为1。因此,!x的值为0。另外,x−5的值是0,所以,表达式!(x−5)的值为1。这就是说,若要将一个条件的含义在原来的基础上“反转”过来,用“!”就能够达到目的。该运算符作用在左、右两个运算对象上,只有当它们同时为真时,整个逻辑表达式才为真;只要其中有一个为假,整个逻辑表达式就是假。所以,若希望两个条件都为真时才做某事,就应把它们放在“&&”的两侧。.逻辑与运算符:&&2..比如逻辑表达式:7&&9。由于左、右都是非0数值,表示为真,因此整个表达式取值为真(即1)。又如逻辑表达式:100&&(8−8),左边为真,右边为假,所以整个表达式的取值为假(即0)。.逻辑或运算符:||3.该运算符作用在左、右两个运算对象上,只要它们中有一个为真时,整个逻辑表达式就取值真;只有它们都为假时,整个逻辑表达式才是假。所以若希望两个条件中的一个为真时就去做某件事,那就应把这两个条件放在“||”的两侧。.比如逻辑表达式:7||0。由于左边为真,所以整个表达式取值为真(即1)。又比如有说明:“inta=5,b=8;”,那么表达式“ab||a!=b”的结果为真。这是因为虽然关系表达式:ab不成立,但是关系表达式a!=b却成立。用关系运算符只能形成简单的比较条件。要把多个简单的条件组合成复杂的条件,就必须利用逻辑运算符。通过逻辑运算符组成复杂的条件4..要表示“x大于a小于b”的数学关系“axb”,在C语言里要写成:xa&&xb.再去计算这个逻辑表达式右边的条件,而直接把逻辑值0赋给变量x。正因为没有去计算右边表达式的取值,所以并没有做把关系表达式ab的值赋给变量n的操作。即变量n仍保持它原有的值10。变量m、n、a、b的初值都是10。赋值语句:x=(m=ab)&&(n=ab);是把表达式(m=ab)&&(n=ab)的值赋给变量x。&&左右两边也都是赋值表达式:左边把表达式ab的值赋给变量m;右边把表达式ab的值赋给变量n。对于&&运算符,只要左边的运算对象为假,则整个表达式肯定取值“假”(数值0),C编译程序不再对右边的运算对象进行求值。参加逻辑运算时,用非0值表示逻辑真,用值1表示运算结果的逻辑真。参加逻辑运算时,都以数值0表示逻辑假。关于逻辑运算符的几点注意.(1)(2)(3)对于||运算符,只要左边的运算对象为真,则整个表达式肯定取值“真”(数值1),C编译程序不再对右边的运算对象进行求值。试分析下面的程序输出。例:(1)#includestdio.hmain(){intx,m,n,a,b;m=n=a=b=10;x=(m=ab)&&(n=ab);printf(x=%d,m=%d,n=%d\n,x,m,n);}输出结果应该是:x=0,m=0,n=10(2)(3)计算该表达式值时,左边的关系表达式ab不成立,因此变量m的值为0。既然&&左边的条件已取值假,于是C语言就不程序要求用户在键盘上输入一个整型数,存放到变量x。然后把条件表达式(x%2==0)?0:1的值赋给变量y。2.2.3条件运算符与条件表达式在C语言里,由“?”和“:”两个符号组合成为条件运算符,是C语言里唯一的一个三目运算符。一般形式为:表达式1?表达式2:表达式3其中,表达式1是一个逻辑表达式,表达式2和表达式3的类型必须相同。由此而构成的整个表达式,称为“条件表达式”。..该运算符的含义是先计算表达式1的值。若值为真,则整个条件表达式以表达式2的值作为自己的值;若其值为假,则整个条件表达式以表达式3的值作为自己的值。试分析下面程序的功能。例:(1)#includestdio.hmain(){intx,y;scanf(%d,&x);y=(x%2==0)?0:1;printf(x=%d,y=%d\n,x,y);}(2)只当x是偶数时,x%2的余数才为0,即“x%2==0”才成立。所以该条件表达式的含义是:若输入的是偶数,那就把0赋给变量y;否则,就把值1赋给变量y。编写程序,从键盘输入字符。如果字符是英文小写字母,则将其转换成大写后输出,否则输出原字符。例:#includestdio.hmain(){charx;printf(Enteracaracter!);scanf(%c,&x);(x='a'&&x='z')?printf(%c\n,x−'a'+'A'):printf(%c\n,x);}(1)程序实现(2)分析与讨论判断一个字母是否是小写的条件是:x=‘a’&&x=‘z’(或x=97&&x=122);判断一个字母是否是大写的条件是:x=‘A’&&x=‘Z’(或x=65&&x=90)。..大、小写英文字母的ASCII码值是连续的,可容易地进行转换。比如,利用公式:x−‘a’+‘A’或x−32可将x里的小写字母转换成大写;利用公式:x-'A'+‘a’或x+32可将x里的大写字母转换成小写。.利用条件运算符“?”和“:”,构成程序中所需要的条件表达式:(x='a'&&x='z')?printf(%c\n,x−'a'+'A'):printf(%c\n,x)2.3.1if单分支选择语句2.3条件语句..C语言程序中,实现选择结构的手段,一是用if语句,一是用switch语句。其中if语句有3种形式:if单分支选择,if…else双分支选择,以及if…elseif多分支选择。if单分支选择语句的一般格式是:.如果在条件成立时所要做的事情需要用几条语句来表达,那么格式中的语句就应该通过使用花括号以复合语句的形式出现。.if单分支选择语句的执行流程图条件语句真假(后续语句)if(条件)语句;当执行中遇到if时,若圆括号里的条件取值为非0(即条件成立),则执行语句;否则(即取值为0,条件不成立)就不执行if中的语句,而去执行该单分支选择语句的后续语句。比如两次运行该程序,第1次输入242,第2次输入−108,其结果如图所示。例:编写程序,从键盘输入一个整数,然后输出其绝对值。(1)程序实现#includestdio.hmain(){intnum;printf(Inputyourinteger:\n);scanf(%d,&num);if(num0)num=−num;printf(Theabsolutevalueis%d\n,num);}(2)分析与讨论.程序中,条件num0成立时,就执行单分支语句:“num=−num;”。这样,在变量num里,总保持是一个正数,即它的里面存放的是输入数据的绝对值。.打印语句:printf(Theabsolutevalueis%d\n,num);是单分支语句的后续语句,无论“num=−num;”是否做,这条打印语句总是要执行的。在具体编写程序时,常用printf()给出提示信息。比如程序一开始给出语句:printf(Inputyourinteger:\n);即是提示用户输入数据。这样的做法,使得编写的程序具有人性化,界面更为显友好。..#includestdio.hmain(){intx,y,swap;charch;printf(Inputtwointegers.\n);scanf(%d%d,&x,&y);getchar();printf(x=%d,y=%d\n,x,y);printf(Inputacharacter.\n);ch=getchar();if(ch=='y'||ch=='Y'){swap=x;x=y;y=swap;}printf(x=%d,y=%d\n,x,y);}例:编写一个程序,输入两个整数,随之输出。然后,再输入一个字符,如果字符是y或Y,则将两个整数交换后输出。(1)程序实现(2)分析与讨论复合语句,实现数据交换.判断ch里输入的是小写y或大写Y时,其条件应该写成:ch=='y'||ch=='Y'不能写成:ch='y'||ch='Y'.两个变量间内容的交换,不能写成:x=y;y=x;因为x、y对应的都是内存单元,执行“x=y;”后,原来x里的值就没有了。再做“y=x;”,达不到交换的目的。.为实现单元内容的交换,应设一临时变量swap,以它为中介,分三步完成变量间的交换。①swap=x②x=y③y=swapxyswap#includestdio.hmain(){intfir,sec;printf(Pleaseentertwonumbers:);scanf(%d%d,&fir,&sec);if(firsec)printf(firstisgreaterthansecond!);elseprintf(firstisnotgreaterthansecond!);printf(Alldone!\n);}编写程序,输入两个整数,若第1个大于第2个,显示信息firstisgreaterthansecond!,否则显示信息:firstisnotgreaterthansecond!。最后显示信息:Alldone!。2.3.2if…else两路选择结构.if…else双分支选择语句的一般形式是:例:(1)程序实现(2)分析与讨论.这是典型的双分支选择结构,可根据条件“firsec”(第1个整数是否大于第2个)作为判断条件。条件语句1真假(后续语句)语句2if…else双分支选择语句的执行流程图。.if(条件)语句1;else

1 / 20
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功