蓝桥杯之c++入门(四)【循环】


前言

本章会详细介绍每种语句和操作符的语法和使用方法,还会通过大量实例和练习题,帮助读者理解如何在实际编程中灵活运用这些工具。无论你是初学者,还是希望在算法竞赛中提升逻辑控制能力的进阶学习者,本章内容都将为你提供宝贵的指导。让我们一起开启这段探索条件判断与循环控制的编程之旅,为你的程序增添更多智能和效率;


6. while循环

C + + \mathsf{C}\substack{++} C++ 中有3种循环语句, while 就是其中一种,接下来就介绍一下 while 语句。

6.1 while语法形式

while 语句的语法结构和 if 语句非常相似,但不同的是 while 是用来实现循环的, if 是无法实现循环的。

下面是 while 循环的语法形式:

//形式1
while ( 表达式 )
 语句;
if(表达式)
 语句;

//形式2
//如果循环体想包含更多的语句,需要加上⼤括号 
while ( 表达式 )
{
   
   
 语句1;
 语句2;
 ...
}

6.2 执行流程

首先上来就是执行判断表达式,表达式的值为 0 ,循环直接结束;表达式的值不为 0 ,则执行循环语句,语句执行完后再继续判断,是否进行下一次判断。

6.3 实践

题目:使用 while 循环在屏幕上打印 1 ∼ 10 \mathtt{1}{\sim}10 110 的值

参考代码:

#include <iostream>
using namespace std;
int main()
{
   
   
 	int i = 1;
 	while (i <= 10)
 	{
   
   
 		cout << i << " ";
 		i = i+1;
 	}
 	return 0;
}

在这里插入图片描述

6.4 练习

练习1:反向输出每一位

输入一个正的整数,逆序打印这个整数的每一位
例如:
输入:1234,输出:4 3 2 1​
输入:521,输出:1 2 5

小提示:

  1. 要想得到 n 的最低位,可以使用 n % 10 的运算,得到的余数就是最低位,如:1234 % 10 得到4

  2. 要想去掉n的最低位,找出倒数第二位,则使用 n = n / 10 \texttt{n}=\texttt{n}/\texttt{10} n=n/10 操作就可以去掉最低位的,如: n = 1234 / 1 ⊙ \scriptstyle\mathsf{n}=1234/1\odot n=1234/1 得到 123 ,123相较于1234就去掉了最低位, 123%10 就得到倒数第二位 3 。

  3. 循环1和2两个步骤,在 n 变成 0 之前,就能到所有的位。

参考代码:

#include <iostream>
using namespace std;
int main()
{
   
   
 	int n = 0;
 	cin >> n;
 	while (n)
 	{
   
   
 		cout << n % 10;
 		n /= 10;
 	}
 	return 0;
}
练习2:数位之和

在这里插入图片描述

#include <iostream>
using namespace std;
int main() 
{
   
   
    int n;
    cin >> n;
    int ret = 0;
    while (n) 
    {
   
   
        ret += n % 10;
        n /= 10;
    }
    cout << ret << endl;
    return 0;
}

小提示:前面两个题目是相似的,当我们学会做一个题目的时候,要有举一反三的能力,要能将知识和思维迁移。

练习3:求和1

在这里插入图片描述

#include <iostream>
using namespace std;

int main() {
   
   
    int n = 0;
    cin >> n;
    long long count = 0;
    while(n)
    {
   
   
        count += n;
        n--;
    }
    cout << count << endl;
    return 0;
}

小提示:

注意数据范围,合理设置变量数据类型, 1 ⩽ n ⩽ 1 0 ∧ 9 1\leqslant{\mathsf{n}}\leqslant10^{\wedge}9 1n109 ,那么求和的结果在int类型的变量中是无法保存的。

练习4:含 k 个 3 的数

在这里插入图片描述

#include <iostream>
using namespace std;
int main()
{
   
   
    long long m = 0;
    int k = 0;
    int count = 0;
    cin >> m >> k;
    while(m)
    {
   
   
        if(m % 10 == 3)
        {
   
   
            count++;
        }
        m /= 10;
    }
    if(count == k)
    {
   
   
        cout << "YES" << endl;
    }
    else
    {
   
   
        cout << "NO" << endl;
    }
    return 0;
}

小提示:

还是数据范围的问题,使用long long 类型是合适的。

练习5:角谷猜想

在这里插入图片描述

#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
   
   
    
    long long n = 0;
    cin >> n;
    while(n != 1)
    {
   
   
        if( n % 2 == 1)
        {
   
   
            printf("%lld*3+1=%lld\n", n ,n*3 + 1);
            n = n*3 + 1;
        }
        else
        {
   
   
            printf("%lld/2=%lld\n", n, n/2);
            n /= 2;
        }
    }
    cout << "End" << endl;
    return 0;
}
练习6:计算多项式的值

在这里插入图片描述

