C++初学(16)

news2024/12/25 9:00:56

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
else
  statement2

如果测试条件为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;
		else
			cout << ++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;
else
  dull++;
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: ";
		else
			cout << 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;
	else
		cout << "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;
	else
		index = 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变量的数字输入。

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

iTimes工时管理系统:企业高效管理的得力助手

在当今快节奏的商业环境中&#xff0c;企业面临着越来越多的挑战&#xff0c;其中之一便是如何高效、准确地管理员工工时。工时管理不仅关乎企业的成本控制&#xff0c;还直接影响到项目执行效率、员工满意度以及整体运营水平。因此&#xff0c;选择一款优秀的工时管理系统显得…

【应用层】Tomcat10安装以及对应的VScode插件使用

文章日期是2024年8月26日&#xff0c;Tomcat10为稳定版中最新的&#xff0c;Tomcat11为测试版。 流程&#xff1a;下载Tomcat10-->等待下载时&#xff0c;安装对应的VScode插件-->配置Tomcat10-->配置对应的VScode插件 1、下载Tomcat10 2、安装对应的VScode插件 3…

Codeforce 963

CF 963 B 模拟加贪心 偶数个数C 模拟前缀和 灯能否全亮D 二分DP 中位数尽可能大F1 模拟镜像 题目链接 B 模拟加贪心 偶数个数 考点&#xff1a;贪心 思路&#xff1a;除了全是偶数的情况&#xff0c;其他的情况都需要将偶数转换为奇数。最少的操作步数是偶数个数&#xff0c;…

IOS 15 实现Toast和小菊花Loading提示

本文主要是实现toast和loading两种提示功能&#xff0c;例如&#xff1a;登陆时参数不正确提示&#xff0c;toast提示后会自动隐藏。加载提示&#xff1a;不会自动隐藏&#xff0c;常用于网络请求&#xff0c;上传等。 添加依赖 #提示框架 #https://github.com/jdg/MBProgress…

20240828 每日AI必读资讯

8岁女孩玩转AI编程&#xff0c;45分钟打造聊天机器人&#xff0c;Karpathy都看呆了 - 新晋顶流AI代码编辑器——Cursor&#xff0c;已经进化到了“0手工代码”阶段。 - 提供了多个AI模型&#xff0c;包括GPT-4、GPT-4o和Claude 3.5 Sonnet等&#xff0c;可以通过跟大模型聊天…

一文弄懂MySQL中的锁

MySQL中的锁概述 MySQL中的锁机制是数据库管理系统用于控制并发操作的一种手段&#xff0c;主要用于保证数据的一致性和完整性。当多个事务同时操作同一数据时&#xff0c;锁机制可以防止数据冲突和确保事务的隔离性。 在MySQL中&#xff0c;锁可以分为三大类&#xff1a;全局…

如何用Python Django和Vue构建网络电视剧收视率分析系统?

&#x1f393; 作者&#xff1a;计算机毕设小月哥 | 软件开发专家 &#x1f5a5;️ 简介&#xff1a;8年计算机软件程序开发经验。精通Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等技术栈。 &#x1f6e0;️ 专业服务 &#x1f6e0;️ 需求定制化开发源码提…

《计算机操作系统》(第4版)第11章 多媒体操作系统 复习笔记

第11章 多媒体操作系统 一 、多媒体系统简介 1. 多媒体的概念 多媒体 (multimedia) 目前没有统一的定义&#xff0c;一般是指多种方法、多种形态传输(传播)的信息介质、多种 载体的表现形式以及多种存储、显示和传递方式。 2.超文本和超媒体 (1)超文本 (hypertext)。 (2)超链接…

探索Python性能监控的瑞士军刀:psutil的神秘面纱

文章目录 探索Python性能监控的瑞士军刀&#xff1a;psutil的神秘面纱背景&#xff1a;为何psutil不可或缺&#xff1f;什么是psutil&#xff1f;如何安装psutil&#xff1f;五个简单的库函数使用方法场景应用&#xff1a;psutil在实际开发中的妙用常见问题与解决方案总结 探索…

性价比高的开放式耳机?开放式耳机推荐

