深圳大学C语音课件第四章-顺序结构举例演示教学_第1页
深圳大学C语音课件第四章-顺序结构举例演示教学_第2页
深圳大学C语音课件第四章-顺序结构举例演示教学_第3页
深圳大学C语音课件第四章-顺序结构举例演示教学_第4页
深圳大学C语音课件第四章-顺序结构举例演示教学_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

深圳大学C语音课件第四章-顺序结构举例#include<stdio.h>voidmain(){charch,ch1,ch2;//变量定义ch=getchar();//读取一字符

putchar('\n');//换行ch1='z'-('z'-ch+1)%26;//求前驱字符ch2='a'+(ch-'a'+1)%26;//求后继字符printf("ch1=%c,ch2=%c\n",ch1,ch2);//显示结果}具体程序如下:ch1=v,ch2=x运行结果(假设输入字母为w):

abcdefzyx...第4章选择结构程序设计关系运算符、逻辑运算符、条件运算符1.关系运算符和关系表达式

关系运算符含义优先级结合性>大于这些关系运算符等优先级,但比下面的优先级高左结合性>=(>和=之间没有空格)大于或等于<小于<=(<和=之间没有空格)小于或等于==(两个=之间没有空格)等于这些关系运算符等优先级,但比上面的优先级低!=(!和=之间没有空格)不等于关系运算符

关系表达式

用关系运算符连接起来的式子称为关系表达式。关系表达式的一般形式为:表达式关系运算符表达式例:a+b>c–dx>3/2'a'+1<c–

i–5*j==k+1

注意:C语言用0表示假,非0表示真。一个关系表达式的值不是0就是1,0表示假,1表示真。2.逻辑运算符和逻辑表达式

逻辑运算符

逻辑运算符含义结合性优先级关系!单目运算符,逻辑非,表示相反右结合性

高低&&双目运算符,逻辑与,表示并且左结合性||双目运算符,逻辑或,表示或者AB!A!BA&&BA||B假假1100假真1001真假0101真真0011逻辑运算真值表

逻辑运算符和逻辑表达式

用逻辑表达式来表示闰年的条件能被4整除,但不能被100整除。能被4整除,又能被400整除。?答

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

值为真(1)是闰年,否则为非闰年。expr1取expr2值取expr3值是非条件运算符可嵌套

如x>0?1:(x<0?-1:0)3.条件运算符与表达式一般形式:expr1?expr2:expr3功能:相当于条件语句例:小写字母转盘。#include<stdio.h>#include<conio.h>voidmain(){charch,ch1,ch2;//变量定义ch=getchar();//读取一字符

putchar('\n');//换行ch1=(ch=='a'

?'z':ch–1);//求前驱字符ch2=(ch=='z'

?'a':ch+1);//求后继字符printf("ch1=%c,ch2=%c\n",ch1,ch2);//显示结果}选择结构的程序设计

1.if语句

简单if语句形式

if(表达式)语句;格式:执行流程:语句表达式TF例如:下面的程序段是输入两个整数,输出其中的大数。inta,b,max;printf("inputtwonumbers:");scanf("%d%d",&a,&b);max=a;

if(max<b)max=b;printf("max=%d",max);if_else形式

if(表达式)语句1;else语句2;格式:执行流程:表达式语句1语句2TF例如:下面的程序段同样是输出两个整数中的最大数。inta,b;printf("inputtwonumbers:");scanf("%d%d",&a,&b);

if(a>b)printf("max=%d\n",a);elseprintf("max=%d\n",b);1.if语句

if_else_if形式

if(表达式1)语句1;elseif(表达式2)语句2;elseif(表达式3)语句3;……[else语句n;]格式:执行流程:表达式1语句1语句2F表达式2表达式3F语句3语句nTFTT例如:下面的程序段是判断输入字符的种类。charc;printf("Enteracharacter:");c=getchar();

if(c<0x20)

printf("Thecharacterisacontrolcharacter\n");

elseif(c>='0'&&c<=

'9')

printf("Thecharacterisadigit\n");

elseif(c>='A'&&c<='Z')

printf("Thecharacterisacapitalletter\n");

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

printf("Thecharacterisalowerletter\n");else

printf("Thecharacterisothercharacter\n");例输入两数并判断其大小关系

#include<stdio.h>

voidmain(){intx,y;

printf("Enterintegerx,y:");scanf("%d,%d",&x,&y);if(x!=y)

if(x>y)printf("X>Y\n");elseprintf("X<Y\n");elseprintf("X==Y\n");}if语句嵌套:

if(……)if(……)if(……)else……else……else……C语言规定,在缺省{}时,else总是和它上面离它最近的未配对的if配对例:考虑下面程序输出结果:

voidmain(){intx=100,a=10,b=20;intv1=5,v2=0;if(a<b)

if(b!=15)

if(!v1)x=1;

else

if(v2)x=10;printf(“%d”,x);}结果:100if_else配对原则2.switch语句(开关分支语句)一般形式:switch(表达式){caseE1:语句组1;break;caseE2:语句组2;break;…….caseEn:语句组n;break;[default:语句组;break;]}执行过程:switch表达式语句组1语句组2语句组n语句组…...E1E2Endefaultcase

使用switch语句注意事项(1)switch后面的“表达式”,可以是int、char和枚举型中的一种,但不可为浮点型。floata,b=4.0;scanf("%f",&a);switch(a){case1.0:b=b+1;break;case2.0:b=b-1;break;}printf("b=%f\n",b);不可为浮点型表达式

