本文主要向大家介绍了 C/C++知识点之C++循环结构,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。
编程求解下列式子的值:S=1+2+3+...+n
首先有一种方法,用等差数列求和,这是小学三年级的奥数题,用的是最基础的结构,如果有不懂,可以看我的上两篇博客《语言C++之基础知识(拓展) 》《语言C++之简单C++语言介绍 》
让我们先来梳理一下题意:求从一到n所有数的和。大家可能会发现,所需加的数会每次加1,而且执行的操作都是加法。所以我们可以用到循环结构。
以下是循环结构的模板:
1.for语句
for(类型名 变量名=刚开始需要的值;循环执行的条件;递增步骤){//类型名可不加,在上面定义就行,花括号道理同if语句,一下须执行的语句有多句就要花括号,一句就不需要
每个循环都执行的内容;//不管循环到哪里,都执行同样操作
}
循环结构比较难理解,所以我来解释一下:
举个例子:for(long long i=0;i<2;i++){
cout<<i<<"5201314"<<endl;
cout<<233<<endl;
}
显示一下步骤:1.起始条件是i=0;输出0和5201314并回车,再输出233和回车,然后i加1;
2.i=1;输出1和5201314并回车,再输出233和回车,然后i加1;
3.i=2;运行条件是i要小于2,所以不符合条件,停止
需要注意的是,变量名不一定是i,递增步骤也不限,只要不陷入死循环就好;执行的步骤不管循环到了哪里都是一样的,而且变量不一定要用在步骤里(如果这样,for(long long i=1;i<=2;i++)是相同的,循环次数相同。
还有另外一种使用方法,使两个变量同时变换,例如:
for(long long i=0,j=1;i<99&&j<99;i+=2,j+=3)
那么,做题可以用这样的步骤:
1.基本结构;
2.循环计算;
代码如下:
#include <iostream>
using namespace std;
int main(){ //基础结构
int n, s=0; //定义
cin>>n; //输入
for (int i=1; i<=n;++i) //循环 ,枚举出所有的i,即相加的所有数
s+=i; // 可表示为s=s+i,为多个,可累计增加 ,切记s需赋值0
cout<<s; //加好,数求出,即可输出
return 0;//返回值为0,可加可不加
}
还有另外一种while语句的循环结构,模板如下:
2.while语句
while(运行需要达到的条件){//花括号的与for语句同理
需要执行的操作;
}
3.do-while语句
do{//花括号的与for语句同理
需要执行的操作;
}while(运行需要达到的条件)
PS:与while完全一样。
代码如下:
#include<iostream>
using namespace std;
int main(){
long long a,b=0;
cin>>a;//基础结构,不讲
while(a!=0){//当a!=0时候执行以下操作
b+=a;//b加上数
a--;//最重要,如果没有这一步,那么a一直大于0,会陷入死循环;而且b加的会一直都是a的初始值
}
cout<<b<<endl;
return 0;
}
只是一种最简单的循环结构,那么就让我来介绍一种更为复杂但更为方便的循环结构——循环嵌套,先来看一道例题:
求S=1!+2!+3!+.........+10!
PS:3!=3*2*1;意为3的阶乘
具体步骤为:
1.基本结构
2.循环嵌套,即为双重循环,先循环10个数,再按每个数求这个数的阶乘,加起来
#include <iostream>
using namespace std;
int main (){
int t,s;
s=0;
for(int i=1;i<=10;++i)
{
t=1;
for (int j=1;j<=i;++j) //求i!
t*=j;
s+=t; //累加i!
}
cout<<s;
return 0;
}
具体执行步骤与单重for循环相同,只不过再加了一个for循环,不过双重循环效率很慢,所以尽量用单重,或者优化
其实这道题就有一种优化方法
#include <iostream>
using namespace std;
int main ()
{
int t=1,s=0;
for(int i=1;i<=10;++i)
{
t*=i; //t为上一个数的i-1的阶乘值,再乘以i即为i!
s+=t; //累加i!
}
cout<<s;
return 0;
}
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!