C++入门03——程序流程结构

news2024/11/16 20:58:08

C/C++支持最基本的三种程序运行结构:顺序结构、选择结构、循环结构

  • 顺序结构:程序按顺序执行,不发生跳转

  • 选择结构:依据条件是否满足,有选择的执行相应功能

  • 循环结构:依据条件是否满足,循环多次执行某段代码

1.选择结构

1.1 if语句

作用:执行满足条件的语句

if语句的三种形式

  • 单行格式if语句

  • 多行格式if语句

  • 多条件的if语句

单行格式if语句:

if(条件){ 条件满足执行的语句 } 

#include <iostream>
using namespace std;

int main() {

	//选择结构-单行if语句
	//输入一个分数,如果分数大于600分,视为考上一本大学,并在屏幕上打印

	int score = 0;
	cout << "请输入一个分数:" << endl;
	cin >> score;

	cout << "您刚才输入的分数为:" << score << endl;

	// if 语句
	// 注意事项,在if判断语句后面,不要加分号
	if (score > 600)
	{
		cout << "可以考上大学!!" << endl;
	}

	system("pause");

	return 0;

 

 多行格式if语句:

if(条件){ 条件满足执行的语句 }else{ 条件不满足执行的语句 };

#include <iostream>
using namespace std;

int main() {

	//选择结构-单行if语句
	//输入一个分数,如果分数大于600分,视为考上一本大学,并在屏幕上打印

	int score = 0;
	cout << "请输入一个分数:" << endl;
	cin >> score;

	cout << "您刚才输入的分数为:" << score << endl;

	// if 语句
	// 注意事项,在if判断语句后面,不要加分号
	if (score > 600)
	{
		cout << "可以考上大学!!" << endl;
	}
	else
	{
		cout << "考不上,回去种地吧!" << endl;
	}

	system("pause");

	return 0;

}

 注意:if条件表达式后不要加分号

 多条件的if语句:

if(条件1){ 条件1满足执行的语句 }else if(条件2){条件2满足执行的语句}... else{ 都不满足执行的语句}

 实例:

	int main() {

	int score = 0;

	cout << "请输入考试分数:" << endl;

	cin >> score;

	if (score > 600)
	{
		cout << "我考上了一本大学" << endl;
	}
	else if (score > 500)
	{
		cout << "我考上了二本大学" << endl;
	}
	else if (score > 400)
	{
		cout << "我考上了三本大学" << endl;
	}
	else
	{
		cout << "我未考上本科" << endl;
	}

	system("pause");

	return 0;
}

 嵌套if语句

在if语句中,可以嵌套使用if语句,达到更精确的条件判断。

案例需求:

  • 提示用户输入一个高考考试分数,根据分数做如下判断

  • 分数如果大于600分视为考上一本,大于500分考上二本,大于400考上三本,其余视为未考上本科;

  • 在一本分数中,如果大于700分,考入北大,大于650分,考入清华,大于600考入人大。

示例:

#include <iostream>
using namespace std;

int main() {

	//选择结构-单行if语句
	//输入一个分数,如果分数大于600分,视为考上一本大学,并在屏幕上打印

	int score = 0;
	cout << "欢迎进入高考志愿填报系统,请输入您的高考分数:" << endl;
	cin >> score;

	cout << "您刚才输入的分数为:" << score << endl;

	// if 语句
	// 注意事项,在if判断语句后面,不要加分号
	if (score >= 600)
	{
		cout << "过一本线了!!" << endl;
		if (score > 700) {
			cout << "去北大吧,都超700了!!" << endl;
		}
		else if (score > 650) {
			cout << "去清华吧!大佬。" << endl;
		}

		else {
			cout << "去人大也还不错!" << endl;
		}
	}
	else if (500 < score )
	{
		cout << "考上二本,有书读了!!" << endl;
	}
	else if (400 < score) {
		cout << "只能上个三本了。" << endl;
	}
	else {
		cout << "补习吧" << endl;
	}

	system("pause");

	return 0;

}

 

 

1.2 三目运算符

作用: 通过三目运算符实现简单的判断

语法:表达式1 ? 表达式2 :表达式3

解释:

如果表达式1的值为真,执行表达式2,并返回表达式2的结果;

如果表达式1的值为假,执行表达式3,并返回表达式3的结果。

示例:

int main() {
​
    int a = 10;
    int b = 20;
    int c = 0;
​
    c = a > b ? a : b;
    cout << "c = " << c << endl;
​
    //C++中三目运算符返回的是变量,可以继续赋值
​
    (a > b ? a : b) = 100;
​
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
    cout << "c = " << c << endl;
​
    system("pause");
​
    return 0;
}

总结:和if语句比较,三目运算符优点是短小整洁,缺点是如果用嵌套,结构不清晰

 

1.3 switch语句

作用:执行多条件分支语句

语法:

switch(表达式)

{

	case 结果1:执行语句;break;

	case 结果2:执行语句;break;

	...

	default:执行语句;break;

}

实例:

int main() {

	//请给电影评分 
	//10 ~ 9   经典   
	// 8 ~ 7   非常好
	// 6 ~ 5   一般
	// 5分以下 烂片

	int score = 0;
	cout << "请给电影打分" << endl;
	cin >> score;

	switch (score)
	{
	case 10:
	case 9:
		cout << "经典" << endl;
		break;
	case 8:
		cout << "非常好" << endl;
		break;
	case 7:
	case 6:
		cout << "一般" << endl;
		break;
	default:
		cout << "烂片" << endl;
		break;
	}

	system("pause");

	return 0;
}

注意1:switch语句中表达式类型只能是整型或者字符型

注意2:case里如果没有break,那么程序会一直向下执行

总结:与if语句比,对于多条件判断时,switch的结构清晰,执行效率高,缺点是switch不可以判断区间

2.循环结构

2.1 while循环语句

 

#include <iostream>
#include <random>
using namespace std;

int main() {
	 
	random_device rd; // 创建一个随机数生成器引擎
	mt19937 gen(rd()); // 使用伪随机数生成器

	uniform_int_distribution<int> distribution(1, 100); // 创建一个分布,指定随机数范围

	int random_number = distribution(gen); // 生成随机数
	int guess;
	int attempts = 0;

	cout << "欢迎来到猜数游戏!" << endl;
	
	while (true)
	{
		cout << "请猜1~100之间的数字: " << endl;
		cin >> guess;
		attempts++;

		if (guess < 1 || guess > 100) {
			cout << "猜的数字不在1-100的范围内,请重试!" << endl;
		}
		else if (guess < random_number) {
			cout << "你猜小了,再猜一猜!" << endl;
		}
		else if (guess > random_number) {
			cout << "你猜大了,再猜一猜!" << endl;
		}
		else {
			cout << "恭喜你猜对了,答案是:" << random_number << "。你猜了"<< attempts<<"次!!" << endl;
			break;
		}
	}

	system("pause");

	return 0;

}

 

2.2 do...while循环语句

 实例:

int main() {

	int num = 0;

	do
	{
		cout << num << endl;
		num++;

	} while (num < 10);
	
	
	system("pause");

	return 0;
}

总结:与while循环区别在于,do...while先执行一次循环语句,再判断循环条件 。

例子:计算1到10的累加:

#include <iostream>
using namespace std;

int main(){
	
	int sum = 0, i = 1;
	do {
		sum = sum + i;
		i++;
	} while (i <= 10);
	cout << "数字1-10的和为:" << sum << endl;

	
	system("pause");
	return 0;

}

练习案例:水仙花数

案例描述:水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身

例如:1^3 + 5^3+ 3^3 = 153

请利用do...while语句,求出所有3位数中的水仙花数

 答案1:

#include <iostream>
using namespace std;

int main() {
	int i = 100, ge = 0, shi = 0, bai = 0;
	do {
		ge = i % 10;
		bai = i / 100;
		shi = (i - bai * 100) / 10;
		if (ge * ge * ge + shi * shi * shi + bai * bai * bai == i) {
			cout << "水仙花数:" << i << endl;
		}

		i++;
	} while (i < 1000);
	system("pause");
	return 0;

}

 

 答案2:

#include <iostream>
using namespace std;

int main() {
    int number = 100; // 从100开始查找三位数
    int sum, temp, remainder;

    cout << "水仙花数:";

    do {
        sum = 0;
        temp = number;

        while (temp > 0) {
            remainder = temp % 10; //依次拿到个位,十位,百位
            sum += (remainder * remainder * remainder); 
            temp /= 10;  // temp = temp /10
        }

        if (sum == number) {
            cout << number << " ";
        }

        number++;
    } while (number < 1000);

    cout << endl;

    return 0;
}

2.3 for循环语句

作用: 满足循环条件,执行循环语句

语法:for(起始表达式;条件表达式;末尾循环体) { 循环语句; }

 示例:

int main() {

	for (int i = 0; i < 10; i++)
	{
		cout << i << endl;
	}
	
	system("pause");

	return 0;
}

注意:for循环中的表达式,要用分号进行分隔

总结:while , do...while, for都是开发中常用的循环语句,for循环结构比较清晰,比较常用

 

3 跳转语句

3.1 break语句

作用: 用于跳出选择结构或者循环结构

break使用的时机:

  • 出现在switch条件语句中,作用是终止case并跳出switch

  • 出现在循环语句中,作用是跳出当前的循环语句

  • 出现在嵌套循环中,跳出最近的内层循环语句

 示例1:

	//1、在switch 语句中使用break
	cout << "请选择您挑战副本的难度:" << endl;
	cout << "1、普通" << endl;
	cout << "2、中等" << endl;
	cout << "3、困难" << endl;

	int num = 0;

	cin >> num;

	switch (num)
	{
	case 1:
		cout << "您选择的是普通难度" << endl;
		break;
	case 2:
		cout << "您选择的是中等难度" << endl;
		break;
	case 3:
		cout << "您选择的是困难难度" << endl;
		break;
	}

	system("pause");

	return 0;
}

