C语言-选择分支结构程序设计课件_第1页
C语言-选择分支结构程序设计课件_第2页
C语言-选择分支结构程序设计课件_第3页
C语言-选择分支结构程序设计课件_第4页
C语言-选择分支结构程序设计课件_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

选择结构根据给定的条件是否满足,决定从给定的条件选择其一。分为:二路分支多路分支if…else…语句switch语句关系运算符和关系表达式关系运算符>大于

>=大于等于<小于

<=小于等于==等于

!=不等于说明:(1)六个关系运算符都是双目运算符;(2)由一个关系运算符连接两个对象形成的表达式称为关系表达式,这两个运算对象可以是算术表达式、字符表达式等。运算对象为字符数据时,比较按其ASCII码进行。例:inti=3,j=5;i*i+j*j>100;例:‘a’>‘b’(3)关系表达式的值可以作为整数值参与运算(4)与数学表达式的区别(5)注意区分“=”与“==”的差别例:inta=3,b=2,c=1,f;f=a>b>c;例:3<x<100逻辑运算符与逻辑表达式在C语言中有三个逻辑运算符&&逻辑与||逻辑或!逻辑非两个操作对象同时为真时,表达式的值为真。两个操作对象之一为真时,表达式的值为真。当操作对象的值为真,则表达式的值为假。说明:(1)&&和||是双目运算符,!是单目运算符(2)&&和||的运算级别低于关系运算符,!的运算级别高于关系运算符和算术运算符,

注意:

!的结合方向是从右向左。

&&和||的结合方向是从左向右,(3)不能确定的情况下,添加括号保证运算次序。

尽量避免复杂烦琐的逻辑表达式。例:a=10;b=20;c=30;a=(--b<=a)||(a+b!=c);a=?b=?a=1b=19(5)在逻辑表达式的求解中,并不是所有的逻辑运算符都被执行,只有在必须执行下一个逻辑运

算符才能求出表达式的解时,才执行该运算符。例:intx=-1;

执行了++x||++x||++x后,x的值是?

x=1(4)参加逻辑运算的运算对象可以是0(“假”)或

任何非0的数值(“真”);但运算后的结果和关系运算的结果一样,只能是逻辑值0和1。1.简单的if语句形式:if(表达式)语句执行过程:如果表达式值非0,执行该语句,然后执行if的下一个语句;否则直接执行if的下一个语句。例:

main(){inta,b,max;printf(”\n请输入两个数:”);scanf(”%d%d”,&a,&b);

max=a;if(max<b)max=b;printf(”max=%d”,max);}if语句例:输入三个整数x、y、z,把这三个数由小到大输出。输出x,y,x的值交换x,zx>z交换x,yx>y输入x,y,zYNYN交换y,zy>zYN#include<stdio.h>main(){intx,y,z,t;printf(“Pleaseinputthex,y,z:”);scanf(“%d%d%d”,&x,&y,&z);

if(x>y){t=x;x=y;y=t;}if(x>z){t=x;x=z;z=t;}if(y>z){t=y;y=z;z=t;}printf(“Smalltobig:%d%d%d\n”,x,y,z);}if语句2.if/else语句形式:if(表达式)语句1else语句2执行流程:

如果表达式值非0,执行语句1;否则,执行语句2;无论执行了哪一路分支之后,都执行if的下一条语句。例

if(x>y)max=x;elsemax=y;printf(”max=%d”,max);例.判断给定的某一年是否是闰年。分析:如果某年能被4整除而不能被100整除,或者能被400整除,那么该年就是闰年,否则就是平年。

if(year%4==0&&year%100!=0||year%400==0)#include<stdio.h>main(){intyear,leap=0;printf("\n请输入年份(yyyy):");scanf("%d",&year);

/*判断该年是否是闰年*/

if(year%4==0&&year%100!=0||year%400==0)

leap=1;

if(leap)

/*leap=1,即该年是闰年*/printf("%d年是闰年.\n",year);

else

/*leap=0,即该年是平年*/printf("%d年是平年.\n",year);}例.制作简单的猜数字游戏。程序运行时自动产生1~5之间的随机数,接着等待键盘输入猜的数字。如果猜对了,显示“猜对了”相关信息;否则,如果猜错了,则显示“猜错了”相关信息。分析:如何产生1~5之间的随机数?1)随机数产生:C语言提供srand()函数,配合rand()函数可产生介于0~32767之间的随机数(函数均包含在stdlib.h中)。srand((unsigned)time(NULL));

