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

跟着小潘学后端

一、导入

史蒂芬·斯特兰奇是漫威世界中最强大的魔法师之一,原本是一位优秀的神经外科医生,凭借高超的医术被外界誉为上帝对手术界的恩赐,但好景不长,在一场意外的车祸断送了他的从医生涯,赖以生存的双手粉碎性骨折,再也无法拿起手术刀。他走遍世界,只为了治好双手,最终,他在喜马拉雅山遇见了古一,被古一收为弟子,他开始学习神秘的咒术与魔法,成为一代至尊魔法师—奇异博士。

那么在奇异博士的诸多魔法中,你最想学习哪种呢?

路人:那还用问吗?当然是传送门啊,这样早上就可以多睡几分钟再起床了o( ̄▽ ̄)ブ

吃瓜群众:Σ(っ °Д °;)っ

路人:而且传送门还可以困住敌人😁

吃瓜群众:(⊙o⊙)?

路人:一个传送门放在他的脚下,另外一个传送门放在他的头上。大致是这样的:


吃瓜群众:他落下来不还是可以捅你吗?🙄

路人:那如果我会循环魔法呢?🤪

吃瓜群众:循环?什么是循环?😲

路人:循环就是可以让任何东西重复地做同一件事情。比如你早上要很早的起床然后去上学,然后疲惫的回到家里还要做该死的作业,好不容易做完又得洗漱睡觉。第二天很早的起床去上学 …

吃瓜群众:求求你,别说了。

路人:怎么样循环魔法厉害吧😋

吃瓜群众:听你这么一说,好像是挺厉害(~ ̄▽ ̄)~,我要学循环魔法!!!!

路人:

二、while循环

while循环是一种常用的循环结构,它会重复执行一段代码,直到指定的条件不再满足为止。它的语法格式如下:

while (condition) {
    // 循环体语句
}

其中,condition是循环条件,当condition为真时,执行循环体语句,执行完循环体语句后再次判断condition是否为真,如果为真则继续执行循环体语句,否则跳出循环。

路人:上面就是循环魔法的咒语。

吃瓜群众:



路人:我就以上面的坏人举例,看我施展魔法。

while (它是坏人!) {
    // 循环体语句
    加载传送门。
}

吃瓜群众:他不能停下来吗?

路人:可以,等我蓝条用完(计算机死机)。

吃瓜群众:

路人:咳咳~~,这样肯定是不行。while循环会重复执行一段代码,直到指定的条件不再满足为止。所以我们在每一次循环体运行以后要对条件进行更新。

while (它是坏人!) {
    // 循环体语句
    加载传送门。
    //条件更新
    你是好人吗?
}

路人:如果他是好人,那么就不满足循环的条件,魔法(程序)就会终止。

路人:怎么样?你学会了吗?

吃瓜群众:

路人:ok,你出师了。

三、例题讲解

问题一:1004 - 编程求123*…*n

编程求 1×2×3×⋯×n 。

1.分析问题

  1. 已知:整数 n
  2. 未知:整数 n 的阶乘p
  3. 关系:p=n!=1×2×3×…×(n-1)×n

2.定义变量

根据分析的已知,未知按需要定义变量。
i 作为条件循环的变量。

	//二、数据定义
	int n,i=1,p=1;

3.输入数据

从键盘读入整数 n。

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

4.数据计算

第一次学习循环结构可以看看循坏体是如何运行的。

	while(i<=n){ //i=1 n=5
		 //循环体
		cout<<i<<endl;
		//条件更新 
		++i;
	}

初始值i=1,假如n=5。那么i<=n条件成立,程序进入循环体内部。执行输出i语句后,程序向下执行++i;对条件变量进行更新。

	while(i<=n){ //i=1 n=5
		 //循环体
		cout<<i<<endl;//输出1
		//条件更新 
		++i; //i=2
	}

此时i = 2,n=5;依旧满足i<=n。条件成立,程序再次进入循环体内部。

	while(i<=n){ //i=2 n=5
		 //循环体
		cout<<i<<endl;//输出2
		//条件更新 
		++i; //i=3
	}

此时i = 3,n=5;依旧满足i<=n。条件成立,程序再次进入循环体内部。

	while(i<=n){ //i=3 n=5
		 //循环体
		cout<<i<<endl;//输出3
		//条件更新 
		++i; //i=4
	}

直到…i = 6,n=5;不满足i<=n的条件,循环终止,程序跳过循环部分向下执行。

本题根据阶乘的数学模型设计代码:p=p*i;

	//四、数据计算 
	while(i<=n){ 
		 
		p*=i;
		//条件更新 
		++i;
	}

5.输出结果

#include<iostream>
using namespace std;
int main(){
	//一、分析问题
	//已知:整数 n
	//未知:整数 n 的阶乘p 
	//关系:p=n!=1×2×3×...×(n-1)×n
	//二、数据定义
	int n,i=1,p=1;
	//三、数据输入 
	cin>>n;
	//四、数据计算 
	while(i<=n){ 
		 
		p*=i;
		//条件更新 
		++i;
	}
	//五、输出结果 
	cout<<p;
	
	return 0;	
}

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

