当前位置: 首页 > news >正文

C++初学(16)

16.1、if语句

当C++程序必须决定是否执行某个操作时,通常使用if语句来实现选择。if有两种格式:if和if else。

if语句的语法与while相似:

if(text-condition)statement

如果text-condition(测试条件)为true,则程序执行statement(语句)。后者可以是一条语句,或者语句块。如果测试条件为false,则程序将跳过语句。与循环测试一样,if测试条件也将被强制转换为bool值,因此0将被转换为false,非零为true。

#include<iostream>
int main()
{using namespace std;char ch;int spaces = 0;int total = 0;cin.get(ch);while (ch != '.'){if (ch == ' ')++spaces;++total;cin.get(ch);}cout << spaces << " spaces, " << total;cout << " characters total in sentence ";return 0;
}

仅当ch为空格时,语句++spaces;才会被执行。因为语句++total;位于if语句的外面,因此在每轮循环中都将被执行。注意:字符总数中包括按回车键生成的换行符。

16.2、if else语句

if语句让程序决定是否执行特定的语句或语句块,而if else语句则让程序决定执行两条语句或语句块中的哪一条,这种语句对于选择其中一种操作很有用。if else语句的通用格式如下:

if (text-condition)statement1
elsestatement2

如果测试条件为true或非0,则程序将执行statement1,跳过statement2;如果测试条件为false或0,则程序跳过statement1,执行statement2。

#include <iostream>
int main()
{using namespace std;char ch;cout << "Type,and I shall repeart." << endl;cin.get(ch);while (ch != '.'){if (ch == '\n')cout << ch;elsecout << ++ch;cin.get(ch);}cout << endl << "Please excuse the slight confusion." << endl;return 0;
}

16.3、格式化if else语句

如果需要多条语句,需要用大括号将它们括起来,因为C++不会将它们视为一个代码块。如:

if(ch=='Z')zerro++;
cout<<"Another Zorro candidate"<<endl;
elsedull++;
cout<<"Not a Zorro candidate"<<endl;

上面这段代码程序执行zerro++;后,视为一段简单的if语句,而后执行cout语句,但之后识别到else将会出错。如果像这样,就不会出错:

if(ch=='Z')
{zerro++;
cout<<"Another Zorro candidate"<<endl;
}
else{ dull++;
cout<<"Not a Zorro candidate"<<endl;
}

16.4、if else if else语句

其实if else语句不仅仅只有两个选择,可以将if else语句进行拓展来满足这种需求。例如:

if(ch=='A')a_grade++;
else if(ch=='B')b_grade++;
else soso++;

因为else后面可以是一条语句或者语句块,因此可以在else语句后加上if else进行嵌套:

#include <iostream>
const int Fave = 32;
int main()
{using namespace std;int n;cout << "Enter a number in the range 1-100 to find";cout << " my favourite number : ";do {cin >> n;if (n < Fave)cout << "Too low -- guess again: ";else if (n > Fave)cout << "Too high -- gusee again: ";elsecout << Fave << " is right!" << endl;} while (n != Fave);return 0;
}

上面的程序让用户输入一个值,不同输入有不同的结果。

16.5、逻辑表达式

假设你需要一个字符无论输入大写或小写都可以,你需要测试多种条件。而C++提供三种运算符来组合和修改已有表达式:逻辑OR(||)、逻辑AND(&&)和逻辑NOT(!)。

16.5.1、逻辑OR运算符(||):

C++采用逻辑OR运算符,将两个表达式组合在一起。如果原来表达式中的任何一个或者全部都为true,则得到的表达式为true,否则为false。下面是一些例子:

5==5||5==9
5>3||5>10
5>8||5<2

上面的表达式里前面两个结果为true,最后为false。由于||的优先级比关系运算符低,因此不需要在这些表达式中使用括号。

C++规定,||运算符是个顺序点。也就是说先修改左侧的值,再对右侧的值进行判定。例如:

i++<6||i==j    假设i的值原来是10,则在i和j进行比较时,i的值为11。另外如果左侧的表达式为true,则C++将不会去判断右侧的表达式。

#include <iostream>
int main()
{using namespace std;cout << "This program may reformat your hard disk" << endl<< "and destory all your data." << endl<<"Do you wish to continue?<y/n>";char ch;cin >> ch;if (ch == 'y' || ch == 'Y')cout << "You were warned!\a\a\n";else if (ch == 'n' || ch == 'N')cout << "A wish choice … bye" << endl;elsecout << "That wasn't a y or n!Apparently you ""can't follow\ninstructions,so ""I'll trash your disk anyway.\a\a\a\n";return 0;
}

16.5.2、逻辑AND运算符:&&

&&与||运算符很多相同之处,唯一不同的是&&仅当两个表达式都为true得到的表达式的结果才为true。下面给一段有亿点长的程序(不是你也知道啊):