/*以做随机数产生器的种子,time()函数包含在time.h中

*/guess=rand();

/*以上面得到的种子产生0~32767的整数*/2)1~5之间的随机数:首先用rand()函数产生的随机数,然后对5求余(rand()%5),产生0~4之间的整数,然后再加1,即rand()%5+1就产生1~5之间的整数。#include<stdio.h>#include<stdlib.h>#include<time.h>main(){intdata,guess;

srand((unsigned)time(NULL));data=rand()%5+1;printf("请输入要猜的数字(限1-5):");scanf("%d",&guess);

if(guess==data)printf("猜对了!~_~,正确数字为%d!\n",data);

elseprintf("猜错了!0_0,正确数字为%d!\n",data);}

例:一个5位数,判断它是不是回文数,即12321是回文数,个位与万位相同,十位与千位相同。分析:分解出每一位数(万位、千位、十位和个位),然后判断。输出不是回文输出是回文ge=x%10shi=x%100/10qian=x%10000/1000输入的数字不是5位数wan=x/10000输入长整数wan>0&&wan<10wan==ge&&qian==shiYNYNmain(){longx;intge,shi,qian,wan;printf("pleaseinputthe5bitsnumber:\n");scanf("%ld",&x);wan=x/10000;

if(wan>0&&wan<10){qian=x%10000/1000;shi=x%100/10;ge=x%10;

if(ge==wan&&shi==qian)

printf("Itispalindromicnumber

!\n");

elseprintf("Itisnotpalindromicnumber

!\n");}

else printf(“Thenumberisnot5bits!\n");}3.if(表达式1)语句1

elseif(表达式2)语句2

elseif(表达式3)语句3

elseif(表达式m)语句melse语句n...例:有一个函数如下:x(x<1)y=2x+1(1≤x<10)5x-17(x≥10)编程序,输入x值,输出y值main(){floatx,y;printf("Inputx:");scanf("%f",&x);

if(x<1)y=x;

elseif(x<10)y=2*x+1;

elsey=5*x-17;printf("y=%f\n",y);}分析:根据输入字符的ASCII码来判别类型。

例.编写程序,要求判别键盘输入字符的类别。#include"stdio.h"main(){charc;printf("\nPleaseinputacharacter

:\n");c=getchar();

if(c<32)

printf("Itisacontrolcharacter

!\n");

elseif(c>=’0’&&c<=’9’)

printf("Itisadigit!\n");

elseif(c>=’A’&&c<=’Z’)printf("Itisacapitalletter!\n");

elseif(c>=’a’&&c<=’z’)

printf("Itisalowerletter!\n");

elseprintf("Itisothercharacter!\n");}说明:(1)三种形式的if语句中都出现的“表达式”,不仅只限于逻辑和关系表达式,还可以是任何类型的;(2)if语句中,判断条件表达式必须用()括起来,

条件后面不加分号,但语句之后有分号;(4)if和else后的语句可以只有一条,也可以使用{}包括的几条语句构成的复合语句。(3)else不是语句,不能单独使用,与if配对使用;(5)if(x)if(x!=0)(6)if(!x)if(x==0)例考虑下面程序的输出结果#include<stdio.h>main(){intx,y,t;scanf(“%d%d”,&x,&y);if(x>y)t=y;y=x;x=t;elsex++;y++;printf(“%d,%d\n”,x,y);}Compile

Error!if语句的嵌套在if语句中:

if(表达式)语句1else语句2语句1和语句2都可以是另外一条if语句if(表达式1)

if(表达式2)语句1

else语句2else

if(表达式3)语句3

else语句4if(表达式1)语句1else

if(表达式2)语句2

else语句3if(表达式1)

if(表达式2)语句1

else语句2else语句3说明:(1)else总是与最近的if匹配;(2)else不能单独出现,总是与if配对使用。例:main(){intx=2,y=-1,z=2;

if(x<y)if(y<0)z=0;elsez+=1;printf(“z=%d\n”,z);}

z=2编写原则:1、顺序执行的语句对齐;2、选择体向内缩进3~4字符;3、若选择体内嵌套if语句,则该

if语句的选择体亦继续向内缩进;4、若选择体内的语句多于1条,则必须使用{}括起来;5、原则上,选择体内只有一条语句时,可以不使用{}括起来,但如果该语句分成多行编写时,则使用{}具有更强的可读性。main(){……;if(a<b){……;if(c<d){ ……;}}else{……;}}条件运算符与条件表达式格式:表达式1?表达式2:表达式3意义:如果表达式1非0,此表达式取表达式2的值如果表达式1为0,此表达式取表达式3的值。例1:intm1=5,m2=3;m1>m2?(m1=1):(m2=-1)m1=?m2=?m1=1m2=3intx=1,y=2,z;z=x>y?++x:y++;x=?y=?z=?x=1y=3z=2例2:switch语句用来实现多路分支形式:switch(表达式){

case

常量1:语句序列1;

break;

case

常量2:语句序列2;

break;

case

常量n:语句序列n;

break;

default:

语句序列n+1;}执行过程:首先计算表达式的值,若该值与某个case后面的常量相等,则执行其后的语句序列,遇到break语句时,跳出switch语句;如果表达式的值与所有常量都不相等,若存在default则执行其后的语句序列,否则什么也不做。说明:switch语句中的表达式可以为任何类型,一般为整型或字符型,相应地常量的类型应与其相同;2.同一switch语句的各case常量值,必须互不相同;3.case常量相当于语句标号;执行switch语句时,找到与表达式值相等的某case常量,从此标号开始执行下去,对以后的标号不再比较,直到“}”为止;一般应该在每个case后的语句序列跟一个break语句以便跳出switch正确实现多分支,可认为break语句是case中的一部分。4.各个case后面的default语句出现的次序不影响结果;5.多个case可以共用一组执行语句.例main(){inti=10;switch(i){case9:i+=1;case10:i+=1;case11:i+=1;default:i+=1;}printf(“i=%d”,i);}i=13例main(){inta=1,b=0;switch(a){case1:switch(b){case0:printf(“**0**”);break;case1:printf(“**1**”);break;}case2:printf(“**2**”);break;}}**0****2**分析:求解此方程的解,应该考虑到各种可能的情况:当a=0时,不是二次方程。否则:1)当b2-4ac=0时,方程有两个相等的实根。2)当b2-4ac>0时,方程有两个不相等的实根。3)当b2-4ac<0时,方程有两个共轭的复根。选择分支结构程序举例例.求ax2+bx+c=0方程的解。#include<stdio.h>#include<math.h>main(){

floata,b,c,disc,x1,x2,realpart,imagpart;

printf("\n请输入方程的三个系数:(a=,b=,c=)\n");

scanf("a=%f,b=%f,c=%f",&a,&b,&c);

if(fabs(a)<=1e-6)

printf("该方程没有实根。\n");

elsedisc=b*b-4*a*c;

if(fabs(disc)<=1e-6)

printf("该方程有两个相等的实根:x1=x2=%8.4f\n",-b/(2*a));

elseif(disc>1e-6)

{

x1=(-b+sqrt(disc))/(2*a);

x2=(-b-sqrt(disc))/(2*a);

printf("该方程有两个不相等的实根:\nx1=%8.4f,x2=%8.4f\n",x1,x2);

}

else

{

realpart=-b/(2*a);

imagpart=sqrt(-disc)/(2*a);

printf("该方程有两个复根:\n");

printf("x1=%8.4f+%8.4fi\n",realpart,imagpart);

printf("x2=%8.4f-%8.4fi\n",realpart,imagpart);

}}例.一个超市商品信息管理系统,试编写主程序部分实现简单的菜单选择功能。#include”stdio.h”main(){intchoice;printf("\n\n\n********超市管理系统********\n\n");printf("1.录入商品信息\n\n");printf("2.打印商品信息\n\n");printf("3.更新商品信息\n\n");printf("4.商品信息查询\n\n");printf("5.商品信息统计\n\n");printf("6.商品销售排行\n\n");printf("0.退出系统\n\n");printf("请选择(0-6):");scanf("%d",&choice);

switch(choice){case1:

input_message();break;

/*录入模块*/

case2:

output_message();break;

/*输出模块*/

case3:

renew_message();break;

/*更新模块*/

case4:

inquire_message();break;

/*查询模块*/

case5:

count_message();break;

/*统计模块*/

case6:

sort_message();break;

/*排序模块*/

case0:break;

/*退出系统*/}}

例.请输入星期几的第一个字母来判断是星期几,如果第一

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论