第3章 分支结构程序设计_第1页
第3章 分支结构程序设计_第2页
第3章 分支结构程序设计_第3页
第3章 分支结构程序设计_第4页
第3章 分支结构程序设计_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

C语言程序设计(第3版)张磊编著清华大学出版社C语言程序设计第3章分支结构程序设计《C语言程序设计》(第3版)张磊编著

21世纪高等学校规划教材清华大学出版社C语言程序设计(第3版)张磊编著清华大学出版社分支结构的引入例3-1输入一个学生的两门课的成绩,若平均成绩不低于90分,则显示“优等生”,否则显示“要加油啊!”。1.程序/*programe3-1.c*/#include<stdio.h>voidmain(){inta1,a2,ave;printf("输入两门课的成绩:");scanf("%d,%d",&a1,&a2);ave=(a1+a2)/2;

if(ave>=90)/*分支控制*/printf("优等生!\n");

elseprintf("要加油啊!\n");}2.程序解析程序中的if-else命令用于实现分支控制,分支处理的条件是“ave>=90”。当ave>=90成立时,执行语句“printf(”优等生!\n“);”,输出字符串“优等生!”;否则,执行语句“printf(”要加油啊!\n“);”,输出字符串“要加油啊!”。第一次执行结果输入两门课的成绩:88,96优等生!第二次执行结果输入两门课的成绩:77,85要加油啊!C语言程序设计(第3版)张磊编著清华大学出版社第3章分支结构程序设计一、关系运算符和关系表达式二、逻辑运算符和逻辑表达式三、实现选择结构的控制语句四、选择结构程序举例关系运算符<<=>>===!=(6种)优先级赋值<关系(后2<前4)<算术关系表达式用关系运算符将两个表达式连接起来的式子.算术、关系、逻辑、赋值、常量。值真(1)假(0)举例已知:(a=3b=2c=1d=0)0a==b>cd==a>b+c1d=a>b+c?一、关系运算符和关系表达式0<a<201关系运算符含义实例>大于ave>90>=大于等于ave>=90<小于ave<90<=小于等于ave<=90==等于ave==90!=不等于ave!=90逻辑运算符

!(逻辑非)&&(逻辑与)||(逻辑或)运算规则优先次序赋值<||<&&<关系<算术<!(1)!:取逻辑值的相反值。(2)&&:参加运算的两个逻辑值都为真时,结果为真(1)。(3)||:参加运算的两个逻辑值都为假时,结果为假(0)。逻辑表达式用逻辑运算符将关系表达式和逻辑量连接起来的式子。举例已知:(a=1b=0)1a||b&&0!a&&(5>3)||b0双目单目二、逻辑运算符和逻辑表达式值逻辑量“真”、“假”。C语言编译系统中以数值1表示“真”,数值0表示“假”举例5>3&&8<4-!00(5>3)&&(8<(4-!0))4&&5>3||21逻辑运算符两侧的运算对象不但可以是0和1,也可以是0或非0的整数,也可是任何类型的数据。系统判定标准:0为假;非0为真。二、逻辑运算符和逻辑表达式‘c’&&‘d’1三、实现选择结构的控制语句选择结构单分支双分支if(表达式)语句多分支if(表达式)语句1else语句2if(表达式1)语句1elseif(表达式2)语句2……else语句nif语句的嵌套switch语句条件表达式语句格式举例if(x>y)printf(“%d”,x);if(表达式)语句#include<stdio.h>voidmain(){floata,b,t=0;scanf(“%f,%f”,&a,&b);if(a>b){t=a;a=b;b=t;}printf(“%5.2f,%5.2f\n”,a,b);}3,43.00,4.00……if(a>b)t=a;a=b;b=t;…………if(a>b)t=a;a=b;b=t;……3,44.00,0.00当某些语句作为一个整体出现的时候,必须是复合语句的形式。(一)、单分支注意:表达式可以是逻辑表达式、关系表达式、任意数值类型练习P89

3格式if(x>y)printf(“%d”,x);elseprintf(“%d”,y);#include<stdio.h>#include<math.h>voidmain(){floata,b,c,p,s;scanf(“%f,%f,%f”,&a,&b,&c);if(a+b>c&&a+c>b&&b+c>a)

{

p=(a+b+c)/2;s=sqrt(p*(p-a)*(p-b)*(p-c));printf(“s=%7.2f\n”,s);

}elseprintf(“Notatriangle!\n”);}if(表达式)语句1else语句2例:输入三角形的三边,求三角形的面积。输入a,b,c是三角形吗?YNp(a+b+c)/2ssqrt(p*(p-a)*(p-b)*(p-c))输出s输出“非三角形!”3,4,5s=6.003,4,8Notatriangle!(二)、双分支C语言程序设计(第3版)张磊编著清华大学出版社例3-20

设计求解一元二次方程(a≠0)的通用程序问题分析与算法设计⑴若有实根,则计算并输出实根⑵程序的输入量为方程的系数a、b、c。。⑶程序中要使用数学函数sqrt(),要注意打开math.h文件。#include<stdio.h>#include<math.h>voidmain(){floata,b,c;floatx1,x2,d;printf("Inputa,b,c:");scanf("%f,%f,%f",&a,&b,&c);d=b*b-4*a*c;

if(d>=0){x1=(-b+sqrt(d))/(2*a);x2=(-b-sqrt(d))/(2*a);printf("x1=%f,x2=%f\n",x1,x2);}