实例2:

int main() {
	//2、在循环语句中用break
	for (int i = 0; i < 10; i++)
	{
		if (i == 5)
		{
			break; //跳出循环语句
		}
		cout << i << endl;
	}

	system("pause");

	return 0;
}

示例3:

int main() {
	//在嵌套循环语句中使用break,退出内层循环
	for (int i = 0; i < 10; i++)
	{
		for (int j = 0; j < 10; j++)
		{
			if (j == 5)
			{
				break;
			}
			cout << "*" << " ";
		}
		cout << endl;
	}
	
	system("pause");

	return 0;
}

3.2 continue语句

 作用:在循环语句中,跳过本次循环中余下尚未执行的语句,继续执行下一次循环

 示例:

int main() {

	for (int i = 0; i < 100; i++)
	{
		if (i % 2 == 0)
		{
			continue;
		}
		cout << i << endl;
	}
	
	system("pause");

	return 0;
}

注意:continue并没有使整个循环终止,而break会跳出循环  

3.3 goto语句

作用:可以无条件跳转语句

语法: goto 标记;

解释:如果标记的名称存在,执行到goto语句时,会跳转到标记的位置

 示例:

int main() {

	cout << "1" << endl;

	goto FLAG;

	cout << "2" << endl;
	cout << "3" << endl;
	cout << "4" << endl;

	FLAG:

	cout << "5" << endl;
	
	system("pause");

	return 0;
}

