08C++选择结构(2)

news/2024/11/15 20:43:21/文章来源:https://www.cnblogs.com/citStudy/p/18445828

一、逻辑变量

教学视频
存储类似灯亮或灯灭、是男还是女等结果只有两种可能的数据时,可以使用逻辑型变量。
逻辑型变量用关键字bool定义,所以又称为布尔变量,其值只有两个false(假)和true(真),false和true是逻辑常量,又称布尔常量。
流程图如下:

#include <typeinfo>    //变量类型头文件,还是有问题;无法判断int
#include <iostream>    //包含输入输出流头文件iostream
using namespace std;    //指明程序 使用命名空间std(标准)
int main()
{bool light=false;int n;cout<<"请输入拉开关几下:";cin>>n;cout<<typeid(n).name()<<endl;if (n>=0  && (n-int(n)==0))    //判断是否输入正常的开关次数 ,是否为整数。if (n%2==1)    //奇数次开关,则灯亮;否则灯灭。{light=!light;cout<<"灯亮";}elsecout<<"灯灭";elsecout<<"输入次数错误!";return 0;}

英汉小词典:
bool:布尔
false:假
true:真

练习:

1、表达式(5==6)的值是( )

   A.true     B.false      C.1      D.2

2、阅读程序写结果。

#include <iostream>    //包含输入输出流头文件iostream
using namespace std;    //指明程序 使用命名空间std(标准)
int main()
{bool flag;int n;cin>>n;if (n%2==0) flag=true;else flag=false;if (flag) cout<<"yes";else cout<<"no";return 0;}

输入:12
flag和n的输出:

3、完善第11、16行程序。
格莱尔家里有7扇房门,编号分别为1到7.格莱尔的爸爸把所有的门都打开,格莱尔的妈妈把所有编号是2的倍数的房门作相反的处理(原来开着的门关上,原来关上的门打开),格莱尔把所有编号是3的倍数的房门作相反的处理,问共有几扇门是开着的?

 1 #include<iostream>2 using namespace std;3 int main()4 {5    bool door1,door2,door3,door4,door5,door6,door7;6    int s=0;7    door1=door2=door3=door4=door5=door6=door6=door1=true;8    door2=!door2;9    door4=!door4;
10    door6=!door6;
11                 ;
12    door6=!door6;
13    if(door1)s++;
14    if(door2)s++; 
15    if(door1)s++;
16                  ;
17    if(door1)s++;
18    if(door1)s++;
19    if(door1)s++;
20    cout<<s<<endl;
21    return 0;
22 }

二、逻辑运算符

教学视频
例程:试编一个程序,输入一个整数,若是3和5的公倍数,则输出“欧耶欧耶”。
流程图如下:

程序:

#include <typeinfo>    //变量类型头文件,还是有问题;无法判断int
#include <iostream>    //包含输入输出流头文件iostream
using namespace std;    //指明程序 使用命名空间std(标准)
int main()
{int n;cout<<"请输入一个整数:";cin>>n;if(n%3==0)if(n%5==0) cout<<"欧耶欧耶"<<endl;return 0;}

这个问题的条件有两个,能被3整除且能被5整除,即n%3和n%5等于零这两条件都要满足。此时,需要用到表示“而且”的逻辑运算符&&(逻辑与)

流程图:

程序:

#include <typeinfo>    //变量类型头文件,还是有问题;无法判断int
#include <iostream>    //包含输入输出流头文件iostream
using namespace std;    //指明程序 使用命名空间std(标准)
int main()
{int n;cout<<"请输入一个整数:";cin>>n;if(n%3==0)if(n%5==0) cout<<"欧耶欧耶"<<endl;return 0;}

逻辑运算符:逻辑与(而且)——— && 逻辑或(或者)——— || 逻辑非(否)——— !

(1)逻辑与&&:
逻辑与是一个双目运算符,使用时&&的两边各一个表达式,如果运算符的左右两边的表达式都为真,表达式整体才为真,否则即为假,如表达式:5&&6、1&&-1、1<2&&5都为真,3-3&&5、10--&&0这两个表达式都为假。

