【C++】C++程序结构入门之循环结构二-灵析社区

跟着小潘学后端

一、导入

路人:怎么样?上次教你的while魔法学会了没有。

吃瓜群众:练习了几个题,都能做出来。师父!师父!我听说循环魔法好像不只一种呢,是不是啊😍

路人:确实是还有两种。分别是:for循环和do-while循环。这样吧,我再教你一个for循环。

吃瓜群众:

二、for循环

路人:我要先考考你,还记得while的咒语(语法)吗?

吃瓜群众:是这样的。

初始化表达式
while (循环条件) {
    // 循环体语句
    更新表达式
}

路人:下面是for的咒语(语法),你能看出什么不同吗?

C++中的for循环是一种常用的循环结构,它可以重复执行一段代码,直到满足某个条件为止。for循环的语法如下:

for (初始化表达式; 循环条件; 更新表达式) {
    // 循环体语句
}

其中,初始化表达式只会在循环开始时执行一次,循环条件会在每次循环开始前被判断,如果为真则执行循环体语句,否则跳出循环,更新表达式会在每次循环结束后执行。

吃瓜群众:好像两个人。

路人:没错,for循环和while循环的语法结构是很像的,并且执行的顺序也是一致的,只是放的位置不太一样。而且for循环也可以把初始化表达式和更新表达式放到和while循环一样的位置,只是一定 一定 一定要写 “;”这个是固定不变的。

三、例题讲解

问题一:1264 - 4位反序数

设 N 是一个四位数,它的 9 倍恰好是其反序数,求 N 。
反序数就是将整数的数字倒过来形成的整数。例如:1234 的反序数是 4321 。

1.分析问题

  1. 已知:N的9倍恰好是其反序数temp
  2. 未知:N
  3. 关系:N*9=temp

2.定义变量

根据分析的已知,未知按需要定义变量。

	//二、数据定义 
	int i=1000,temp;

3.输入数据

无输入。

4.数据计算

可以看到,我们在定义变量的时候就已经初始化了for循环语法中的初始化表达式,所以初始化表达式的位置是可以直接空着的。

	//四、数据计算 
	for(;i<10000;i++){
		temp=i%10*1000+i/10%10*100+i/100%10*10+i/1000;
		if(i*9==temp){
	
		}
	}

5.输出结果

#include<iostream>
using namespace std;
int main(){
	//一、分析问题
	//已知:N的9倍恰好是其反序数temp
	//未知:N
	//关系:N*9=temp
	//二、数据定义 
	int i=1000,temp;
	//三、数据输入 
	//四、数据计算 

	for(;i<10000;i++){
		temp=i%10*1000+i/10%10*100+i/100%10*10+i/1000;
		if(i*9==temp){
			//五、输出结果 
			cout<<i<<endl;
		}
	}
	return 0;	
}

问题二:1085 - 寻找雷劈数

把整数 3025 从中剪开分为 30 和 25 两个数,此时再将这两数之和平方,计算结果又等于原数。
(30+25)×(30+25)=55×55=3025 ,这样的数叫“雷劈数”。
求所有符合这样条件的四位数。(ab+cd)×(ab+cd)=abcd

1.分析问题

  1. 已知:四位数
  2. 未知:所有符合雷劈数的四位数
  3. 关系:(ab+cd)×(ab+cd)=abcd

2.定义变量

根据分析的已知,未知按需要定义变量。

	//二、数据定义 
	int ab,cd;

3.输入数据

无输入。

4.数据计算

//四、数据计算 
	for(int i=1000;i<10000;i++){
		ab=i/100;
		cd=i%100;
		if(i==(ab+cd)*(ab+cd)){

		}
	}

5.输出结果

#include<iostream>
using namespace std;
int main(){
	//一、分析问题
	//已知:四位数
	//未知:所有符合雷劈数的四位数
	//关系:(ab+cd)×(ab+cd)=abcd
	//二、数据定义 
	int ab,cd;
	//三、数据输入 
	//四、数据计算 
	for(int i=1000;i<10000;i++){
		ab=i/100;
		cd=i%100;
		if(i==(ab+cd)*(ab+cd)){
			//五、输出结果
			cout<<i<<endl;
		}
	}
	
	return 0;	
}

问题三:1057 - 能被5整除且至少有一位数字是5的所有整数的个数

1.分析问题

  1. 已知:1-N的整数
  2. 未知:能被5整除且至少有一位数字是5的所有整数的个数sum
  3. 关系:%5==0 个位=5,十位=5,百位=5,千位=5

2.定义变量

根据分析的已知,未知按需要定义变量。

	//二、数据定义 
	int n,sum=0;

3.输入数据

从键盘读入整数n。

	//三、数据输入
	cin>>n;

4.数据计算

可以参照 问题二:1056 - 所有不超过1000的数中含有数字3的自然数。

	//四、数据计算 
	for(int i=5;i<=n;i+=5){
		if(i%10==5||i/10%10==5||i/100%10==5||i/1000%10==5){
			sum++;
		}
	}

5.输出结果

#include<iostream>
using namespace std;
int main(){
	//一、分析问题
	//已知:1-N的整数 
	//未知:能被5整除且至少有一位数字是5的所有整数的个数sum 
	//关系:%5==0 个位=5,十位=5,百位=5,千位=5 
	//二、数据定义 
	int n,sum=0;
	//三、数据输入
	cin>>n;
	//四、数据计算 
	for(int i=5;i<=n;i+=5){
		if(i%10==5||i/10%10==5||i/100%10==5||i/1000%10==5){
			sum++;
		}
	}
	//五、输出结果 
	cout<<sum;	
	return 0;	
}

四、练习

  1. 将C++程序结构入门之循环结构一中的例题和练习用for循环完成。
  2. 将本文中的例题用while循环完成。

五、总结

以上就是关于循环结构中for语句的学习内容,难度不高,多多练习即可掌握。

喜欢的朋友可以关注本专栏C++从零基础入门到NOI竞赛,一起学习一起进步。


阅读量:511

点赞量:0

收藏量:0