语言程序设计公共课第4章选择结构_第1页
语言程序设计公共课第4章选择结构_第2页
语言程序设计公共课第4章选择结构_第3页
语言程序设计公共课第4章选择结构_第4页
语言程序设计公共课第4章选择结构_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

第四章选择结构

选择结构也称分支结构。它有选择地(依据一定的条件)执行一个语句或执行两个或多个语句中的某一个语句。

C语言中表示选择结构的语句是if、ifelse和switch语句第四章选择结构

一、if语句

if语句的语法形式为:

if(表达式) 语句 语义:如果表达式的值不等于0(称条件为真),则执行“语句”,否则“语句”不被执行。

if语句中的表达式就是条件,语法规定,表达式必须加括号。

表达式后的语句称为内嵌语句,可以是任意C合法语句。表达式内嵌语句

例:从键盘输入一个整数,如果小于60则输出该数,否则不输出。#include<stdio.h>voidmain(){ inta; scanf("%d",&a); if(a<60) printf("a=%d\n",a);//该语句是否执行,由a的值决定}例:输入任意两个整数,先输出小数,再输出大数。#include<stdio.h>voidmain(){ inta,b,t; scanf("%d%d",&a,&b); if(a>b) {t=a; a=b; b=t; }//注意加大括号

printf("%d\t%d\n",a,b);

}第四章选择结构作为条件的表达式可以是算术表达式,但最常见的是:

