第 6 章 分支语句和逻辑运算符

第 6 章 分支语句和逻辑运算符

6.1 if 语句

语句格式:

if (test-expression)
	statement;

6.1.1 if else 语句

语句格式:

if (test-condition)
	statement1;
else
	statement2;

接下来,从C++ Primer Plus 上摘录了一段利用 if-else 进行加密的程序,个人觉得很意思。

// if-else.cpp
#include <iostream>
int main()
{
	using namespace std;
	char ch;
	cout << "Type, and I shall repeat. \n";
	cin.get(ch); // 获取第一个字符
	
	// 停止字符标志 .
	while(ch != '.') 
	{
	// 若 获取的字符为换行符,则将换行符输出
		if (ch == '\n') 
			cout << ch;
	//若 获取的字符是非换行符,则将字符的ASCII码 +1 后输出,即 a -> b
		else
			cout << ++ch;
		cin.get(ch);  // 获取下一个字符
	}
	cout << "\nPlease excuse the slight confusion.\n";
	return 0;
}

6.1.2 if-else-if-else 语句

6.2 逻辑表达式

OR:|| 或逻辑运算符;
AND:&& 与逻辑运算符,可以用其设置范围;

if(age > 17 && age < 40)

NOT:!非逻辑运算符。

6.3 字符函数库 cctype

包含确定字符是否为大写字母,数字,标点符号等函数的头文件。
如果 ch 是一个字母,则 isalpha(ch) 函数返回一个非零值,否则返回0。
如果 ch 是一个标点符号,则 ispumct(ch) 将返回true,否则返回0。
(这些函数的返回类型为 int ,而不是 bool,但通常 bool 转换让我们能够将它们视为 bool 类型。)

函数名称返回值
isalnum()如果参数是字母数字,即字母or数字,返回true
isalpha()如果参数是字母,返回true
iscntrl()如果参数是控制字符,返回true
isdigit()如果参数是数字(0-9),返回true
isgraph()如果参数是除空格之外的打印字符,则函数返回true
islower()如果参数是小写字母,返回true
isprint()如果参数是打印字符(包括空格),返回true
ispunct()如果参数是标点符号,返回true
isspace()如果参数是标准空白字符,如空格、进纸、换行符、回车、水平制表或者垂直制表符,返回true
isupper()如果参数是大写字母,返回true
isxdigit()如果参数是十六进制数字,即0-9、a-f 或 A-F,返回true
tolower()如果参数是大写字符,则返回其小写,否则返回该参数
toupper()如果参数是小写字符,则返回其大写,否则返回其参数

6.4 ?:条件运算符

expression1 ? expression2 :expression3;

如果 expression1 为 true,返回 expression2 的值,否则返回 expression3 的值。

6.4.1 ?: or if-else

从可读性来说,条件运算符最适合于简单关系和简单表达式的值,当代码变得更复杂时,使用 if-else 语句来表达可能更为清晰。

6.5 switch 语句

switch(inteer-expression)
{
	case label1: statement1; break;
	case label2: statement2; break;
	......
	default: statement;
}

6.5.1 将枚举用作 switch 语句的标签

// cin 无法识别枚举类型,当 switch 语句将 int 值
// 和枚举量标签进行比较时,将枚举提升为 int
#include <iostream>
enum {red, orange, yellow, green, blue, violet, indigo}; // 枚举量
int main()
{
	using namespace std;
	cout << "Enter color code (0-6):";
	int code;
	cin >> code;
	while(code >= red && code <= indigo)
	{
		switch(code)
		{
			case red: cout << "Her lips were red.\n"; break;
			case orange: 
			......
			case indigo: ...                                         break;
		}
		cout << "Enter color code (0-6):";
		cin >> code;
	}
	cout << "Bye\n";
	return 0;
}

6.5.2 switch 和 if-else 语句

switch 语句中的每一个 case 标签必须是一个单独的值,且为整数,因此 switch 无法处理浮点测试,另外 case 标签值必须是常量。
因此如果涉及取值范围,浮点测试或两个变量的比较,则应该用 if else 语句。若选项超过两个,switch 语句更好,效率高。

6.6 break 和 continue 语句区别

while(cin.get(ch))
{
	statement1;
	if(ch == '\n')
		continue; // -> while(cin.get(ch))
	statement2;
}
statement3;
while(cin.get(ch))
{
	statement1;
 	if(ch == '\n')
  		break; // -> statement3
 	statement2;
}	
statement3;
// break & continue 的运用

const int Arsize = 80;
int main()
{
	using namespace std;
	char line[Arsize];
	int space = 0;
	cout << "Enter a line of text: \n";
	cin.get(line,Arsize);
	cout << "Complete line:\n" << line << endl;
	cout << "Line through first period: \n";
	for(int i = 0; line[i] = != '\0'; i++)
	{
		cout << line[i];
		if(line[i] == '.')
			break; // 判断是否为一句话,若是,则跳出循环
		if(line[i] != ' ')
			continue; // 判断是不是空格,若是,则执行space++,继续循环
		space++;
	}
	cout << "\n" << space << "spaces\n";
	cout << "Done\n";
	return 0;
}

6.7 读取数字和循环

假设要编写一个将一系列数字读入到数组中的程序,并允许用户在数字填满之前结束输入,一中方法是使用 cin :

int n;
cin >> n;

如果用户输入一个单词,而不是一个数字,则为类型不匹配的情况,则有4种结果:

// n的值保持不变
// 不匹配的输入将保留在输入列队中
// cin对象中的一个错误标记被设置
// 对cin方法的调用将返回false

返回false意味着可以用非数字输入来结束读取数字的循环,非数字输入设置错误标记意味着必须重置该标记,程序才能继续读取输入。clear() 方法重置输入标记,同时也重置文件末尾。输入错误和EOF都将导致cin 返回 false。

重置方式如下:

int golf[Max];

......

while(!(cin >> golf[i]))  // 判断输入是否为数字
{
	cin.clear(); // 1 重置 cin 以接受新的输入
	while(cin.get() != '\n') // 2 删除输入错误
		continue; 
	cout << "请输入数字:\n"; // 3 提示用户再次输入
}

6.8 简单文件输入/输出

6.8.1 文本IO和文本文件

在这里插入图片描述
在这里插入图片描述

6.8.2 写入到文本文件中

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hi小黄人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值