在开放式耳机市场中&#xff0c;有多个品牌的性价比表现较为突出。以下是一些性价比较高的开放式耳机品牌及其产品特点&#xff1a; 1.虹觅&#xff08;Holme&#xff09; 虹觅Fit2&#xff1a; 以其简约而不失精致的设计&#xff0c;首先吸引了众多目光。这款耳机采用可调节…

苹果M4芯片Mac全面曝光 或10月发布

彭博社的马克・古尔曼&#xff08;Mark Gurman&#xff09;发布博文&#xff0c;曝料称苹果内部正在测试 4 款采用 M4 芯片的 Mac 设备&#xff0c;有望今年秋季&#xff08;可能是 10 月&#xff09;发布。 古尔曼表示苹果计划今年升级 MacBook Pro、Mac mini 和 iMac 产品线&…

驱动:中断底半部 platform平台总线

中断底半部实现方法&#xff1a; 1. 软中断2. tasklet 3. workqueue 解释 workqueue和tasklet是Linux内核中用于处理中断后续任务的两种机制&#xff0c;它们在中断处理流程中扮演着重要的角色。下面是对它们的详细解释&#xff1a; Tasklet 定义与作用&#xff1a; Taskl…

Vue笔记总结(Xmind格式):第二天

Xmind鸟瞰图&#xff1a; 简单文字总结&#xff1a; vue知识总结&#xff1a; 创建vue脚手架&#xff1a; 1.安装Node.js&#xff1a;Vue CLI作为一个npm包&#xff0c;需要Node.js来安装和运行。 2.安装Vue CLI&#xff1a;cmd指令 npm install -g vue/cli 3.创…

【微前端】前端微服务框架对比和技术选型

文章目录&#xff1a; 目录 文章目录&#xff1a; 前言&#xff1a; 具体内容&#xff1a; 1.什么是微前端 2.使用微服务的场景&#xff1a; iframe方案的缺点&#xff1a; 3.主流微服务框架介绍 2.1 无界-腾讯 官网 github地址&#xff1a; 无界的运行模式 简单了…

git笔记:git常用命令备忘录

1、工作区域和文件状态 1.1、工作区域 git的数据管理分为四个区域&#xff1a; 工作区&#xff08;Working Directory&#xff09; 本地工作目录&#xff0c;是我们电脑上的目录&#xff0c;是我们实际编写代码的区域&#xff0c;修改完工作区的文件后可以使用git add命令将…

Web开发:在 try-catch 块中有效捕捉和记录日志的最佳实践

目录 一、控制台程序&#xff08;demo&#xff09; 二、封装方法 三、实现效果 一、控制台程序&#xff08;demo&#xff09; using System.Diagnostics;namespace Progaram {class Program{public class Student{public int Id { get; set; }public string Name { get; se…

DataWhale AI夏令营-《李宏毅深度学习教程》笔记

DataWhale AI夏令营-《李宏毅深度学习教程》笔记 第三章 深度学习基础补充一些基础临界点及其种类逃离临界点方法批量动量自适应学习率学习率调度 分类分类损失批量归一化 之前一直接触的LLM大模型做一些应用&#xff0c;或者传统的自然语言处理&#xff0c;都是直接拿别人的模…

坐牢第三十天(c++)

1.作业&#xff1a; 提示并输入一个字符串&#xff0c;统计该字符串中字母个数、数字个数、空格个数、其他字符的个数 #include <iostream> #include <stdio.h> #include <string> using namespace std; int main(int argc, char const *argv[]) {string st…

什么软件可以用平板远程控制电脑?

在当今快节奏的工作和生活中&#xff0c;使用平板远程控制电脑已成为一种便捷高效的办公方式。无论你是想随时随地访问办公室的电脑&#xff0c;还是需要在旅途中进行紧急工作任务&#xff0c;Splashtop都是你的不二选择。本文将介绍如何使用Splashtop通过平板远程控制电脑&…

谷粒商城实战笔记-260-商城业务-消息队列-可靠投递-消费端确认

文章目录 一,Ack消息确认机制简介1,简介2,两个常用的Api二,消费者端消息确认实战三,RabbitMQ可靠性保障总结1,生产者2,消费者一,Ack消息确认机制简介 消费者端的确认机制(ACK/NACK)是RabbitMQ中一种重要的特性,它允许消费者告知Broker它们是否成功处理了接收到的消息…