陌生人要天天开心!
文章目录
前言
本文中记录的大概内容:
本文主要记录的是循环的三种语句while,for,do while的使用方法,还有由它们展开的特殊用法,内容涵盖C语言和C++,大部分内容可通用。
新手小白,如有错误,请见谅。
以下是本篇文章正文内容,下面代码案例可供参考
正文
一、循环的三种语句
1、while
while(循环测试条件){
代码块
}
循环测试条件即为运行到此行语句时是否进入循环和循环是否继续的条件
2、for
for(初始语句;测试条件;更新语句){
代码块
}
程序运行顺序:
1、首先执行初始语句,而后程序跳转到测试条件,即2;
2、执行测试条件,
若测试条件语句结果不为零,则进入代码块执行代码块代码,执行完毕后程序跳转到更新语句,即3,语句结果为零,退出循环语句;
3、执行更新语句,执行完毕后,程序跳转到测试条件,即2;
ps:当执行条件语句的时候,语句本身是有数值的,例如赋值语句,赋值语句本身的数据就是等号右侧的数据大小。
对于条件语句,符合条件则是非零,不符合条件则是零,if和循环进入的条件都是非零。
例如:
1、x>2;
2、x>y;
3、y>x;
#include <stdio.h>//学习C++的同学可以把下列语句去掉注释后替换该语句
//#include <iostream>
//using namespace std;
int main() {
int x, y, z;
x = 1;
y = 2;
printf("x=%d\ny=%d\n\n", x, y);
z = x > 2;
printf("执行z=x>2后z=%d\n\n", z);
z = y > 1;
printf("执行z=y>1后z=%d\n\n", z);
z = x > y;
printf("执行z=x>y后z=%d\n\n", z);
z = y > x;
printf("执行z=y>x后z=%d\n\n", z);
return 0;
}
3、do while
do{
代码块
}while(循环测试条件);
//do while的分号是需要注意的地方
程序执行到该语句的时候会直接进入do后面的代码块,不像之前的两种循环需要验证测试条件才会进入循环的代码块中。
当执行完代码块中的代码后,程序会验证循环测试条件中语句的结果。
零跳出循环;非零则再次执行do后面的代码块内容,执行完代码块内代码的时候会继续验证测试条件,零则跳出循环,非零则……
二、循环使用样例
ps:学习C++的同学将4、5、6以外的样例中的scanf和printf替换为cin和cout即可使用
C中的scanf是函数,所以设计时考虑的是其返回值,scanf的返回值是输入变量的个数。
cin这种输入则不一样,cin是对象,其后的>>才是函数,提取运算符>>返回值是istream类的引用。
对于这里两者的程序设计上是存在差异的;
二者的差异详情请看样例4、5、6
1、while(flag)
使用变量flag充当是否继续进行循环的条件
#include <stdio.h>//学习C++的同学可以把下列语句去掉注释后替换该语句
//#include <iostream>
//using namespace std;
int main() {
int flag = 1;
while (flag) {
scanf("%d", &flag);
printf("%d\n", flag);
}//循环内可以重新更改flag的数值从而跳出循环
return 0;
}
这只是关于这种用法的其中一种技巧,类似的东西还有挺多的,看你自己怎么设计了~
2、while(1)
#include <stdio.h>//学习C++的同学可以把下列语句去掉注释后替换该语句
//#include <iostream>
//using namespace std;
int main() {
while (1) {
int flag;
scanf("%d", &flag);
printf("%d\n", flag);
if (flag == 0)
break;//if内的条件语句也可以更改为其他语句
}
return 0;
}
使用if来进行是否跳出循环的判断,while括号中的数据只要非零均可进入循环,也就是1,2,3……都行
3、for(int i=0;i<3;i++)
#include <stdio.h>//学习C++的同学可以把下列语句去掉注释后替换该语句
//#include <iostream>
//using namespace std;
int main() {
for (int i = 0; i < 3; i++) {
printf("%d\n", i);
}
return 0;
}
在for循环的初始条件中直接定义循环要使用到的循环变量
ps:C99标准(1999)以后就可以在for内直接定义循环变量
许多C和C++的教材里都没这么使用,但是不意味着不行(有些教材年纪比你都大)
4、(1)while(scanf())
ps:此处仅拿Int类型举例,其他类型是否适用未知,等更新~~
#include <stdio.h>//学习C++的同学可以把下列语句去掉注释后替换该语句
//#include <iostream>
//using namespace std;
int main() {
int flag = 1;//记住啊,程序只设计成这样是有问题的,记住啊~~~~~~
while (scanf("%d", &flag)) {
printf("%d\n", flag);//只设计成这样有问题的,记住啊~~~~~~
}
printf("恭喜你,跳出来了!");//有问题的,记住啊~~~~~~
printf("%d\n", flag);//有问题的,记住啊~~~~~~
scanf("%d", &flag);//有问题的,记住啊~~~~~~
printf("%d\n", flag);//有问题的,记住啊~~~~~~
flag=857857;
printf("%d\n", flag);//有问题的,记住啊~~~~~~
return 0;//有问题的,记住啊~~~~~~
}
该循环可以使用输入EOF或ctrl+Z或ctrl+D退出
ps:EOF是计算机术语,缩写通常为EOF(End Of File)
上述按键的程序结果:
Ctrl+z无法使本程序跳出,但是Ctrl+D或者输入EOF是可以的。
至于Ctrl+z为什么不可以做到,我还不懂(挠头)。
期待有缘人解答,或者等我自己学会了回来改博客吧~~~~~~
4、(2)while (cin >> 变量名)
ps:此处仅拿Int类型举例,其他类型是否适用未知,等更新~~
C++ 也可以设计成类似的程序:
#include <iostream>//本程序只是为了举例
using namespace std;
int main() {
int n;
while (cin >> n) {//记住啊,程序只设计成这样是有问题的,记住啊~~~~~~
cout << n;
}//循环测试的是cin这个输入流对象的数值
cout << "恭喜你,跳出来了!" << endl;//只设计成这样有问题的,记住啊~~~~~~
cout << n << endl;//只设计成这样有问题的,记住啊~~~~~~
cin >> n;
cout << n << endl;//只设计成这样有问题的,记住啊~~~~~~
n = 857857;
cout << n << endl;//只设计成这样有问题的,记住啊~~~~~~
return 0;
}//只设计成这样有问题的,记住啊~~~~~~
另外:ctrl+d的作用是类似于输入EOF结束程序的,所以在本程序中这两种是类似的
在C++的程序中ctrl+z却可以做到退出循环,产生的效果却和ctrl+d和EOF不太一样;
ctrl+d和EOF更像是重新给变量赋值了为零的数值,产生原因不知(没学会呢~~)
ctrl+z没有重新对变量赋值,只是跳过接下去的cin,继续执行程序。(原因不知~)
等我学会吧,2333。
5、(1)while(scanf()!=EOF)
ps:此处仅拿Int类型举例,其他类型是否适用未知,等更新~~
while(scanf()!=EOF):
#include <stdio.h>//学习C++的同学可以把下列语句去掉注释后替换该语句
//#include <iostream>
//using namespace std;
int main() {
int flag = 1;
while (scanf("%d", &flag) != EOF) {
printf("%d\n", flag);
}
printf("恭喜你,跳出来了!\n");
printf("%d\n", flag);
scanf("%d", &flag);
printf("%d\n", flag);
flag = 857857;
printf("%d\n", flag);
return 0;
}
在本程序中,ctrl+z意外地恢复使用了,但是ctrl+d和输入EOF歇菜了(原因不知,没学会呢,就当现在学到一个小技巧吧!)
5、(2)while(cin>>n&&cin)(凑数对称)
while(cin>>n)和while(cin>n&&cin)的作用是一样的
#include <iostream>//本程序只是为了举例
using namespace std;
int main() {
int n;
while (cin >> n&&cin) {//记住啊,程序只设计成这样是有问题的,记住啊~~~~~~
cout << n;
}//循环测试的是cin这个输入流对象的数值
cout << "恭喜你,跳出来了!" << endl;//程序只设计成这样是有问题的,记住啊~~~~~~
cout << n << endl;//程序只设计成这样是有问题的,记住啊~~~~~~
cin >> n;
cout << n << endl;//程序只设计成这样是有问题的,记住啊~~~~~~
n = 857857;
cout << n << endl;//程序只设计成这样是有问题的,记住啊~~~~~~
return 0;
}
采用同样的方法测试,都无法像上一个的C程序那样跳出循环后还能正常输入。
6、(1)while(scanf(“%d”,&x)&& x)
#include <stdio.h>//学习C++的同学可以把下列语句去掉注释后替换该语句
//#include <iostream>
//using namespace std;
int main() {
int flag = 1;
while (scanf("%d", &flag) && flag) {
printf("%d\n", flag);
}
printf("恭喜你,跳出来了!\n");
printf("%d\n", flag);
scanf("%d", &flag);
printf("%d\n", flag);
flag = 857857;
printf("%d\n", flag);
return 0;
}
若将程序设计成这样,则可以在输入变量数据的同时,根据变量的数据确定是否进入或继续循环,&&符号后改成其他语句也是类似的作用。
输入的数值大小超过Int类型的范围会使程序输出其他数值(详情二进制存储方式)
6、(2)while(cin>>n&&n)
#include <iostream>//本程序只是为了举例
using namespace std;
int main() {
int n;
while (cin >> n && n) {
cout << n << endl;
}
cout << "恭喜你,跳出来了!" << endl;
cout << n << endl;
cin >> n;
cout << n << endl;
n = 857857;
cout << n << endl;
return 0;
}
C++中则和C中有所不同,输出数据超过int数据类型范围会直接使程序出错,我想大概是因为scanf那检测的是返回值,cin处检测的是这个流对象(待验证,咋验证没想好)(挠头)
结尾
Bug待修,原理待研究,笑死,根本没有结尾~~~
提示:陌生人要天天开心,想学的都能学会的!!!