#include <cmath>
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
   
   
	float x;
	int n;
	double sum = 1;
	cin >> x >> n;
	
	while(n)
	{
   
   
		sum += pow(x,n);
		n--;
	}
	printf("%.2lf", sum);
	return 0;
}

7. for循环

7.1 for循环语法形式

for 循环是三种循环中使用最多的, for 循环的语法形式如下:

//形式1
for(表达式1; 表达式2; 表达式3)
 语句;

 //形式2
//如果循环体想包含更多的语句,可以加上
⼤括号
for(表达式1; 表达式2; 表达式3)
{
   
   
 语句1;
 语句2;
 ...
}

表达式1 用于循环变量的初始化;
表达式2 用于循环结束条件的判断;
表达式3 用于循环变量的调整 .

7.2 执行流程

for循环的执行流程

首先执行 表达式1 初始化循环变量,接下来就是执行 表达式2 的判断部分, 表达式2 的结果如果!=0,则循环结束; 表达式2 的结果如果! =0 则执行循环语句,循环语句执行完后,再去执行表达式3 ,调整循环变量,然后再去 表达式2 的地方执行判断, 表达式2 的结果是否为0,决定循环是否继续。

整个循环的过程中, 表达式1 初始化部分只被执行1次,剩下的就是 表达式2 、循环语句、 表达式3在循环。

7.3 实践

练习:使用 for 循环在屏幕上打印1~10的值

参考代码:

//代码1
#include <iostream>
using namespace std;
int main()
{
   
   
 	int i = 0;
 	for(i = 1; i <= 10; i++)
 	{
   
   
 		cout << i << " ";
 	}
 	return 0;
}


//代码2
#include <iostream>
using namespace std;
int main()
{
   
   
	for(int i = 1; i <= 10; i++)
 	{
   
   
 		cout << i << " ";
 	
### 蓝桥杯 C++ 基础入门练习题解析 #### 题目背景 蓝桥杯竞赛是一个面向全国大学生的编程比赛,其中C++作为主要参赛语言之一,吸引了大量选手参与。对于初学者来说,掌握一些基础题目及其解析是非常重要的。 --- #### 练习题分析与解答 ##### **练习1:打印星号三角形** 代码如下所示: ```cpp #include <iostream> using namespace std; int main() { int n = 0; cin >> n; for (int i = 1; i <= n; i++) { for (int j = 1; j <= i; j++) cout << "*"; cout << endl; } return 0; } ``` 上述代码的功能是从标准输入读取一个整数`n`,并按照指定格式输出由星号组成的直角三角形[^2]。 - 外层循环控制行数。 - 内层循环负责每行打印相应数量的星号。 - 输出完成后换行。 --- ##### **练习2:计算圆周率π** 以下是基于公式 `PI = atan(1.0) * 4` 的实现方法: ```cpp #include <iostream> #include <cmath> // 引入数学库以使用 atan 函数 using namespace std; int main() { double PI = atan(1.0) * 4; // 使用反正切函数求 π cout << "The value of PI is: " << PI << endl; return 0; } ``` 此程序通过调用`atan()`函数来精确计算圆周率π的值[^4]。这种方法不仅简单易懂,而且便于后续扩展到其他涉及π的应用场景中。 --- ##### **练习3:绘制矩形图案** 为了完成绘制矩形的任务,可以采用类似的嵌套循环结构。假设我们需要绘制一个宽为`m`、高为`n`的矩形,则代码可设计如下: ```cpp #include <iostream> using namespace std; int main() { int m, n; // 定义宽度和高度变量 cin >> m >> n; // 输入矩形尺寸 for (int i = 1; i <= n; i++) { // 控制行数 for (int j = 1; j <= m; j++) // 控制列数 cout << "*"; // 打印单个字符 '*' cout << endl; // 每行结束后换行 } return 0; } ``` 该算法的核心在于利用双重循环分别处理每一行中的每一个位置上的填充符[^3]。 --- ##### **练习4:判断素数** 下面提供了一个简单的素数判定程序示例: ```cpp #include <iostream> using namespace std; bool isPrime(int num) { if (num <= 1) return false; for (int i = 2; i * i <= num; i++) { if (num % i == 0) return false; } return true; } int main() { int number; cin >> number; if (isPrime(number)) cout << number << " 是素数" << endl; else cout << number << " 不是素数" << endl; return 0; } ``` 这段代码定义了一个辅助函数`isPrime()`用于检测某个正整数是否为质数,并在主函数中测试其功能[^1]。 --- #### 总结 以上列举了几类典型的蓝桥杯C++基础入门级试题以及对应的解决方案。这些例子涵盖了基本语法知识点如条件语句、循环结构等,同时也包含了部分实用技巧比如如何高效地验证素数或者自动生成图形模式等内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

比特在路上

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

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

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

打赏作者

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

抵扣说明:

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

余额充值