(2)逻辑或||:
逻辑或运算符也是一个双目运算符,使用时候要求两边各一个表达式,如果运算符左右两边的表达式只要有一个为真,那么逻辑或表达式的整体就为真,否则都为假,如表达式:3-3||5为真,0||5-5为假。

(3) 逻辑非!:
逻辑非是一个单目运算符,它表示取反的意思,放在表达式的左边,如!a ,即原先为真的表达式取反之后变为假,原先为假的表达式取反之后变为真。如表达式!0结果为1,!(2>1)结果为0。

练习:

(1)判断整数n不能被3整除的表达式,下列( )是错误的。

A.n%3!=0     B.(n%3==1||n%3==2)       C.!(n%3==0)      D.(n%3==1&&n%3==2)

(2)阅读程序写结果。

#include <iostream>    //包含输入输出流头文件iostream
using namespace std;    //指明程序 使用命名空间std(标准)
int main()
{int n;int s=0;cin>>n;if (n%3==0 || n%5==0) s++;cin>>n;if (n%3==0 && n%5==0) s++;cin>>n;if (!(n%5==0)) s++;cout<<s;return 0;}

输入:15 15 15
n,s的输出:

(3)完善第18、21行程序。
再摸拟“比尔庄园”登录,输入正确的用户名和密码,输出欢迎语句“亲爱的小朋友,欢迎你!”,否则提示“用户名或密码不正确!”

8 #include <iostream>    //包含输入输出流头文件iostream 9 #include <string>
10 using namespace std;    //指明程序 使用命名空间std(标准) 
11 int main()
12 {
13     const int USER=201701;
14     const string PSW="Computer2020@sina.com";
15     int user;
16     string psw;
17     cout<<"用户名:";
18                    ;
19     cout<<"密码:";
20     cin>>psw;
21     if (           )
22         cout<<"亲爱的小朋友,欢迎你!"<<endl;
23     else
24         cout<<"用户名或密码不正确!";
25     return 0; 
26  }  

三、逻辑运算符的优先级

教学视频
地球绕太阳公转一周的时间称为一个回归年,大约是365.2422天。而我们所使用的日历是基于365天的一年,这样每年就会有大约0.2422天的差异。为了弥补这个差异,每四年增加一天,即闰年中的2月有29天。但是,这样又稍微多出了一些时间,因此又设定了能被100整除但不能被400整除的年份不是闰年的规则,以进一步调整误差。

例程:

试编一个程序,输入一个年份,判断是闰年还是平年。
注:四年一闰,百年不闰,四百年再闰。判断闰年的条件是:年份能被4整除但不能被100整除;或者能被400整除。
流程图如下:

#include <typeinfo>    //变量类型头文件,还是有问题;无法判断int
#include <iostream>    //包含输入输出流头文件iostream
using namespace std;    //指明程序 使用命名空间std(标准)
int main()
{bool flag;int year;cout<<"请输入一年份:";cin>>year;if ((year%4==0 && year%100!=0) || year%400==0)flag=true;elseflag=false;if (flag)cout<<year<<"是闰年"<<endl;elsecout<<year<<"是平年"<<endl;return 0;}

逻辑运算符的优先级:

练习:

(1)在C++中,表达式(11>12)&&(12<15)||(13+2==15)的值是()

   A.10        B.0       C.true       D.false

(2)阅读程序写结果。

#include <iostream>    //包含输入输出流头文件iostream
using namespace std;    //指明程序 使用命名空间std(标准)
int main()
{int x,y;cin>>x>>y;if (x>y && y!=0) cout<<x/y<<endl;else if (x!=0) cout<<y/x<<endl;return 0;}

输入:96 10
x,y的输出:
(3)完善第8、11行程序。
风之巅小学每学期都要进行“吃好、睡好、心情好”的“新三好学生”评比。评比时需要对“吃好”“睡好”“心情好”这三项进行量化打分,80分及以上为优秀,三项都达到优秀的就评为“新三好”,只有两项优秀的则被评为“双优生”。编一程序,输入某位同学的每项分值,判断是“新三好”还是“双优生”。
输入:95 98 100 输入:75 95 85
输出:新三好 输出:双优生

 1 #include <iostream>    //包含输入输出流头文件iostream 2 #include <string>3 using namespace std;    //指明程序 使用命名空间std(标准) 4 int main()5 {6     int eat,sleep,mood;7     cin>>eat>>sleep>>mood;8     if (       )9         cout<<"新三好";