使用switch语句注意事项(4)每个case后面必须是“常量表达式”,表达式中不能包含变量。例:按成绩分成A、B、C、D、E、F几个等级。intscore;printf("EnterScore:");scanf("%d",&score);switch(score){casescore>=90:printf("A");break;casescore>=80&&score<90:

printf(“B");break;casescore>=70&&score<80:

printf(“C");break;casescore>=60&&score<70:

printf(“E");break;default:printf(“F");break;}case后面包含变量

使用switch语句注意事项(5)case后面的“常量表达式”仅起语句标号作用,系统一旦找到入口标号,就从此标号开始执行,不再进行标号判断。

#include<stdio.h>voidmain(){charch;ch=getchar();switch(ch){case'Y':printf("Yes\n");break;case'N':printf("No\n");break;case'A':printf("All\n");break;default:printf("Yes,NoorAll\n");}}运行结果:

No//假设输入为:N

#include<stdio.h>voidmain(){charch;ch=getchar();switch(ch){case'Y':printf("Yes\n");break;case'N':printf("No\n");case'A':printf("All\n");break;default:printf("Yes,NoorAll\n");}}//假设输入为:N运行结果:

NoALL

使用switch语句注意事项(6)多个case子句,可共用同一语句(组)。

例:当a的值是1、2、3时,将b的值加2;

当a的值是4、5、6时,将b的值减2。

inta,b=4;scanf("%d",&a);switch(a){

case1:case2:case3:b+=2;break;

case4:case5:case6:b-=2;break;default:b*=2;break;}printf("b=%d\n",b);

使用switch语句注意事项(9)switch语句可以嵌套。

voidmain(){intx=1,y=0,a=0,b=0;switch(x){case1:switch(y)

{case0:a++;break;case1:b++;break;}case2:a++;b++;break;case3:a++;b++;}printf("\na=%d,b=%d",a,b);}运行结果:a=2,b=1

选择结构程序设计举例

【例】已知某公司员工的保底薪水为500,某月所接工程的利润profit(整数)与利润提成的关系如下所示(计量单位:元)。计算员工的当月薪水。

工程利润profit提成比率profit≤1000没有提成1000<profit≤2000提成10%2000<profit≤5000提成15%5000<profit≤10000提成20%10000<profit提成25%程序应该这样来设计:首先定义3个变量分别存放员工所接工程的利润、提成比例和当月薪水;调用scanf函数接受用户输入员工所接工程的利润;

然后根据上表的规则,计算该员工当月的提成比率。最后计算该员工当月的薪水(保底薪水+所接工程的利润*提成比率),并输出结果。#include<stdio.h>voidmain(){longprofit;//所接工程的利润floatratio;//提成比率floatsalary=500;//薪水,初始值为保底薪水500

printf("Inputprofit:");

//提示输入所接工程的利润

scanf("%ld",&profit);

//输入所接工程的利润

//计算提成比率ratio

if(profit<=1000)ratio=0;if(1000<profit&&profit<=2000)ratio=(float)0.10;if(2000<profit&&profit<=5000)ratio=(float)0.15;if(5000<profit&&profit<=10000)ratio=(float)0.20;if(10000<profit)ratio=(float)0.25;salary+=profit*ratio;//计算当月薪水printf("salary=%.2f\n",salary);//输出结果}运行结果:Inputprofit:4000↙salary=1100.00方法一:使用if语句0.10默认为double型,不进行强制类型转换将产生警告信息!工程利润profit提成比率profit≤1000没有提成1000<profit≤2000提成10%2000<profit≤5000提成15%5000<profit≤10000提成20%10000<profit提成25%#include<stdio.h>voidmain(){longprofit;//所接工程的利润floatratio;//提成比率floatsalary=500;//薪水,初始值为保底薪水500

printf("Inputprofit:");//提示输入所接工程的利润scanf("%ld",&profit);//输入所接工程的利润//计算提成比率

if(profit<=1000)

ratio=0;

elseif(profit<=2000)

ratio=(float)0.10;

elseif(profit<=5000)

ratio=(float)0.15;

elseif(profit<=10000)

ratio=(float)0.20;

else

ratio=(float)0.25;salary+=profit*ratio;//计算当月薪水printf("salary=%.2f\n",salary);//输出结果}方法二:使用if_elseif语句工程利润profit提成比率profit≤1000没有提成1000<profit≤2000提成10%2000<profit≤5000提成15%5000<profit≤10000提成20%10000<profit提成25%方法三:使用switch语句算法设计要点:

为使用switch语句,必须将利润profit与提成的关系转换成某些整数与提成的关系。

分析本题可知,提成的变化点都是1000的整数倍(1000、2000、5000、……),将利润profit整除1000:

profit≤1000对应0、11000<profit≤2000对应1、22000<profit≤5000对应2、3、4、55000<profit≤10000对应5、6、7、8、9、1010000<profit对应10、11、12、……为解决相邻两个区间的重叠问题,最简单的方法就是:利润profit先减1(最小增量),然后再整除1000即可:

profit≤1000对应01000<profit≤2000对应12000<profit≤5000对应2、3、45000<profit≤10000对应5、6、7、8、910000<profit对应10、11、12、……工程利润profit提成比率profit≤1000没有提成1000<profit≤2000提成10%2000<profit≤5000提成15%5000<profit≤10000提成20%10000<profit提成25%#include<stdio.h>voidmain(){longprofit;//所接工程的利润

intgrade;floatratio;//提成比率floatsalary

温馨提示

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

评论

0/150

提交评论