注意:在程序中不建议使用goto语句,以免造成程序流程混乱  

 

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

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

相关文章

Leetcode刷题详解——寻找旋转排序数组中的最小值

1. 题目链接&#xff1a;153. 寻找旋转排序数组中的最小值 2. 题目描述&#xff1a; 已知一个长度为 n 的数组&#xff0c;预先按照升序排列&#xff0c;经由 1 到 n 次 旋转 后&#xff0c;得到输入数组。例如&#xff0c;原数组 nums [0,1,2,4,5,6,7] 在变化后可能得到&…

通俗介绍:什么是 Redis ?

刚接触 Redis 的伙伴们可能会因为不熟悉而感到困惑。本文简述 Redis 是什么、有哪些作用的问题&#xff0c;是一篇短浅而入门级别的文章。 Redis官网&#xff1a;Redis 打开 Redis 官网可以看到&#xff0c;官方对 Redis 的介绍是这样的&#xff1a;The open source, in-memo…

win10安装spark

一、进入spark下载页面 连接 Downloads | Apache Spark 二、解压下载后的.tgz文件 直接解压即可 三、运行 运行bin目录下的 spark-shell.cmd 提示 Did not find winutils.exe: java.io.FileNotFoundException: java.io.FileNotFoundException: HADOOP_HOME and hadoop.hom…

如何理解某一个开发框架的意图,从而去写和落代码文件位置不会出错

理解一个开发框架的意图并正确地组织代码和文件位置是一个重要的技能。这不仅需要对框架本身有深入的理解&#xff0c;还需要对框架背后的设计哲学和最佳实践有所了解。以下是一些帮助你达到这一目标的步骤和建议&#xff1a; 1. 学习框架的文档 详细阅读: 开始使用任何框架前…

基于Java的学生学籍管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09; 代码参考数据库参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

智慧矿山:AI算法助力!刮板机监测,生产效率和安全性提升!

工作面刮板机在煤矿等采矿场景中起着重要作用。为了提高其生产效率和安全性&#xff0c;研究人员开发了一种基于 AI 算法的刮板机监测技术。 在传统的刮板机监测中&#xff0c;通常需要人工观察和判断刮板机的状态。这种方法存在许多问题&#xff0c;如主观性、耗时和易出错等。…

MobileNetV3