10     else
11         if (eat<80 && sleep>=80 && mood>=80 || eat>=80 && sleep>=80 && mood<80 ||               )
12             cout<<"双优生"; 
13     return 0; 
14  }  

四、复合语句

教学视频
试编一程序,输入两个整数,比较大小,并按从小到大的顺序输出。
编程思想:当a小于或等于b时,先输出a,再输出b;否则先输出b,再输出a。
流程图如下:

#include <iostream> //包含输入输出流头文件iostream 
using namespace std; //指明程序 使用命名空间std(标准) 
int main() 
{ int a,b; cout<<"a,b="; cin>>a>>b; if (a<=b) cout<<a<<" "<<b<<endl; else cout<<b<<" "<<a<<endl; return 0; }

另一种方法:第1步先判断a是否大于b,当a大于b时,交换a和b的值;第2步输出a与b。
流程图:

#include <iostream>    //包含输入输出流头文件iostream
using namespace std;    //指明程序 使用命名空间std(标准)
int main()
{int a,b,t;cout<<"a,b=";cin>>a>>b;if (a>b)//若在if-else中间有多条语句时,用花括号括起来。{t=a;a=b;b=t;}cout<<a<<"  "<<b<<endl;return 0;
}

注意,上面采用了复合语句(语句块),和使程序清晰易读的“逐层缩进”布置。

练习:

(1)判断a不等于0,且b等于0的正确的逻辑表达式是( )

    A.a!=0&&b==0       B.!(a!=0&&b=0)       C.!(a==0&&b==0)       C.a!==0||b!==0)

(2)阅读程序写结果。

#include <iostream>    //包含输入输出流头文件iostream
using namespace std;    //指明程序 使用命名空间std(标准)
int main()
{char ch;int sum,n;cin>>ch;sum=0;if (ch>='a' && ch<='z'){n=ch-'a'+1;sum+=n;}elsesum=27;cout<<sum;return 0;
}

输入:b
ch,sum,n的输出:
(3)完善第22,25行程序。
设当前电梯停在第10层,此时第20层和第7层同时有人按下按钮,电梯总是选择离它近的楼层,于是先服务在第7层的人,再服务第20层的人。编程模拟电梯调度,输入3个数,第1个数表示电梯当前停在的楼层,后两个数表示同时需要使用电梯人楼层,按服务先后的次序输出楼层。

 8 #include <iostream>    //包含输入输出流头文件iostream 9 using namespace std;    //指明程序 使用命名空间std(标准) 
10 int main()
11 {
12     int n,n1,n2,len1,len2;
13     cout<<"输入当前电梯停在的楼层:";
14     cin>>n;
15     cout<<"输入同时需要服务的两个楼层:";
16     cin>>n1>>n2;
17     if (n-n1>0)    //求出当前电梯到n1的楼层数 len1
18         len1=n-n1;
19     else
20         len1=n1-n;
21     if (n-n2>0)    //求出当前电梯到n2的楼层数 len2
22                   ;
23     else
24         len2=n2-n;
25     if (       )    //先到距离近的楼层服务 
26         cout<<n1<<"---->"<<n2;
27     else
28         cout<<n2<<"---->"<<n1;
29     return 0;
30 }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/834231.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【跟着阿舜学音乐-笔记】1.11和弦的表现形式

和弦的分配 在音乐演奏中,和弦会有纵向和横向两种分配形式。 和弦最低的音铺垫了整体和弦宏观色彩与基调,一般词用和弦的根音,但并不一定。 同时最低的音通常要与上方的音有一定距离,一般是大于等于五度,具体也和音区有关。 所谓和声铺底,就是铺设主要和弦音的区域,一般…

NOIP2024加赛5