#include <iostream>
const int ArSize = 6;
int main()
{using namespace std;float naaq[ArSize];cout << "Enter the NAQQS (New Age Awereness Quotients)"<< "of\nyour neighbors.Program terminates "<< "when you make\n" << ArSize << " entries "<< "or enter a negative value." << endl;int i = 0;float temp;cout << "First value: ";cin >> temp;while (i < ArSize && temp>0){naaq[i] = temp;++i;if (i < ArSize){cout << "Next value: ";cin >> temp;}}if (i == 0)cout << "No data --bye" << endl;else{cout << "Enter your NAAQ: ";float you;cin >> you;int count = 0;for (int j = 0; j < i; j++)if (naaq[j] > you)++count;cout << count;cout << " of your neighbors have greater awareness of" << endl<< "the New Age than you do." << endl;}return 0;
}

我们来看一下程序的输入部分:

cin >> temp;while (i < ArSize && temp>0){naaq[i] = temp;++i;if (i < ArSize){cout << "Next value: ";cin >> temp;}}

该程序将第一个输入值读入到临时变量temp中,然后while测试条件查看数组是否还有空间(i<ArSize)以及输入值是否为负值。如果满足条件,则将temp的值复制到数组中。

16.5.3、用&&来设置取值范围

&&运算符还允许建立一系列的if else if else语句,其中每种选择都对应一个特定的取值范围。

#include <iostream>
const char* qualify[4] =
{	"10000-meter race.\n","mud tug - of - war.\n","masters canoe jousting.\n","pie-throwing festival.\n"
};
int main()
{using namespace std;int age;cout << "Enter your age in years: ";cin >> age;int index;if (age > 17 && age < 35)index = 0;else if (age >= 35 && age < 50)index = 1;else if (age >= 50 && age < 65)index = 2;elseindex = 3;cout << "You qualify for the " << qualify[index];return 0;
}

 

表达式age>17&&age<35测试年龄是否在这两个值之间,我输入了24,则省略后面的测试。使用时应确保取值范围之间既没有缝隙,也没有重复。

16.5.4、逻辑NOT表达式:!

!运算符将它后面的表达式的真值取反。也就是说,如果expression为true或非0,则!expression是false。其实就像下面表达式:

if(!(x>5))==if(x<=5)

下面给一段程序: 

#include<iostream>
#include<climits>
bool is_int(double);
int main()
{using namespace std;double num;cout << "Yo,dude!Enter an integer value: ";cin >> num;while (!is_int(num)){cout << "Out of range -- please try again: ";cin >> num;}int val = int(num);cout << "You've entered the integer " << val << "\nBye\n";return 0;
}bool is_int(double x)
{if (x <= INT_MAX && x >= INT_MIN)return true;else return false;
}

这个程序来筛选可赋给int变量的数字输入。

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Windows系统上进行项目管理工具VisualSVN Server服务端的保姆级安装教程与配置和SVN客户端保姆级安装教程和使用
  • 【项目】云备份系统笔记
  • 部署SAM2遇到的问题
  • JVM理论篇(一)
  • 项目策划书六度自由双足机器人
  • 云计算day33
  • Docker Desktop镜像路径修改一直报错
  • Linux环境下配置jdk、Tomcat和Mysql详解
  • 高性能web服务器4——Nginx反向代理A
  • 工业数采边缘网关: 直击行业痛点,GXF222-4G助您解忧
  • Cesium 全球视角 和 多方案镜头切换
  • webserver使用webbench工具连续压测失败
  • java grpc 使用
  • 关于tresos Studio(EB)的MCAL配置之ADC
  • linux 进程开机自启
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • ERLANG 网工修炼笔记 ---- UDP
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • Idea+maven+scala构建包并在spark on yarn 运行
  • JavaScript类型识别
  • JS数组方法汇总
  • k8s如何管理Pod
  • Nacos系列:Nacos的Java SDK使用
  • Phpstorm怎样批量删除空行?
  • windows下使用nginx调试简介
  • 大数据与云计算学习:数据分析(二)
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 将 Measurements 和 Units 应用到物理学
  • 删除表内多余的重复数据
  • 使用Swoole加速Laravel(正式环境中)
  • 2017年360最后一道编程题
  • Semaphore
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • ###STL(标准模板库)
  • #{} 和 ${}区别
  • #android不同版本废弃api,新api。
  • (20)docke容器
  • (C++二叉树05) 合并二叉树 二叉搜索树中的搜索 验证二叉搜索树
  • (C语言)fread与fwrite详解
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (ZT)薛涌:谈贫说富
  • (独孤九剑)--文件系统
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (区间dp) (经典例题) 石子合并
  • (三十)Flask之wtforms库【剖析源码上篇】
  • (三十五)大数据实战——Superset可视化平台搭建
  • ***通过什么方式***网吧
  • *算法训练(leetcode)第三十九天 | 115. 不同的子序列、583. 两个字符串的删除操作、72. 编辑距离
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .NET 8 跨平台高性能边缘采集网关
  • .Net Core缓存组件(MemoryCache)源码解析
  • .NET MVC 验证码