收藏 分销(赏)

计讲稿4——关系运算符、逻辑运算符....doc

上传人:pc****0 文档编号:6863702 上传时间:2024-12-22 格式:DOC 页数:8 大小:82.50KB 下载积分:10 金币
下载 相关 举报
计讲稿4——关系运算符、逻辑运算符....doc_第1页
第1页 / 共8页
计讲稿4——关系运算符、逻辑运算符....doc_第2页
第2页 / 共8页


点击查看更多>>
资源描述
高2015级信息学竞赛培训资料 程序设计讲稿4 本讲涉及的单词: 1、if 如果 2、else 否则 3、switch 开关 4、case 案例、事例 5、default 缺省、默认 6、break 打断 一、关系运算符及其优先级 1、关系运算符: 程序中经常需要比较两个量的大小关系,以决定程序的下一步工作,比较两个量的大小关系的运算符称为关系运算符,C/C++中有以下关系运算符: > 大于 < 小于 == 等于 >= 大于等于 <= 小于等于 != 不等于 关系运算符都是双目运算符,其结合性为左结合型。关系运算符的优先级低于算术运算符,高于赋值运算符。六个关系运算符中,>、<、>=、<=的优先级相同,==和!=的优先级相同,但前者高于后者。 2、关系表达式 关系表达式的一般形式:表达式 关系运算符 表达式 例如:a+b>c+d、 x<=3/2、a<(b>c)、a!=(c==d) 关系表达式运算的结果只有两种:真或假(正确或错误,成立或不成立),用数字1和0表示。 例如:5>3 的运算结果是1(正确),而3<5的结果是0(错误) int main() { char c='k'; int i=1,j=2,k=3; float x=3e+5,y=0.85; printf("%d,%d\n",'a'+5<c,-i-2*j>=k+1); printf("%d,%d\n",1<j<5,x-5.25<=x+y); printf("%d,%d\n",i+j+k==-2*j,k==j==i+5); return 0; } 程序的输出结果是: 解释: (1) char c=’k’,实质是c=107;因为字符’k’的ASCII码是107。 (2)'a'+5 相当于 97+5,因为字符’a’的ASCII码是97。 (3) 1<j<5 因为关系运算符的左结合性,所以先计算1<j,1<j成立,值为1。再计算1<5,成立,值为1。故表达式值为1 (4)k==j==i+5,先计算k==j,不成立,其值为0,再计算0==i+5,也不成立,值为0,故表达式值为0 二、逻辑运算符及其优先级 1、逻辑运算符 && 逻辑与(and) || 逻辑或(or) ! 逻辑非(not) &&和||均为双目运算符,具有左结合性,其优先级低于算术运算符和关系运算符,&&的优先级高于||。!是单目运算符,具有右结合性,其优先级高于所有的算术运算符关系运算符,也高于&&和||。 a && b ,只有在a和b都为正确的时候,结果才“正确”,其他情况都为“错误” 例如:如果x=4,那么 (x>4 && x<10) 的结果就是“错误”; 而(x>=2 && x<10) 的结果就是“正确”; a || b ,只有在a和b都“错误”的时候,结果才“错误”,其他情况都为“正确” 例如:如果x=4,那么 (x>4 || x<10) 的结果就是“正确”; 而(x<=2 || x>10) 的结果就是“错误”; !a,表示将a的值取反,如果a为正确,则 !a 为错误,如果a为错误,则!a为正确 例如:!(4>5)的结果为正确,而!(4<5)的结果为错误。 2、逻辑表达式 用逻辑运算符、关系运算符构成的式子,成为逻辑表达式: 举例: 数学表达式 -2 <= x < 10 的C语言条件表达式: x是奇数的条件表达式: x是偶数的条件表达式: x能被11整除的条件表达式: x能被4整除但不能被100整除,或者能被400整除的C语言表达式: 条件表达式: m % 2==1 && m<=20 || m>10 在m=5的时候,表达式的值为: 在m=8的时候,表达式的值为: 在m=13的时候,表达式的值为: 在m=16的时候,表达式的值为: 在m=23的时候,表达式的值为: 在m=30的时候,表达式的值为: 三、分支语句 格式:if(条件) 语句1; else 语句2; 功能:如果 条件成立 则执行语句1,否则执行语句2; 其中,上面的格式中 ”else 语句2;” 可以省略,上面的格式写成了两行,其实可以写成一行的,这样做只是为了程序更加美观。 例7、编程输入两个整数,输出其中的大数。 解答程序1 解答程序2 int main() { int a,b,MAX; scanf("%d%d",&a,&b); MAX=a; if(MAX<b) MAX=b; printf("MAX=%d\n",MAX); return 0; } int main() { int a,b,MAX; scanf("%d%d",&a,&b); if(a>b) MAX=a; else MAX=b; printf("MAX=%d\n",MAX); return 0; } 解答程序1中,先把a的值赋给变量MAX,再用if语句判别MAX和b的大小,如果MAX<b,则把b赋给MAX,这样MAX的值就是a,b中将大的一个。 解答程序2中,如果a>b,则把a的值赋给MAX,否则把b赋给b。这里的否则相当于a<=b。 思考:能否写成下面的形式,如果不能,该怎样修改? if(a>b) MAX=a; if(a<b) MAX=b; 例8、编程判断键盘输入的字符的类别:如果是数字字符,则输出“Digit”;如果是大写字母,则输出“Capital”、如果是小写字母,则输出“Small”;如果不是上面三类,则输出“Other” int main() { char c; scanf("%c",&c); if(c>='0' && c<='9') printf("Digit\n"); else if(c>='A' && c<='Z') printf("Capital\n"); else if(c>='a' && c<='z') printf("Small\n"); else printf("Other\n"); return 0; } 如果c是数字字符则输出”digit” 否则如果c是大写字母则输出”Capital” 否则如果c是小写字母则输出"Small" 否则输出" Other " 四、条件运算符 C/C++中有一个与if ~ else ~ 类似的运算符”? :”,它是三目运算符,其格式为: 表达式1?表达式2:表达式3 其含义是:如果表达式1成立,则以表达式2作为条件表达式的结果,否则以表达式3作为条件表达式的结果。 例如:if(a>b) MAX=a; else MAX=b; 可以改写为:MAX = a>b? a: b; 条件运算符的优先级高于赋值运算符,低于算术运算符、关系运算符和逻辑运算符。 请用关系运算符改写例7的程序。 五、开关语句 C/C++语言还提供了另一种用于多分支选择的语句——switch语句,其一般形式如下: 形式: switch(表达式) { case 常量表达式1:语句1 case 常量表达式2:语句2       … case 常量表达式n:语句n default:语句n+1 } 其含义是:计算表达式的值,然后依次与case后面的常量表达式的值比较。当与某个常量表达式的值相等时,即执行其后面的语句,然后不再判断,转而执行后面的所有case后的语句(包括default语句)。当表达式的值与所有case后面常量表达式的值都不相等时,则执行default后的语句。 例9、编程输入一个数字,输出与这个数字对应星期几的英语单词,比如输入1,则应是星期一,输出“Monday”,7则应是星期日,输出“Sunday”。 解答程序1 int main() { int a; scanf("%d",&a); switch(a) { case 1 : printf("Monday\n"); case 2 : printf("Tuesday\n"); case 3 : printf("Wednesday\n"); case 4 : printf("Tursday\n"); case 5 : printf("Friday\n"); case 6 : printf("Saturday\n"); case 7 : printf("Sunday\n"); default : printf("error\n"); } return 0; } int main() { int a; scanf("%d",&a); switch(a) { case 1 : printf("Monday\n"); break; case 2 : printf("Tuesday\n");break; case 3 : printf("Wednesday\n");break; case 4 : printf("Tursday\n");break; case 5 : printf("Friday\n");break; case 6 : printf("Saturday\n");break; case 7 : printf("Sunday\n");break; default : printf("error\n");break; } return 0; } 解答程序1:当输入4后,则程序输出: Tursday Friday Saturday Sunday error 由此看来,整数上面对switch语句含义的解释,当表达式与某个常量值相等时,则从这里开始所有的case后面的语句都会执行。 解答程序2:当输入4后,程序输出: Tursday 因为在每条case后面的语句后加上了一个break;这里的break表示中断switch语句的执行。所以当输出Tursday后,再执行break;这时,跳出的switch语句,所以后面case语句再不会被执行。 使用switch语句的要注意以下几点: 1) case语句后的常量表达式的值不能有相同的; 2) case后可以有多条语句,他们不必用{}括起来 3) default可以省略。 思考:请用if语句改写上面的程序。 六、编程实例 例10、打折(P1013)  一件衣服950元,若消费满3000元,可打八五折。输入购买衣服件数,输出需要支付的金额(单位:元),保留两位小数。 【输入】 一个整数N,表示顾客购买衣服数量。 【输出】 一个实数,表示需要支付的金额。保留两位小数。 【样例】 4 3230.00 2 1900.00 【数据范围】 0 <= N <= 10000000 【分析】 1、 先计算买n件衣服的钱数:p=950*n; 2、 在判断:如果p>=3000 则输出p*0.85;否则输出p (保留两位小数) 例11、三整数排序(P1015)  输入三个整数a,b,c,从小到大排序后输出。 【输入】   一行三个整数a,b,c。 【输出】   由小到大输出这三个数。整数之间用一个空格分开。 【样例】 20 7 33 7 20 33 解法程序: int main() { int a,b,c; scanf("%d%d%d",&a,&b,&c); // 输入a,b,c的值 if(a>b) { t=a; a=b; b=t; } //如果a>b,则交换a,b的值; if(a>c) { t=a; a=c; c=t; } //如果a>c,则交换a,c的值; if(a>c) { t=a; a=c; c=t; } //如果b>c,则交换b,c的值; printf("%d %d %d\n",a,b,c); //输出答案:输出a,b,c的只值 return 0; } 关于程序的一点解释: 语句:if(a>b) { t=a; a=b; b=t; } 因为如果满足条件a>b要执行三句话,t=a; a=b; b=t;如果条件不满足,这三句话就不会执行。所以用{}把这三句括起来,这样的语句称为复合语句。 如果写成这样: if(a>b) t=a; a=b; b=t; 则满足条件a>b,就只会执行t=a; 而不满足,则a=b和b=t;还会照样执行。 例12、三角形 (P1017)  输入三角形三边长度值a,b,c(均为正整数),完成下列任务:  (1)、如果这三边根本无法构成三角形,则输出“not a triangle”。  (2)、如果能构成三角形,则计算这个三角形的面积并输出。  (3)、然后再判断这个三角形是否是直角三角形,如果是则输出“yes”,否则输出“no”。 【输入】   一行三个正整数a,b,c。 【输出】   如果a,b,c不能构成三角形,则输出一行“not a triangle”。 如果能构成一个三角形,则: 第 1 行:一个保留2位小数的实数,表示三角形面积; 第 2 行:如果这个三角形是一个直角三角形,则输出“yes”,否则输出“no”。 【样例输入】 3 4 5 6.00 yes 2 2 2 1.73 no 4 2 7 not a triangle 【数据范围】 1<=a,b,c<=10000 【样例解释】 构成三角形的条件:“任意两边之和大于第三边。” 已知三角形三边,计算面积用海伦公式: p=(a+b+c)/2; 面积S=sqrt(p*(p-a)*(p-b)*(p-c))。 例13、 鸡兔同笼(P1016) 已知鸡和兔的总量为n,总腿数为m,输入n和m,依次输出鸡的数目和兔的数目。 样例输入1:14 32 样例输出1:12 2 样例输入2:10 16 样例输出2:No answer 分析:按照程序解答问题的三段论: 1、输入数据:n和m; 2、解答方法:设鸡有x只,兔有y只,则列方程: 解方程得: , 这里,x和y必须为正整数。 3、输出答案:如果“m是偶数,且x>0,且y>0”,则该题目解是x和y,否则输出No answer。 x和y必须为正整数 程序的语言描述 用c语言补充完整 定义n,m,x,y四个整数变量; 输入变量n,m的值; x=(4n-m)/2; y=(m-2n)/2; 如果m是偶数且x>0且y>0 输出x和y的值,中间隔一个空格 否则 输出No answer int main() { if(m % 2==0 && x>0 && y>0) else return 0; } 课后作业: 题库:P1013~P1035 第8页
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服