C++从入门到放弃--8.循环结构程序设计

目录

8.1 循环举例 

8.2 for循环

8.2.1 循环控制变量的特殊性

8.2.2 五花八门的for循环   

8.2.2.1 死循环

 8.2.2.2 没语句块

8.3 while循环

8.4 do-while循环

8.3 循环嵌套


Hello,大家好 

今天我胡某人又来偷车了我们继续走在从入门到放弃的的路上吧~

8.1 循环举例 

有时候,我们需要重复做事情,举个栗子:

重复打印n个@,没有空格,没有换行

输入n(0 < n <= 100)

输出n个@

比如,输入:

3

输出:

@@@

咋办?

凉拌

肯定不行,所以需要用循环,开始正文吧!

8.2 for循环

看:

for (<初始化控制变量语句>; <条件表达式>; <语句>) {
    语句块
}

有点蒙?别着急,慢慢来:

 

循环循环,对吧,然后我们看看上面那道题:

#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;
    for (int i = 1 /*控制变量*/; i <= n /*条件表达式*/; i++ /*语句*/) {  
        cout << '@';  //语句块
    }
    return 0;
}

 我们输入

3

 输出

@@@

i叫循环控制变量,而且!!!重点来了

8.2.1 循环控制变量的特殊性

我们来代入一下,就明白了

好比说,

你来一家舞蹈班,你在那可以穿它们的衣服,也可以穿自己买的衣服,但是出了舞蹈班,你只能穿你自己的衣服。

你来到循环,你可以用循环控制变量 ,也可以用外部变量 ,但是出了循环,你只能用外部变量。         

对吧,看:

第一种情况

int n;

cin >> n;

for (int i = 1; i <= n; i++) {
    //调用i
}

可以的

第二种情况

int n;

cin >> n;

for (int i = 1; i <= n; i++) {
    //调用n
}

也是可以的

第三种情况

int n;

cin >> n;

for (int i = 1; i <= n; i++) {
    //...
}

//调用n

还是可以的

第四种情况

int n;

cin >> n;

for (int i = 1; i <= n; i++) {
    //...
}

//调用i

 会报错           

   

8.2.2 五花八门的for循环   

8.2.2.1 死循环

for (;;) {
    //...
}

或者

for (;1;) {
    //...
}
for (;true;) {
    //...
}

 只要电脑没事,程序会一直进行下去,直到你把电脑关了或者关闭程序了。

 8.2.2.2 没语句块

for (/*...*/; /*...*/; /*...*/);

它没有语句块,只是判条件,做语句,判条件,做语句,判条件,做语句。。。不成立就停

8.3 while循环

看格式

while (<条件表达式>) {
    语句块
}

它的逻辑就是少了初始化控制变量语句和更新语句的for循环,有时我们会用到

可以用while改一下上面的程序:

#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;
    int i;
    while (i <= n /*条件表达式*/) {  
        cout << '@';  //语句块
        i++;
    }
    return 0;
}

8.4 do-while循环

跟while很一样,看格式:

do {
    语句块
} while(<条件表达式>);

但是,如果跟while一样,

我要它干什么?

(还多打个do)

所以,我们说一下,

while和for都是第一次先上来看条件,成立再做事

do-while不一样,它上来不管三七二十一先执行一遍语句块,再看条件

所以,

#include <iostream>
using namespace std;

int main() {
	int n;
	cin >> n;
	int i;
	do {
		i++;          //语句块
		cout << '@';
	} while (i <= n /*条件表达式*/);
	return 0;
}

但是,我们测试一下,就会发现

我输3,它打4个

我输120,它打121个

我们用do-while这种循环时,注意把运行的次数减1: 

#include <iostream>
using namespace std;

int main() {
	int n;
	cin >> n;
	int i;
	do {
		i++;          //语句块
		cout << '@';
	} while (i <= (n - 1) /*条件表达式*/);
	return 0;
}

这样就正常了~

8.3 循环嵌套

有时候,我们因为亿些原因,需要把循环多套几个,这时候怎么办呢?

先插个知识点:因为作用域的原因,循环控制变量不能在所有循环全叫i,所以根据约定俗成,第一层i,第二层j,第三层k,以此类推

我们看这个:

百钱买百鸡

题目描述

百钱买百鸡问题。鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?

输入

输出

输出各种鸡翁、鸡母、鸡雏的数量,依次由小到大,每种情况各占一行,每行三个数之间用一个空格隔开。

样例输入

样例输出

我们一看,吖!还是文言文啊,翻译成现代文如下:

 一百M买一百鸡问题。公鸡一只值五块钱,母鸡一只值三块钱,小鸡三只值一块钱,一百M买一百只鸡,问公鸡、母鸡、小鸡各几只?

首先!!!我们分析一下

 于是我们在最里层小鸡的循环里套一个if,有两个条件要同时满足

  • i + j + k == 100
  • 5 * i + 3 * j + k / 3 == 100

分析完成后,就阔以敲:

#include <iostream>
using namespace std;
 
int main() {
    for (int i = 0; i <= 20; i++) {
        for (int j = 0; j <= 33; j++) {
            for (int k = 0; k <= 99; k += 3) {
                if (i + j + k == 100 && 5 * i + 3 * j + k / 3 == 100)  {
                    cout << i << ' ' << j << ' ' << k << endl;
                }
 
            }
        }
    }
 
    return 0;
}

输出如下:

0 25 75
4 18 78
8 11 81
12 4 84

自己算一下,是不是这样的~

循环学完了,简单吗?

不懂就问

拜~

允许转载,请注明出处

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值