相对重量级网络而言&#xff0c;轻量级网络的特点是参数少、计算量小、推理时间短。更适用于存储空间和功耗受限的场景&#xff0c;例如移动端嵌入式设备等边缘计算设备。因此轻量级网络受到了广泛的关注&#xff0c;其中MobileNet可谓是其中的佼佼者。MobileNetV3经过了V1和V2…

C++简单实现内存池原理

前言 该代码仅用于学习和理解其原理&#xff0c;当然高效内存池肯定是需要算法的。 // demo.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 //#pragma pack(1) #include <iostream> using namespace std; //简单内存池 class gril { public…

国产内存强势崛起,光威龙武挑战D5内存24×2新标杆

今年国产内存的表现非常亮眼&#xff0c;出现了很多高质量的普惠产品&#xff0c;像是最近光威推出的一款内存条龙武ddr5 242就很有竞争力&#xff0c;加上之前神策新加入的ddr5 242版本&#xff0c;都是备受瞩目的新品&#xff0c;凭实力把DIY主机的内存配置拉高到了48GB。 龙…

Python遍历删除列表元素的一个奇怪bug

假定有一个Python列表&#xff0c;比如[CFFEX.IF, CFFEX.TS,SHFE.FU]&#xff0c;现在需要将其中带‘CFFEX’前缀的所有元素都删除。在使用列表推导式一行代码搞定之前&#xff0c;用了一种最朴素的遍历删除方法&#xff0c;结果出现了意想不到的的问题。复盘了下&#xff0c;结…

【带头学C++】----- 1.基础知识 ---- 1.23 运算符概述

1.23 运算符概述 运算符&#xff0c;在数学中常见的加减乘除之类的符号&#xff0c;那么在C在编程语言中呢&#xff0c;将使用特定的符号或标记对操作数进行操作以生成结果。用算术运算符将运算对象(也称操作数)连接起来的、符合C 语法规则的式子&#xff0c;称为C 算术表达式运…

配置Sentinel 控制台

1.遇到的问题 服务网关 | RuoYi 最近调试若依的微服务版本需要用到Sentinel这个组件&#xff0c;若依内部继承了这个组件连上即用。 Sentinel是阿里巴巴开源的限流器熔断器&#xff0c;并且带有可视化操作界面。 在日常开发中&#xff0c;限流功能时常被使用&#xff0c;用…

《现代音乐人编曲手册_传统管弦乐配器和MIDI》 笔记

MIDI 已经广泛应用在音乐制作的各个领域&#xff0c;但模仿传统管弦乐队的演奏仍是公认的 MIDI制作难点。很多制作者使用了庞大的采样音源&#xff0c;但仍然制作不出像样的管弦乐作品。即便是音乐专业出身、学习过传统管弦乐配器法的专业人士&#xff0c;也经常出现“谱面没问…

UGO+DRS评复之路

前言 针对数据库整体迁移方案&#xff0c;为解决异构平台数据库迁移&#xff0c;为减轻迁移人员的工作强度以及迁移周期。华为云GaussDB迁移UGO&DRS迁移工具应运而生。 UGO介绍 数据库和应用迁移&#xff08;Database and Application Migration UGO&#xff0c;简称为UG…

2 https原理

1 HTTPS与HTTP的区别&#xff1f;

Linux友人帐之日志与备份

一、日志 1.1概述 日志文件是重要的系统信息文件&#xff0c;其中记录了许多重要的系统事件&#xff0c;包括用户的登录信息、系统的启动信息、系统的安全信息、邮件相关信息、各种服务相关信息等。日志对于安全来说也很重要&#xff0c;它记录了系统每天发生的各种事情&#…

【lesson1】数据库基础

文章目录 连接数据库服务器什么是数据库初步见识数据库 连接数据库服务器 指令&#xff1a; -h&#xff1a;指明登入部署了MySQL服务的主机 -P&#xff1a;指明我们要访问的端口号 -u&#xff1a;指明登入用户 -p&#xff1a;指明需要输入密码 什么是数据库 在Linux查看具…

高防CDN:保卫您的网站免受攻击之利与弊

在当今数字化时代&#xff0c;网络安全对于网站经营者至关重要。高防CDN&#xff08;Content Delivery Network&#xff09;技术旨在提供强大的安全性&#xff0c;以保护网站免受恶意攻击。本文将探讨高防CDN为普通网站带来的优势与不足之处&#xff0c;并分析国内外高防CDN的发…

Use nvidia card in docker

1.确保在宿主机上已经安装了nvidia 显卡的驱动 $ nvidia-smi 2.准备Nvidia-docker的环境 $ distribution$(. /etc/os-release;echo $ID$VERSION_ID) && curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/k…

基于SSM的点餐平台系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…