循环的简单了解

循环

循环语句有: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);
	return 0;
}

```c


逗号表达式:

这里用一个例子来解释:


#include<stdio.h>
int main()
{
	const int COUNT = 40;
	const int NUMBER = 20;
	int cost, ounces;
	printf("ounces cost\n");
	for (ounces = 1, cost = COUNT; ounces < COUNT; ounces++)
		printf("%d",ounces);
	return 0;
}
//这里可以同时给ounces和cost都赋值,但是有顺序
//ounces比cost先赋值
//逗号运算符对于顺序有要求:
//后面用不到的话不用要求顺序

4. 嵌套循环


#include<stdio.h>
int main()
{
	char ch = 'a';
	int b = 1;
	int c = 6;
	for (b = 1; b <= c; b++)//这个后面不能加分号,否则会跳过该语句
	{
		for (ch = 'a'; ch <= 'f'; ch++)
			printf("%c", ch);
		printf("\n");
	}
	
	return 0;
}
变式嵌套循环

#include<stdio.h>
int main()
{

	char ch = 'a';
	int b = 1;
	int c = 6;
	for (b = 1; b <= c; b++)
	{
		for (ch = ('a'+b); ch <= 'f'; ch++)
			printf("%c", ch);
		printf("\n");
	}
	return 0;
}
  • 18
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值