首页 c程序设计第五章

c程序设计第五章

举报
开通vip

c程序设计第五章C程序设计主讲人:袁丽燕大里仁基础教学部第五章:选择结构程序设计在现实生活中,需要进行判断和选择的情况是很多的如果你在家,我去拜访你如果考试不及格,要补考如果遇到红灯,要停车等待周末我们去郊游70岁以上的老年人,入公园免票处理这些问题,关键在于进行条件判断由于程序处理问题的需要,在大多数程序中都会包含选择结构,需要在进行下一个操作之前先进行条件判断一、选择结构和条件判断C语言有两种选择语句:(1)if语句,实现两个分支的选择结构(2)switch语句,实现多分支的选择结构例:求方程的根。由键盘输入a,b,c。假设...

c程序设计第五章
C程序设计主讲人:袁丽燕大里仁基础教学部第五章:选择结构程序设计在现实生活中,需要进行判断和选择的情况是很多的如果你在家,我去拜访你如果考试不及格,要补考如果遇到红灯,要停车等待周末我们去郊游70岁以上的老年人,入公园免票处理这些问 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 ,关键在于进行条件判断由于程序处理问题的需要,在大多数程序中都会包含选择结构,需要在进行下一个操作之前先进行条件判断一、选择结构和条件判断C语言有两种选择语句:(1)if语句,实现两个分支的选择结构(2)switch语句,实现多分支的选择结构例:求方程的根。由键盘输入a,b,c。假设a,b,c的值任意,并不保证。需要在程序中进行判别,如果,就计算并输出方程的两个实根,否则就输出“方程无实根”的信息。 解题思路:输入a,b,c计算discdisc>0真计算x1,x2输出x1,x2假输出无实根#include<stdio.h>#include<math.h>intmain(){doublea,b,c,disc,x1,x2,p,q;scanf("%lf%lf%lf",&a,&b,&c);disc=b*b-4*a*c;计算b2-4ac,disc的值变为-15if(disc<0)printf(“hasnotrealroots\n”);else{p=-b/(2.0*a);q=sqrt(disc)/(2.0*a);x1=p+q;x2=p-q;printf(“realroots:\nx1=%7.2f\nx2=%7.2f\n”,x1,x2);}return0;}-15<0为真#include<stdio.h>#include<math.h>intmain(){doublea,b,c,disc,x1,x2,p,q;scanf("%lf%lf%lf",&a,&b,&c);disc=b*b-4*a*c;计算b2-4ac,disc的值变为8if(disc<0)printf(“hasnotrealroots\n”);else{p=-b/(2.0*a);q=sqrt(disc)/(2.0*a);x1=p+q;x2=p-q;printf(“realroots:\nx1=%7.2f\nx2=%7.2f\n”,x1,x2);}return0;}8<0为假p的值变为-1q的值变为0.71x1的值变为-0.29x2的值变为-1.71if(disc<0)printf(“hasnotrealroots\n”);else{p=-b/(2.0*a);q=sqrt(disc)/(2.0*a);x1=p+q;x2=p-q;printf(“realroots:\nx1=%7.2f\nx2=%7.2f\n”,x1,x2);}return0;}选择结构,用if语句实现的if(disc<0)printf(“hasnotrealroots\n”);else{p=-b/(2.0*a);q=sqrt(disc)/(2.0*a);x1=p+q;x2=p-q;printf(“realroots:\nx1=%7.2f\nx2=%7.2f\n”,x1,x2);}return0;}复合语句二、用IF语句实现选择结构例:输入两个实数,按代数值由小到大的顺序输出这两个数。解题思路:只需要做一次比较,然后进行一次交换即可用if语句实现条件判断关键是怎样实现两个变量值的互换互换前★●AB互换后●★AB★●ABC★●ABC★●ABC★●ABC★●★ABC●★#include<stdio.h>intmain(){floata,b,t;scanf("%f,%f",&a,&b);if(a>b){t=a;a=b;b=t;}printf("%5.2f,%5.2f\n",a,b);return0;}如果a>b将a和b的值互换#include<stdio.h>intmain(){floata,b,t;scanf("%f,%f",&a,&b);if(a>b){t=a;a=b;b=t;}printf("%5.2f,%5.2f\n",a,b);return0;}选择结构,用if语句实现例:输入3个数a,b,c,要求按由小到大的顺序输出。 解题思路:可以先用伪代码写出算法: ifa>b,a和b对换(a是a、b中的小者) ifa>c,a和c对换(a是三者中最小者) ifb>c,b和c对换(b是三者中次小者) 顺序输出a,b,c#include<stdio.h>intmain(){floata,b,c,t;scanf("%f,%f,%f",&a,&b,&c);if(a>b){t=a;a=b;b=t;}if(a>c){t=a;a=c;c=t;}if(b>c){t=b;b=c;c=t;}printf("%5.2f,%5.2f,%5.2f\n",a,b,c);return0;}如果a>b,将a和b对换a是a、b中的小者#include<stdio.h>intmain(){floata,b,c,t;scanf("%f,%f,%f",&a,&b,&c);if(a>b){t=a;a=b;b=t;}if(a>c){t=a;a=c;c=t;}if(b>c){t=b;b=c;c=t;}printf("%5.2f,%5.2f,%5.2f\n",a,b,c);return0;}如果a>c,将a和c对换a是三者中的小者#include<stdio.h>intmain(){floata,b,c,t;scanf("%f,%f,%f",&a,&b,&c);if(a>b){t=a;a=b;b=t;}if(a>c){t=a;a=c;c=t;}if(b>c){t=b;b=c;c=t;}printf("%5.2f,%5.2f,%5.2f\n",a,b,c);return0;}如果b>c,将b和c对换b是三者中的次小者if( 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 达式)语句1[else语句2]关系表达式逻辑表达式数值表达式方括号内的部分为可选的if语句的一般形式语句1、语句2:可以是简单的语句、复合语句、另一个if语句等最常用的3种if语句形式:1.if(表达式)语句1(没有else子句)2.if(表达式)语句1else语句2(有else子句)3.if(表达式1)语句1elseif(表达式2)语句2elseif(表达式3)语句3┆elseif(表达式m)语句melse语句m+1(在else部分又嵌套了多层的if语句)if(number>500)cost=0.15;elseif(number>300)cost=0.10;elseif(number>100)cost=0.075;elseif(number>50)cost=0.05;elsecost=0;等价于if(number>500)cost=0.15;elseif(number>300)cost=0.10;elseif(number>100)cost=0.075;elseif(number>50)cost=0.05;elsecost=0;分号不能丢 说明:(1)整个if语句可写在多行上,也可写在一行上但都是一个整体,属于同一个语句(2)“语句1”…“语句m”是if中的内嵌语句内嵌语句也可以是一个if语句(3)“语句1”…“语句m”可以是简单的语句,也可以是复合语句三、运算符和表达式关系运算符和关系表达式关系运算符:用来对两个数值进行比较的比较运算符C语言提供6种关系运算符:①<(小于)②<=(小于或等于)③>(大于)④>=(大于或等于)⑤==(等于)⑥!=(不等于)优先级相同(高)优先级相同(低) 关系、算术、赋值运算符的优先级c>a+b等效于c>(a+b)a>b==c等效于(a>b)==ca==b<c等效于a==(b<c)a=b>c等效于a=(b>c)1.关系表达式用关系运算符将两个数值或数值表达式连接起来的式子如:x!=0‘a’==‘A’a*a+b*b<Y*Y说明:数值量比较:数字的大小;字符量比较:ASCII的大小如:c>a+b2.关系表达式的值是一个逻辑值,即“真”或“假”在C的逻辑运算中,以“1”代表“真”,以“0”代表“假”c>(a+b)a==b<ca==(b<c)111a=b<ca=(b<c)问:a=1,b=-5,c=‘a’时以上表达式的值。3.关系表达式的结合规则:左结合逻辑运算符和逻辑表达式3种逻辑运算符:&&(逻辑与)||(逻辑或)!(逻辑非)&&和||是双目(元)运算符;!是一目(元)运算符逻辑表达式用逻辑运算符将关系表达式或其他逻辑量连接起来的式子例如:判断年龄在13至17岁之内?age>=13&&age<=17判断年龄小于12或大于65?age<12||age>65 逻辑运算的真值表 a b !a !b a&&b a||b 真 真 假 假 真 真 真 假 假 真 假 真 假 真 真 假 假 真 假 假 真 真 假 假 逻辑运算符的优先次序!→&&→||(!为三者中最高) 与其他运算符的优先次序!(高)算术运算符关系运算符&&和||赋值运算符(低) 逻辑表达式的值应该是逻辑量“真”或“假” 编译系统在表示逻辑运算结果时以数值1代表“真”,以0代表“假” 但在判断一个量是否为“真”时以0代表“假”,以非0代表“真” 注意:将一个非零的数值认作为“真”(1)若a=4,则!a的值为0(2)若a=4,b=5,则a&&b的值为1(3)a和b值分别为4和5,则a||b的值为1(4)a和b值分别为4和5,则!a||b的值为1(5)4&&0||2的值为1 修改后的逻辑运算真值表 a b !a !b a&&b a||b 非0 非0 0 0 1 1 非0 0 0 1 0 1 假 非0 1 0 0 1 假 0 1 1 0 0条件运算符和条件表达式有一种if语句,当被判别的表达式的值为“真”或“假”时,都执行一个赋值语句且向同一个变量赋值如:if(a>b)max=a;elsemax=b;max=(a>b)?a:b;条件运算符条件运算符和条件表达式有一种if语句,当被判别的表达式的值为“真”或“假”时,都执行一个赋值语句且向同一个变量赋值如:if(a>b)max=a;elsemax=b;max=(a>b)?a:b;条件表达式 条件表达式的一般形式为表达式1?表达式2:表达式32.条件运算符的执行顺序: 求解表达式1 若为非0(真)则求解表达式2,此时表达式2的值就作为整个条件表达式的值 若表达式1的值为0(假),则求解表达式3,表达式3的值就是整个条件表达式的值3.条件运算符优先于赋值运算符4.条件运算符的结合方向为“自右至左”5.以下为合法的使用方法:a>b?(max=a):(max=b);a>b?printf(“%d”,a):printf(“%d”,b);例:输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。解题思路:用条件表达式来处理,当字母是大写时,转换成小写字母,否则不转换#include<stdio.h>intmain(){charch;scanf("%c",&ch);ch=(ch>='A'&&ch<='Z‘)?(ch+32):ch;printf("%c\n",ch);return0;}四、if语句的三种形式:(1)if(表达式)语句如果表达式的值为真,则执行其后的语句,否则不执行该语句。(2)if-else形式if(表达式)语句1;else语句2;如果表达式的值为真,则执行语句1,否则执行语句2。(3)if-else-if形式if(表达式1)语句1;elseif(表达式2)语句2;elseif(表达式m)语句m;else语句n;依次判断表达式的值,当出现某个值为真时,则执行其对应的语句。然后跳到整个if语句之外继续执行程序。如果所有的表达式均为假,则执行语句n。然后执行后续程序。五、选择结构的嵌套在if语句中又包含一个或多个if语句称为if语句的嵌套一般形式:if()if()语句1else语句2elseif()语句3else语句4内嵌ifelse总是与它上面最近的未配对的if配对if(){if()语句1}else语句2内嵌if{}限定了内嵌if范围例:有一 关于工期滞后的函关于工程严重滞后的函关于工程进度滞后的回复函关于征求同志党风廉政意见的函关于征求廉洁自律情况的复函 数:编一程序,输入一个x值,要求输出相应的y值。解题思路:用if语句检查x的值,根据x的值决定赋予y的值由于y的可能值不是两个而是三个,因此不可能只用一个简单的(无内嵌if)的if语句来实现解题思路:方法1(1)先后用3个独立的if语句处理:输入x若x<0,则y=-1若x=0,则y=0若x>0,则y=1输出x和yscanf("%d",&x);if(x<0)y=-1;if(x==0)y=0;if(x>0)y=1;printf("x=%d,y=%d\n",x,y);解题思路:方法2(2)用一个嵌套的if语句处理:输入x若x<0,则y=-1否则若x=0,则y=0否则y=1输出x和yscanf("%d",&x);if(x<0)y=-1;elseif(x==0)y=0;elsey=1;printf("x=%d,y=%d\n",x,y);五、用switch语句实现多分支选择结构switch语句用来实现多分支选择结构 学生成绩分类85分以上为’A’等70~84分为’B’等60~69分为’C’等…… 人口统计分类按年龄分为老、中、青、少、儿童一般形式为:switch(表达式){case常量表达式1:语句1;case常量表达式2:语句2;…case常量表达式n:语句n;default:语句n+1;}语义为:计算表达式的值,并逐个与其后的常量表达式相比较。当表达式的值与某个常量表达式的值相等时,即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如果表达式的值与所有的case后的常量表达式均不相同,则执行default后的语句。整数类型(包括字符型)例:intmain(){inta;printf("inputintegernumber:");scanf("%d",&a);switch(a){ case1:printf("Monday\n"); case2:printf("Tuesday\n"); case3:printf("Wednesday\n"); case4:printf("Thursday\n"); case5:printf("Friday\n"); case6:printf("Saturday\n"); case7:printf("Sunday\n"); default:printf("error\n");}return0;}这反应了switch语句的一个特点。在switch语句中,“case常量表达式”只相当于一个语句标号,表达式的值和某标号相等则转向该标号执行,但不能在执行完该标号的语句后自动跳出整个switch语句,所以出现了继续执行所有后面case语句的情况。这是与前面介绍的if语句完全不同的,应特别注意。为了避免上述情况,C语言还提供了一种break语句,专用于跳出switch语句,break语句只有关键字break,没有参数。修改例题的程序,在每一case语句之后增加break语句,使每一次执行之后均可跳出switch语句,避免输出不应有的结果。例:intmain(){inta;printf("inputintegernumber:");scanf("%d",&a);switch(a){ case1:printf("Monday\n");break; case2:printf("Tuesday\n");break; case3:printf("Wednesday\n");break; case4:printf("Thursday\n");break; case5:printf("Friday\n");break; case6:printf("Saturday\n");break; case7:printf("Sunday\n");break; default:printf("error\n");}return0;}在使用switch语句时还应注意以下几点: 在case后的各常量表达式的值不能相同,否则会出现错误。 在case后,允许有多个语句,可以不用{}括起来。 各case和default子句的先后顺序可以变动,而不会影响程序执行结果。 default子句可以省略不用。例:要求按照考试成绩的等级输出百分制分数段,A等为85分以上,B等为70~84分,C等为60~69分,D等为60分以下。成绩的等级由键盘输入。解题思路:判断出这是一个多分支选择问题根据百分制分数将学生成绩分为4个等级如果用if语句,至少要用3层嵌套的if,进行3次检查判断用switch语句进行一次检查即可得到结果#include<stdio.h>intmain(){chargrade;scanf("%c",&grade);printf("Yourscore:");switch(grade){case'A':printf("85~100\n");break;case'B':printf("70~84\n");break;case'C':printf("60~69\n");break;case'D':printf("<60\n");break; default:printf("enterdataerror!\n");}return0;}值为A#include<stdio.h>intmain(){chargrade;scanf("%c",&grade);printf("Yourscore:");switch(grade){case'A':printf("85~100\n");break;case'B':printf("70~84\n");break;case'C':printf("60~69\n");break;case'D':printf("<60\n");break; default:printf("enterdataerror!\n");}return0;}不能少例:编写程序,用switch语句处理菜单命令。解题思路:在许多应用程序中,用菜单对流程进行控制,例如从键盘输入一个’A’或’a’字符,就会执行A操作,输入一个’B’或’b’字符,就会执行B操作,等等。#include<stdio.h>intmain(){voidaction1(int,int),action2(int,int);charch;inta=15,b=23;ch=getchar();switch(ch){case'a':case‘A’:action1(a,b);break; case'b':case‘B’:action2(a,b);break;  default:putchar(‘\a’);}return0;}输入a或A调用action1函数,执行A操作voidaction1(intx,inty){printf("x+y=%d\n",x+y);}#include<stdio.h>intmain(){voidaction1(int,int),action2(int,int);charch;inta=15,b=23;ch=getchar();switch(ch){case'a':case‘A’:action1(a,b);break; case'b':case‘B’:action2(a,b);break;  default:putchar(‘\a’);}return0;}输入b或B调用action2函数,执行B操作voidaction2(intx,inty){printf("x*y=%d\n",x*y);}例题:计算器程序。用户输入运算数和四则运算符,输出计算结果。#include<stdio.h>intmain(){floata,b;charc;printf("inputexpression:a+(-,*,/)b\n");scanf("%f%c%f",&a,&c,&b);switch(c){case'+':printf("%f\n",a+b);break;case'-':printf("%f\n",a-b);break;case'*':printf("%f\n",a*b);break;case'/':printf("%f\n",a/b);break;default:printf("inputerror\n");}}六、综合举例例:运输公司对用户计算运输费用。路程(skm)越远,每吨·千米运费越低。 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 如下:s<250没有折扣250≤s<5002%折扣500≤s<10005%折扣1000≤s<20008%折扣2000≤s<300010%折扣3000≤s15%折扣解题思路:设每吨每千米货物的基本运费为p,货物重为w,距离为s,折扣为d总运费f的计算公式为f=p×w×s×(1-d)折扣的变化规律: 折扣的“变化点”都是250的倍数 在横轴上加一种坐标c,c的值为s/250 c代表250的倍数当c<1时,表示s<250,无折扣1≤c<2时,表示250≤s<500,折扣d=2%2≤c<4时,d=5%;4≤c<8时,d=8%;8≤c<12时,d=10%;c≥12时,d=15%#include<stdio.h>intmain(){intc,s;floatp,w,d,f;printf("pleaseenterprice,weight,discount:");scanf("%f,%f,%d",&p,&w,&s);if(s>=3000)c=12;elsec=s/250;输入单价、重量、距离switch(c){case0:d=0;break;case1:d=2;break;case2:case3:d=5;break;case4:case5:case6:case7:d=8;break;case8:case9:case10:case11:d=10;break;case12:d=15;break;}f=p*w*s*(1-d/100);printf(“freight=%10.2f\n”,f);return0;}
本文档为【c程序设计第五章】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
xxj7584
暂无简介~
格式:ppt
大小:972KB
软件:PowerPoint
页数:0
分类:建造师考试
上传时间:2020-03-19
浏览量:2