以后我要天天给学弟加hack,以后我要每个包绑一个hack。 交 hack,说高尚了,是在给你找错,代码有不是他写的,错又不是他犯的,找出错来想让大家警示一下,还要费心想 hack,你有什么理由骂。 退一万步讲,人家喜欢 hack 怎么你了,你可以过题来获得快感,人家不能插你代码获…

团队作业4——项目冲刺-5

信息项 内容课程名称 广工计院计科34班软工作业要求位置 作业要求作业目标 白蓝昏紫队团队集体协作完成项目开发GitHub链接 https://www.cnblogs.com/zayer11/p/18545116团队简介 队名:白蓝昏紫队 队员姓名 学号许億驰 3122004883(组长)陈文杰 3122004858沈思敏 3122004877王峥…

文件共享服务之实时备份(inotify+rsync)

任务需求 1.对NFS服务器上的静态资源实时备份(inotify+rsync) 主机列表 # 外网地址 内网地址 主机名 192.168.122.207 172.16.1.207 web-test-209 192.168.122.231 172.16.1.231 nfs-test-231 192.168.122.241 172.16.1.241 rsync-test-241架…

专题四:信息安全

信息系统安全属性 机密性:确保信息不暴露给未授权的实体或进程。 完整性:只有得到允许的人才能修改数据,并且能够判断出数据是否已被篡改。 可用性:得到授权的实体在需要时可访问数据,即攻击者不能占用所有的资源而阻碍授权者的工作。 可控性:可以控制授权范围内的信息流…

生产环境中AI调用的优化:AI网关高价值应用实践

随着越来越多的组织将生成式AI引入生产环境,他们面临的挑战已经超出了初步实施的范畴。如果管理不当,扩展性限制、安全漏洞和性能瓶颈可能会阻碍AI应用的推广。实际问题如用户数据的安全性、固定容量限制、成本管理和延迟优化等,需要创新的解决方案。 本文我们深入探讨了一些…

MobileViT-v1-所有patch内相对位置相同的token之间计算自注意力

paper def my_self(x: torch.Tensor):通过这段代码 可以把每张图片图片中相对位置相同的若干个tokens放到最后两个维度# [B, C, H, W] -> [B, C, n_h, p_h, n_w, p_w] # n_h是高度方向上可以分多少个patch p_h patch的高度 n_w 宽度方向上可以分多少个patch p_w patch的宽…

27. 使用MySQL之全球化和本地化

1. 字符集和校对顺序 数据库表被用来存储和检索数据。不同的语言和字符集需要以不同的方式存储和检索。因此,MySQL需要适应不同的字符集(不同的字母和字符),适应不同的排序和检索数据的方法。 在讨论多种语言和字符集时,将会遇到以下重要术语:字符集为字母和符号的集合;…

TCP/IP上三层协议

TCP/IP上三层的角色 同一台设备上的进程间通信有多种方式,如管道、消息队列、共享内存、信号等。而不同设备间的进程通信需要网络通信,由于设备具有多样性,因此协商出了一套通用的网络协议。这个网络协议是分层的,每一层都有各自的作用和职责,接下来将依据 “TCP/IP 网络模…

无线部分

AC堆叠(VAC) 配置两台AC设备,使用虚拟化方案组合成1台虚拟AC。 AC1和AC2之间的G 0/3-4端口作为虚拟交换链路。配置AC1为主,AC2为备。主设备 description为AC1,备用设备description为AC2。 AC1 virtual-ac domain 100device 1 device 1 priority 200 device 1 description …

DHCP欺骗

DHCP 欺骗原理DHCP 协议(Dynamic Host Configuration Protocol) 动态主机配置协议:主要给客户机提供 TCP/IP 参数,包括:IP 地址、子网掩码、网关、DNS、租期工作原理应用层协议,基于UDP 主机向服务器 67 号端口发送 DHCP 请求 服务器响应给客户机的 68号端口配置设置DHCP 服…

Redis运行的时候碰到# Creating Server TCP listening socket *:6379: bind: No error

Redis运行的时候碰到# Creating Server TCP listening socket *:6379: bind: No error 解决方案: 1、启动redis客户端:redis-cli.exe。 2、执行关闭命令:输入shutdown3、执行退出命令:exit4、重新启动Redis输入:redis-server.exe redis.windows.conf