循环的简单了解

Posted cainiaochufa2021

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了循环的简单了解相关的知识,希望对你有一定的参考价值。

循环

循环语句有:while、do while 、for。
三个循环语句都有一个判断表达式,通过此表达式判断是否执行循环,通常满足表达式则为真,不满足表达式则为假,
,所以在了解循环之前需要简单了解一下表达式里面常用的运算符,包括关系运算符,赋值运算符,逗号运算符。

关系运算符:

运算符含义
<小于
<=小于等于
==等于
>大于
>=大于等于
!=不等于

赋值运算符:

a += 2 —>a = a + 2
a -= 2 —>a = a - 2
a %= 2 —>a = a % 2
a /= 2 —>a = a /2
a *= 2 —>a= a * 2

什么是真?

对于C语言来说,表达式一定有一个值,表达式为真的值是1,表达式为假的值是0
这里将在介绍while循环处说明。

逗号表达式:

会在for循环讲到

下面开始介绍三种循环:

注意:三个循环都有statement部分,执行的一个单元,当执行分几步时,可以利用括号。

1.while循环

形式:
while(expression)
statement;属于入口条件循环:先判断再执行
在expression部分为假或为0 之前,重复执行statement部分

例子:加法:
#include<stdio.h>
int main()
{
	int num = 0;
	int sum = 0;
	int status = 0;
	printf("please enter an integer to be summed\\n");//提示输入一个加数
	printf("(q to quit)\\n");//输入退出
	status = scanf("%d", &num);//输入
	while (status == 1)//判断
	{//while语句只会读取下面一个语句或者代码块
		sum = num + sum;
		printf("%d", sum);
		printf("please enter next integer to be summed\\n");
		status = scanf("%d", &num);
	}//可以执行多个数相加
	printf("those intergers sum to %d", sum);//打印结果
	return 0;
}

终止while循环:

要是想while终止,可以用break和if语句或者改变测试表达式的值

#include<stdio.h>
int main()
{
	int index = 1;
	while (index < 5)
		printf("good morning \\n");//只有这两行的话while循环不会停止
	
	return 0;
}

用if使while停止

#include<stdio.h>
int main()
{
	int index = 1;
	while (index < 5)
	{
		printf("good morning\\n");
		if (index < 3)
		{
			printf("hello\\n");
			break;
		}
		else
		{
			printf("no\\n");
			break;
		}
	}
return 0;
}//结果:输出goodmorning以及hello后循环停止

改变表达式的值:

#include<stdio.h>
int main()
{
	int index = 1;
	while (index < 5)
	{
		printf("good morning \\n");
		index++;
	}//注意:这里需要括号将两行代码形成一个代码块,因为while只会识别下面一个语句
	return 0;
}
#include<stdio.h>
int main()
{
	int n = 5;
	while (n < 7)
	{
		printf("n = %d\\n", n);
		n++;
		printf("now n = %d\\n", n);
	}
	printf("the loop has finished .\\n");
	return 0;
}//打印到 now n = 7结束,当n 等于7时,不满足n<7的条件,不再循环

不满足条件直接无法执行循环的情况

#include<stdio.h>
int mian()
{
	int index = 10;
	while (index++ <= 5)
		printf("haha\\n");
	return 0;/*这个循环不会开始,因为while是入口循环
			 一开始index就不满足 <= 5, 所以直接跳过循环。*/
}

while里面的表达式可以比较字符,但是不能比较字符串:

比如可以这样写:比较字符:

#include<stdio.h>
int main()
{
	char ch = 'w';
	int count = 1;
	printf("please input char\\n");
	while (ch != '$')
	{
		count++;
		scanf("%c", &ch);

		printf("%d\\n", count);
		printf("$-->quit\\n");

	}
	return 0;
}

*关系运算符也可以比较浮点数

尽量使用<>, 不要使用 = ,因为浮点数在系统中四舍五入可能导致逻辑上相等的两个数不相等

浮点数比较:
#include<stdio.h>
#include<math.h>
int main()
{
	const double ANSWER = 3.14159;
	double reponse = 0;
	printf("what is the value of pi?\\n");
	scanf("%lf", &reponse);
	while (fabs(reponse - ANSWER) > 0.0001)
	{
		printf("try again!\\n");
		scanf("%lf", &reponse);
	}
	printf("close enough!\\n");
	return 0;
}
循环会一直提示用户输入,除非与正确值之间相差值小于0.0001

关于真假值:真为1,假为0

#include<stdio.h>
int main()
{
	int mmi1 = (10 > 2);
	int mmi2 = (10 < 2);
	printf("true = %d\\n", mmi1);//true = 1
	printf("false = %d\\n", mmi2);//false = 0
	return 0;
}

对于下面这个代码循环会一直进行/

#include<stdio.h>
int main()
{
    while(1)
        printf("haha\\n");
    return 0;
}
#include<stdio.h>
int main()
{
	int n = 3;//这里用整数,字符串,字符都行
	while (n)
	{
		printf("%d is true\\n", n);
		n--;
	}//当n=0时会停止
	printf("%d is false\\n");//
	while ('w')
	{
		printf("'w' is true\\n");//w is true
		break;
	}
	return 0;
}

布尔类型:

关键字: _Bool

布尔类型只能储存1或者0,如果是非零其他值,会被转换成1

#include<stdio.h>
int main()
{
	_Bool index = "nihao ";//"3"可以,'w'也可以,"nihao"也可以
	while (index)
	{
		printf("hehe\\n");
		break;
	}
	return 0;
}

2. do while

形式:
do
statement
while(expression);属于出口条件循环先执行一次,再判断是否执行下一次

