C++基础语法3

· · 个人记录

人无时不刻地生活在大大小小的循环中,自觉或不自觉地重复着各种周而复始的工作, 对编程人来说,可以大大减少这些烦恼,因为我们可以把很多需要循环重复的工作交给电脑去做。要设计出能让电脑周而复始地工作的程序,我们就要学习使用循环语句。

一、for循环语句

(一)基本格式

for(循环控制变量初始化;条件表达式;增量表达式)
{
    循环体语句块;
}

注意:

(1)循环控制变量——控制重复次数的变量,一般用i、j、k等变量来表示。

(2)循环控制变量初始化,表示该变量从多少开始。

(3)条件表达式,表示整个for循环语句满足当前条件继续,不满足时结束。

(4)增量表达式,表示循环控制变量每次增加或减少的幅度,使得循环控制变量不断靠近条件结束的终点。

(5)for语句适用于循环次数明显或者循环的起点及终点明显的问题。

(6)for()语句末尾不要写分号

(7)语句块指一个或多个语句,若为一个语句,可不用大括号

(二)for语句应用实例

1.单纯控制重复次数——输出n个'*’

int n;
cin>>n;
for(int i=1;i<=n;i++){
    cout<<"*";
}

上述程序的含义:

循环控制变量i从1到n逐个增加,每次输出一个*,这样程序运行的结果就是在屏幕上显示n个*

(1)i为循环控制变量,起到控制循环次数的作用,语句i=1,是给循环控制变量赋初始值,作为循环的起点;

(2)语句i<=n为循环的条件语句,表示当i<=n时执行循环,当i>n时结束循环;

(3)语句i++代表循环控制变量在每次循环后增加1。

2.输出1~n

int n;
cin>>n;
for(int i=1;i<=n;i++){
    cout<<i;
}
在上述程序中,循环控制变量i从1逐个增加,其变化规律为1、2、3、4、......、n,恰好与想要输出的内容一致,因此循环每执行一次,则输出i。

在此例中,循环控制变量i发挥的作用有两个:第一是控制循环次数,第二是作为输出内容。

3.输出n以内的奇数

int n;
cin>>n;
for(int i=1;i<=n;i+=2){
    cout<<i;
}

在此例中,语句i+=2表示循环控制变量每次增加2,则其变化规律为1、3、5、......,恰好是按照奇数的规律在发生变化。

4.输出n以内的奇数和

int n,s=0;
cin>>n;
for(int i=1;i<=n;i+=2){
    s=s+i;
}
cout<<s;
在上述程序中,循环控制变量i从1逐个增加,其变化规律为1、3、5、......,恰好是按照奇数的规律发生变化的。将循环控制变量i的值累加并存储到变量s中,变量s是累加器,其初始值为0(注意:变量s一定要有初始值)。

当n=5时,变量i和s的变化规律如下表所示

循环次数 第一次 第二次 第三次 第四次 第五次
i 1 3 5 7 9
s 1 4 9 16 25

思考:如果输出n以内的奇数积,变量s的初始值为多少?为什么?

二、while语句

(一)基本格式

while(条件表达式)
{
    循环体语句块;
}
含义:表示当满足条件时,重复执行语句,反之结束。适用于循环次数不明显,只知道重复的条件或者结束的条件。

注意:

(1)为了能使用 while 循环正常终止,循环体中一定要有能使用循环条件变量改变的语句,即有可能使循环条件为假,否则循环永不结束,陷入“死循环”。

(2)while(条件表达式)后不需要写分号。

(3)有些情况while语句和for语句可以互换着使用。

(二)while语句应用实例

1.输出n以内的数字和

int n,i=0,s=0;
cin>>n;
while(i<=n){
    s=s+i;
    i++;
}
cout<<s;

本例实际上更适合用for语句实现,因为是明确次数的循环,在此使用while循环是为了对比for语句和while语句。

2.求能使s=1+2+3+......+n<m的最大n是多少

int m,s=0,n=0;
cin>>m;
while(s<m){
    n++;
    s=s+n;  
}
cout<<n-1;

在上述程序中,当s<m时不断执行循环,进行累加运算,当s>=m(即不再满足s<m的条件)时结束循环。

思考:为什么输出n-1,而不是输出n呢?

三、终止循环语句

(一)break语句

含义:提前结束循环

实例:判断n是否是质数

int n,i;
cin>>n;
for(i=2;i<n;i++)
{
    if(n%i==0) break;
}
if(i<n) cout<<"n是质数"<<endl;
else cout<<" n不是质数"<<endl;
如果n能够整除i,则i是n的因子,表示n不是质数,马上跳出当前循环,结束判断;

若没有跳出循环,则接着判断下一个可能是n的因子的数,直到把所有可能的因子判断完毕。

(二)continue语句

含义:跳过continue之后的语句,提前结束本次循环

实例:求n以内的奇数和

int n,i;
cin>>n;
for(i=1;i<=n;i++){
    if(i%2==0) continue; 
    sum=sum+i;
}

四、习题

http://123.207.45.119/contest.php?cid=1020