关系表达式和逻辑表达式。二、关系表达式关系运算符:>>=<<===!=关系运算符的运算对象是算术表达式(包括变量和常量)。关系表达式的运算结果是0或者1。例:voidmain(){ inta=3,b; b=a!=3; printf("b=%d\n",b); b=a==3;//注意=和==的区别

printf("b=%d\n",b);}三、逻辑表达式逻辑运算符:||&&!逻辑运算符的运算对象一般是关系表达式。例如:输入一个整数,如果在56~59之间,则输出该数。voidmain(){inta; scanf("%d",&a); if(a>=56&&a<60)//不能写成:56<=a<60 printf("a=%d\n",a);}例如:输入一个整数,如果该数小于60或大于90,则输出。voidmain(){ inta; scanf("%d",&a); if(a<60||a>=90) printf("a=%d\n",a);}逻辑运算符的优先级和结合性优先级从高到低的次序为

!,算术运算符,关系运算符,&&,||,赋值运算符

例如:a=f>0||b+!c<d&&e>0结合性:&&和||是左结合的,!是右结合的。

例如:a>0&&b>0&&c>0!++a在C语言中,非0为真,0为假。关系表达式和逻辑表达式的计算结果为1或0,表示真或假inta=5,b=8;if(a)printf(“表达式a的结果为真”);if(a==5&&b)printf(“表达式(a==5&&b的结果为真”);

在计算含有&&和||运算符的逻辑表达式时,C语言规定:只对能够确定整个表达式值所需要的最少数目的子表达式进行计算。

也就是说,当按运算规则计算出一个子表达式的值之后便可以确定整个逻辑表达式的值时,后面的子表达式就不需要再计算了。intx=2;printf(“%d“,0&&(x=6));/*输出0*/printf(“x=%d”,x);/*输出x=2*/printf(“%d“,‘0’&&(x=6));/*输出1*/printf(“x=%d”,x);/*输出x=6*/测试一个正整数是否能被另一个正整数整除。intn,d;scanf(“%d,%d”,&n,&d);if(n%d)printf(“%d不能被%d整除.\n”,n,d);或写成if(n%d!=0)printf(“%d不能被%d整除.\n”,n,d);if(n%d!=0)printf(“%d不能被%d整除.\n”,n,d);elseprintf(“%d能被%d整除.\n”,n,d);求三个整数的最小值inta,b,c,min;scanf(“%d,%d,%d”,&a,&b,&c);第一种办法:min=a;if(min>b)min=b;if(min>c)min=c;第二种办法:if(a<=b&&a<=c)min=a;if(b<=a&&b<=c)min=b;if(c>=a&&c<=b)min=c;第一种办法的计算量比较小。注意:if(a>b);{temp=a;a=b;b=temp;}

变成两条语句if(a>b);{temp=a;a=b;b=temp;}第四章选择结构四、ifelse语句语法:if(表达式) 语句1else

语句2语义:如果表达式的值非0,则执行“语句1”,否则执行“语句2”。表达式内嵌语句1内嵌语句2例:输入两个整数,输出其中的较大者。程序1:main(){inta,b,max;scanf(“%d%d”,&a,&b);if(a>b)max=a;elsemax=b;printf(”max=%d\n”,max);}程序2:main(){inta,b;scanf("%d%d",&a,&b);if(a>b) printf("max=%d\n",a);else printf("max=%d\n",b);}例:输入三个整数,输出其中最大者(求最小者?)。main(){inta,b,c,max;scanf("%d%d%d",&a,&b,&c);if(a>b) max=a;else max=b;if(max<c) max=c;printf("max=%d\n",max);}另一种写法:min=a;if(min>b)min=b;第四章选择结构五、if语句的嵌套if(表达式) 语句1else

语句2 在ifelse语句的语法中,语句1和语句2可以是任何可执行语句,当然也可以是if语句。如果if语句的内嵌语句又包含if语句,称为if语句的嵌套。 通过if语句的嵌套,可以表示多分支结构。常用的几种形式:if(表达式1){if(表达式2)

语句1}else

语句2if(表达式1){if(表达式2)

语句1else

语句2}else

语句3if(表达式1){if(表达式2)

语句1else

语句2}else{if(表达式3)

语句3else

语句4}大括号是必须的。大括号不是必须的。if(表达式1){if(表达式2)

语句1}else

语句2if(表达式1)if(表达式2)

语句1else

语句2if(表达式1)if(表达式2)

语句1else

语句2C语言规定,else总是与它上面最近的一个未配对的if配对。if语句的嵌套很容易令人混淆,应当特别注意if与else的配对关系。if(表达式1){if(表达式2)

语句1else

语句2}例:已知一元二次方程ax2+bx+c=0的系数a,b,c,求方程的根。 scanf("%f%f%f",&a,&b,&c); if(fabs(a)<1e-6) if(fabs(b)<1e-6) printf("方程无解"); else printf("方程有唯一解:%f",-c/b); else {d=b*b-4*a*c; if(d>=0){ x1=(-b+sqrt(d))/(2*a); x2=(-b-sqrt(d))/(2*a); printf("x1=%f\tx2=%f\n",x1,x2); } else {r=-b/(2*a); i=sqrt(-d)/(2*a); printf("x1=%f+%fi\n",r,i); printf("x2=%f-%fi\n",r,i); } }}if…elseif语句(多分支语句)if(表达式1)语句1elseif(表达式2)语句2elseif(表达式3)语句3elseif(表达式4)

语句4else

语句5if(表达式1)语句1elseif(表达式2)语句2elseif(表达式3)语句3elseif(表达式4)

语句4else

语句5多分支例子:学生百分制分数转换成五级制成绩。90~100分为A;80~89分为B;70~79分为C;60~69分为D,0~59分为E。scanf(“%d”,&score);if(score>100)printf(“Error:thescoreisoutofrange!\n”);elseif(score>=90)printf(“YourgradeisanA.\n”);elseif(score>=80)printf(“YourgradeisanB.\n”);elseif(score>=70)printf(“YourgradeisanC.\n”);elseif(score>=60)printf(“YourgradeisanD.\n”);elseprintf(“YourgradeisanE.\n”);编一程序,由键盘输入字符,然后显示该字符是否是一个数字字符,大写字符,小写字符、一个空格或其它字符。 charc=getchar(); if(c>=‘0’&&c<=‘9’) printf(“该字符是数字字符”); elseif(c>=‘A’&&c<=‘Z’) printf(“该字符是大写字符”); elseif(c>=‘a’&&c<=‘z’) printf(“该字符是小写字符”); elseif(c==‘’) printf(“该字符是空格字符”); else printf(“该字符是其它字符”);六、条件运算符与条件表达式条件运算符(三目运算符)?:条件表达式格式:表达式1?表达式2:表达式3条件表达式的结算结果:如果“表达式1”的值非0,取“表达式2”的值作为条件表达式的值,否则取“表达式3”的值作为条件表达式的值。例如:max=a>b?a:b;等价于:if(a>b)max=a;elsemax=b;

又如:if(a>b)printf(“max=%d\n”,a);elseprintf(“max=%d\n”,b);可写成:

printf(“max=%d\n”,a>b?a:b);条件运算符的优先级高于赋值运算符,但是低于关系运算符和算术运算符。结合性:自右至左。例如:

a<b?a:c>d?c:d等价于a<b?a:(c>d?c:d)不是(a<b?a:c)>d?c:da-b+c七、switch语句语法:

switch(表达式)

{case常量表达式1:语句序列1[break;]case常量表达式2:语句序列2[break;] …… case常量表达式m:语句序列m[break;][default:语句序列m+1]}case‘A’+3:例:输入年,月,输出该月有几天,程序如下:intYear,Month,Days;printf("请输入年,月:");scanf("%d%d",&Year,&Month);switch(Month){ case1: case3: case5: case7: case8: case10: case12:Days=31;break; case4: case6: case9: case11:Days=30;break; case2:if((Year%400==0)||(Year%4==0)&&(Year%100!=0))Days=29; else Days=28;}printf("Days=%d\n",Days);编程实现两个实数的四则运算。例如:输入26.3+89.5,则输出26.300000+89.50000=115.800000#include<stdio.h>voidmain(){doublex,y;charop;scanf(“%lf%c%lf”,&x,&op,&y); switch(op)

温馨提示

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

评论

0/150

提交评论