#include<stdio.h>
int main()
{
    int sum = 0;
    int count = 0;
    int test = 0;
    printf("please input an integer to be summed\\n");
    test = scanf("%d", &count);
    do
    {
        printf("please input next integer\\n");
        sum = count + sum;
        test = scanf("%d", &count);
    }
    while (test == 1);
    printf(" sum = %d\\n", sum);
    return 0;
}

3.for循环

形式:
for(initialize;test;update)
statement;属于入口条件循环
在test为假或者为0之前,重复执行statement部分
注意:入口条件循环

#include<stdio.h>
int main()
{
	const int NUMBER = 5;
	int a = 0;
	for (a = 1; a <= NUMBER; a++)//NUMBER限制了a加的次数
		printf("haha\\n");
	return 0;
}

利用for循环创造一个立方表



#include<stdio.h>
int main()
{
	const int  NUMBER = 6;
	int count = 0;
	int count2 = 0;
	for (count = 1; count <= NUMBER; count++)
	{
		count2 = count * count * count;
		printf("%d     %d\\n", count, count*count*count);
	}//上面的count*count*count可以用count2代替
	return 0;
}

for的灵活性:

1.可以使用递减运算符来递减计数器

#include<stdio.h>
int main()
{
	const int NUMBER = 1;
	int count = 0;
	for (count = 7; count >= NUMBER; count--)
	{
		printf("%d seconds!\\n", count);
	}
	printf("begin!");
	return 0;
    
}

同样的程序用while执行
#include<stdio.h>
int main()
{
	const int NUMBER = 1;
	int count = 7;
	while (count >= NUMBER)
	{
		printf("%d seconds!\\n", count);
		count--;
	}
	printf("begin!\\n");
	return 0;
}

用do while执行

#include<stdio.h>;
int main()
{
	const int NUMBER = 1;
	int count = 7;
	do
	{
		printf("%d seconds!\\n", count);
		count--;
	} while (count >= NUMBER);
	printf("begin!\\n");
	return 0;
}

结果与前面一样

2.可以让计算器递增2、10等

#include<stdio.h>
int main()
{
	int a = 0;
	for (a = 2; a < 100; a = a + 15)
		printf("%d\\n", a);
	return 0;
}

可以用字符代替数字计数;

#include<stdio.h>
int main()
{
	char ch;
	for (ch = 'a'; ch <= 'f'; ch++)
		printf("the ascll value for %c is %d.\\n", ch, ch);
	return 0;
}//字符在内部以整数形式储存的,
 比较时,时通过转换成整数来比较的。

3.除了限制测试次数以外,也可以用test位置限制其他值

比如限制立方的大小


#include<stdio.h>
int main()
{
	int count = 0;
	for (count = 1; count * count * count <= 216; count++)
		printf("%d %d\\n", count, count*count*count);
	return 0;
}/*注意:若在for语句前声明一个变量用与test位置,
会出现错误--顺序没有考虑到到位
//#include<stdio.h>
//int main()
//{
//	int count = 0;
//	int number = 0;
//	for (count = 1; number <= 216; count++)
//		printf("%d %d\\n", count, number);
//	return 0;
//}
//*/

4.表达式
第三个表达式可以是任意一个合法的表达式,每次迭代都会更新该表达式的值
	**例子1**

#include<stdio.h>
int main()
{
	int x = 0;
	int y = 0;
	for (x = 1; y <= 75; y = (++x * 5) + 50)
 //第三个表达式里面x值一直在变
		printf("%10d %10d\\n", x, y);
	return 0;
}

例子2
每次乘上一个固定的值


#include<stdio.h>
int main()
{
	double debt;
	for (debt = 100.0; debt < 150; debt = debt * 1.1)
		printf("your debt is now $%.2f.\\n ",debt);
	return 0;
}

可以省略一个或者多个表达式,但是不能省略分号

#include<stdio.h>
int main()
{
	int ans = 2;
	int n = 0;
	for (n = 3; ans <= 25;)//省略了第三个表达式
		ans = ans * n;
	printf("n = %d ; ans = %d", n, ans);
	return 0;
}

/#include<stdio.h>
//int main()
//{
//	for (;;)/*省略了三个表达式,注意:
// 省略第二个表达式被视为真*/
//		printf("haha\\n");
//	return 0;
//}
第一个表达式也可以不是变量赋值型

#include<stdio.h>
int main()
{
	int a = 0;
	int b = 1;
	for (printf("haha\\n"); a < b; a++)
		//这里第一个表达式换成了输出函数,一样可以执行
		printf("xixi\\n");
	return 0;
}

for循环中用到数组


#include<stdio.h>
#define NUM 10
#define MMI 72
int main()
{
	int index = 0;
	int sorce[NUM] = { 0 };
	int sum = 0;
	float ave = 0;
	printf("please input your sorce\\n");
	for (index = 0; index <= 9; index++)
		scanf("%d", &sorce[index])//输入是个数
	for (index = 0; index <= 9; index++)
		printf("%d  ", sorce[index]);//检验那十个数
	printf("\\n");
	for (index = 0; index <= 9; index++)
		sum += sorce[index];//求和
	ave = sum / NUM;//求平均数
	printf("sum is %d", sum);
	printf("ave is %.2f", ave)常用python日期日志获取内容循环的代码片段

使用从循环内的代码片段中提取的函数避免代码冗余/计算开销

Apollo Codegen 没有找到生成代码的操作或片段

如何使用事件侦听器来加载动画片段的循环

AVKit – 视频片段仅循环 2 次

Python - 循环加速 - 大型数据集