elseprintf("norealroot.\n");}(二)、双分支条件运算符条件表达式举例if(a>b)max=a;elsemax=b;表达式1?表达式2:表达式3max=(a>b)?a:b;注意使用条件若if语句中,在表达式为“真”和“假”时,都只执行一个赋值语句给同一个变量赋值,则可以用简单的条件运算符来处理。取值表达式1为真,则取值为表达式2的值;表达式1为假,则取值为表达式3的值。(二)、双分支条件运算符?:结合性:自右向左表达式2和3可以是数值表达式、赋值表达式、函数表达式。举例输入一个字符,判别它是否大写字母,如果是,将它转换成小写;如果不是,不转换。然后输出最后得到的字符。(二)、双分支#include<stdio.h>voidmain(){charch;scanf(“%c”,&ch);ch=(ch>=‘A’&&ch<=‘Z’)?(ch+32):ch;printf(“%c\n”,ch);}格式举例if(cost>3000)cash=500;elseif(cost>2000)cash=300;elseif(cost>1500)cash=200;elseif(cost>1000)cash=100;elsecash=0;if(表达式1)语句1elseif(表达式2)语句2……else语句n语句本身含分号(三)、多分支(一)C语言程序设计(第3版)张磊编著清华大学出版社例3-7

计算分段函数值#include<stdio.h>voidmain(){floatx,y;printf("Input:");scanf("%f",&x);

if(x>0)y=5*x+8;

elseif(x==0)y=36;

elsey=1.5*x-26;printf("y=%f\n",y);}(三)、多分支(一)C语言程序设计(第3版)张磊编著清华大学出版社练习:以下程序的输出结果是()main(){inta=5,b=4,c=3,d=2;if(a>b>c)printf("%d\n",d);elseif((c-1>=d)==1)printf("%d\n",d+1);elseprintf("%d\n",d+2);}A.2B.3C.4D.编译时有错,无结果if语句的嵌套在if语句中又包含一个或多个if语句。被嵌套的条件语句和嵌套进去的条件语句既可是单分支,也可是双分支。if(表达式1)

if(表达式2)语句1

[else语句2][else

if(表达式3)语句3

[else语句4]]注意if与else的配对原则:else总是与它上面的最近的未配对的if配对。(三)、多分支(二)举例已知a=3b=4c=5d=0,d=?if(a>b)

d=a;else

if(c>b)d=c;elsed=b;if(a>b)

if(c>b)d=c;elsed=b;if(a>b)

{if(c>b)d=c;}elsed=b;if(a>b)

if(c>b)d=c;elsed=b;elsed=a;d=5d=3d=0d=4(三)、多分支(二)练习P88

1、2开关语句switch(表达式){case常量表达式1:语句1case常量表达式2:语句2case常量表达式3:语句3……case常量表达式n:语句ndefault:语句n+1}当分支较多时,使用嵌套的if语句层数多,程序冗长而且可读性降低。此时可以考虑使用switch语句(开关语句)来处理多分支。(三)、多分支(三)举例#include<stdio.h>voidmain(){chargrade;printf(“请输入考试等级A~D:”);scanf(“%c”,&grade);switch(grade){case‘A’:printf(“80~100\n”);case‘B’:printf(“70~79\n”);case‘C’:printf(“60~69\n”);case‘D’:printf(“<60\n”);default:printf(“error\n”);}}B70~7960~69<60Error根据输入的考试成绩等级打印出百分制分数段。A:80~100B:70~79C:60~69D:<60说明:应在每一个printf后加break语句(三)、多分支(三)举例#include<stdio.h>voidmain(){chargrade;printf(“请输入考试等级A~D:”);scanf(“%c”,&grade)switch(grade){case‘A’:printf(“80~100\n”);break;case‘B’:printf(“70~79\n”);break;case‘C’:printf(“60~69\n”);break;case‘D’:printf(“<60\n”);break;default:printf(“error\n”);}}B70~79根据输入的考试成绩等级打印出百分制分数段。A:80~100B:70~79C:60~69D:<60最后一行的break可以省略。(三)、多分支(三)思考#include<stdio.h>voidmain(){floatscore;printf(“请输入考试成绩0~100:”);scanf(“%f”,&score);if(score>100)printf(“请输入0~100之间的数\n”);elseif(score>=80)printf(“A\n”);elseif(score>=70)printf(“B\n”);elseif(score>=60)printf(“C\n”);elseprintf(“D\n”);}根据输入的考试成绩(百分制整数)打印出等级水平。(使用if~else语句实现)A:80~100B:70~79C:60~69D:<60思考:使用switch语句如何实现?程序(三)、多分支(三)思考#include<stdio.h>voidmain(){floatscore;printf(“请输入考试成绩0~100:”);scanf(“%f”,&score);switch(score){case80~100:printf(“A\n”);break;case70~79:printf(“B\n”);break;case60~69:printf(“C\n”);break;case<60:printf(“D\n”);break;default:printf(“请输入0~100之间的整数\n”);}}根据输入的考试成绩(百分制整数)打印出等级水平。(使用switch语句实现)A:80~100B:70~79C:60~69D:<60思考:本程序有问题么?程序(三)、多分支(三)#include<stdio.h>voidmain(){floatscore;intp;printf(“请输入考试成绩0~100:”);scanf(“%f”,&score);p=(int)score/10;switch(p){case0:printf(“D\n”);break;case1:printf(“D\n”);break;case2:printf(“D\n”);break;case3:printf(“D\n”);break;case4:printf(“D\n”);break;case5:printf(“D\n”);break;case6:printf(“C\n”);break;case7:printf(“B\n”);break;case8:printf(“A\n”);break;case9:printf(“A\n”);break;case10:printf(“A\n”);break;default:printf(“请输入0~100之间的整数\n”);}}改进程序111种情况思考:不同case值时执行相同的操作,是否可以合并?#include<stdio.h>voidmain(){intscore,p;printf(“请输入考试成绩0~100:”);scanf(“%c”,&score);p=score/10;switch(

温馨提示

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

评论

0/150

提交评论