编程求出所有不超过1000 的数中,含有数字 3 的自然数,并统计总数。

1.分析问题

  1. 已知:不超过 1000 的数
  2. 未知:含有数字3的自然数的总数count
  3. 关系:个位 ==3?十位 ==3?百位 ==3?

2.定义变量

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

	//二、数据定义 
	int i=1,count=0;

3.输入数据

本题不需要输入。

4.数据计算

拆位求解属于基本操作,在 C++程序结构入门之顺序结构二 中介绍过,忘记的可以自行回去复习一下。

这里要使用 “或” ,因为满足其中任意一个条件就可以了,即个位、十位、百位有数字3。

//四、数据计算 
	while(i<1000){
		if(i%10==3||i/10%10==3||i/100==3){
			++count;
		}
		//条件更新
		++i;
	}

5.输出结果

#include<iostream>
#include<iomanip>
using namespace std;
int main(){
	//一、分析问题
	//已知:不超过 1000 的数
	//未知:含有数字3的自然数的总数count
	//关系:个位 ==3?十位 ==3?百位 ==3? 
	//二、数据定义 
	int i=1,count=0;
	//三、数据输入 
	//四、数据计算 
	while(i<1000){
		if(i%10==3||i/10%10==3||i/100==3){
			++count;
		}
		//条件更新
		++i;
	}
	//五、输出结果 
	cout<<count;	
	return 0;	
}

问题三:1059 - 求数

输出 1∼999 中有因数 3 ,且至少有一位数字是 5 的数。

1.分析问题

  1. 已知:1-999的数
  2. 未知:有因数3,且至少有一位数字是5的数
  3. 关系:数%3==0;个位 ==5?十位 ==5?百位 ==5?

2.定义变量

根据分析的已知,未知按需要定义变量。
为什么将i赋值为3呢?其实是为了好找有因数3的数。如果i每次都加上3,那么必定满足有因数3的条件,还可以少进行一次if判断。

	//二、数据定义 
	int i=3;	

3.输入数据

本题不需要输入。

4.数据计算

如上所述,i的累加从1变成3。拆位和上问题二一样的操作。

	//四、数据计算 
	while(i<1000){
		if(i%10==5||i/10%10==5||i/100==5){
		
		}
		//条件更新 
		i+=3;
	}

5.输出结果

#include<iostream>
#include<iomanip>
using namespace std;
int main(){
	//一、分析问题
	//已知:1-999的数 
	//未知:有因数3,且至少有一位数字是5的数
	//关系:数%3==0;个位 ==5?十位 ==5?百位 ==5?
	//二、数据定义 
	int i=3;
	//三、数据输入 
	//四、数据计算 
	while(i<1000){
		if(i%10==5||i/10%10==5||i/100==5){
			//五、输出结果 
			cout<<i<<endl;
		}
		//条件更新 
		i+=3;
	}
		
	return 0;	
}

问题四:1055 - 求满足条件的整数个数

在1∼n 中,找出能同时满足用 3 除余 2 ,用 5 除余 3 ,用 7 除余 2 的所有整数的个数,如果没有请输出 0 。

1.分析问题

  1. 已知:1-n的整数
  2. 未知:能同时满足用3除余2,用5除余3,用7除余2的所有整数的个数sum
  3. 关系:%3== 2,%5== 3,%7== 2

2.定义变量

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

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

3.输入数据

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

4.数据计算

注意是同时满足,所以要使用逻辑与(&&)。

//四、数据计算
	while(i<=n){
		if(i%3==2&&i%5==3&&i%7==2){
			++sum;
		}
		//条件更新 
		++i;
	} 

5.输出结果

#include<iostream>
using namespace std;
int main(){
	//一、分析问题
	//已知:1-n的整数 
	//未知:能同时满足用3除余2,用5除余3,用7除余2的所有整数的个数sum 
	//关系:%3==2,%5==3,%7==2
	//二、数据定义
	int i=1,n,sum=0;
	//三、数据输入 
	cin>>n;
	//四、数据计算
	while(i<=n){
		if(i%3==2&&i%5==3&&i%7==2){
			++sum;
		}
		//条件更新 
		++i;
	} 
	//五、输出结果 
	cout<<sum;	
	return 0;	
}

四、练习

问题: 1014 - 编程求1+1/2+1/3+…+1/n

问题: 1058 - 求出100至999范围内的所有水仙花数。

问题: 1054 - 编程求1平方+2平方+…+n平方

问题: 1003 - 编程求1+3+5+…+n

问题: 1002 - 编程求解1+2+3+…+n

问题: 1053 - 求100+97+……+4+1的值。

问题: 1004 - 编程求123*…*n

问题: 1021 - 求数II

问题: 1085 - 寻找雷劈数

五、总结

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

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


阅读量:513

点赞量:0

收藏量:0