『C语言初阶』第二章-分支语句和循环语句(2)

前言    

            循环是重复执行其他语句(循环体)的一种语句。在C语言中,每个循环都有一个控制表达式。每次执行循环体(循环重复一次)时都要对控制表达式求值。如果表达式为真(即值不为零),那么继续执行循环。

        C语言提供了3种重复语句,即

  • while
  • for
  • do while

这里先介绍三个语句

  • break语句         用来跳出循环并把程序控制传递到循环后的下一条语句
  • continue语句    用来跳过本次循环的剩余部分,转到测试控制表达式 
  • goto语句           可以跳到函数内的任何语句上。

while语句

        while循环在循环体执行之前测试控制表达式

语法结构:

while(表达式)
{
	语句;
}

       含义: 进入循环的条件为真(不为零),进入循环。表达式为真(不为零),执行语句,表达式为假(为零),不执行语句。

        注:这里的圆括号时强制要求的,而且在右括号和循环体之间没有任何内容。

  用法示例:

           打印1~9之间的所有整数

int main()
{
	int i = 1;
	while (i <= 9)
	{
		printf("%d\n", i++);
	}
	return 0;
}

  无限循环

           如果控制表达式的值始终非零,while语句将无法终止。所以当控制表达式非零时,一定要有跳出循环的语句(break,goto,return)或者调用导致程序终止的函数,否则程序将永远执行下去。

while语句中的break和continue

        还是上面求1~9整数的代码,但这次在while循环中加入了break语句,那么会有什么效果呢?

int main()
{
	int i = 1;
	while (i <= 9)
	{
		if (i == 5)
			break;
		printf("%d ", i++);
	}
	return 0;
}

    该代码的执行结果为:

 总结:

         break在while循环中的作用: 其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。 所以:while中的break是用于永久终止循环的。

        那么将break改为continue之后,结果会是什么?

int main()
{
	int i = 1;
	while (i <= 9)
	{
		if (i == 5)
			continue;
		printf("%d ", i++);
	}
	return 0;

         执行后我们发现,代码在打印出1、2、3、4之后进入了死循环,那么是什么原因导致的呢?

        之后我们将代码修改为

int main()
{
	int i = 1;
	while (i <= 9)
	{
		i++;
		if (i == 5)
			continue;
		printf("%d ", i);
	}
	return 0;
}

        执行代码后,结果为:

 总结:

        continue在while循环中的作用就是: continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行, 而是直接跳转到while语句的判断部分。进行下一次循环的入口判断。

getchar()和putchar()

int main()
{
	int a = 0;
	while((a = getchar())!=EOF)
	putchar(a);
	return 0;
}

        注:

                getchar:    读取内存缓存区的一个字符,将其转换为ASCII码值,返回值为整数

                putchar: 将括号中的字符打印到屏幕上

那么下面这代码的作用是什么呢?

int main()
{
	int a = 0;
	while ((a = getchar()) != EOF)
	{
		if (a < '0' || a>'9')
			continue;
		putchar(a);
	}
	return 0;
}

  该代码的作用是:只打印数字字符,跳过其他字符的。

for语句

        for循环非常合适那些递增或递减计数变量的循环

  语法结构:

for(表达式1; 表达式2; 表达式3)
{
	...//循环语句;
}

        表达式1 表达式1为初始化部分,用于初始化循环变量的。

        表达式2 表达式2为条件判断部分,用于判断循环时候终止。

        表达式3 表达式3为调整部分,用于循环条件的调整。

 C 语言for循环的执行顺序:

  1. 初始化表达式(只在循环开始时执行一次)
  2. 判断循环条件,如果满足则执行循环体内的语句,否则跳出循环
  3. 执行循环体内的语句
  4. 更新循环变量
  5. 重复步骤2~4,直到循环条件不再满足

用法示例:

int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		printf("%d ",i);
	}
	return 0;
}

注:与while语句相同,这里的圆括号时强制要求的,而且在右括号和循环体之间没有任何内容。

        注意在循环体中对循环变量的增减情况。

C99中的for语句

        在C99标准下,for循环中,表达式1可以替换为一个声明,这使得程序员可以声明一个可以用于循环的循环变量。

for(声明或表达式1; 表达式2; 表达式3)
{
	...//循环语句;
}

在for语句中省略表达式

        C语言中允许省略任意或全部的表达式,因此for语句中的表达式可以省略,但控制表达式也必须始终有两个分号。

        如果省略表达式1,那么在执行循环前没有初始化的操作;

        如果省略表达式2,那么循环条件将默认为真,循环体将一直执行

        如果省略表达式3,那么循环变量将不会在循环体结束后进行加减变化,就必须要通过循环体内进行自加减,以保证表达式2的值最终会变为假。

for语句中的break和continue

同样在上面求1~9整数的代码中修改,但这次在for循环中加入了break语句,那么会有什么效果呢?

int main()
{
	int i = 0;
	for (i = 1; i<=10; i++)
	{
		if (i == 5)
			break;
		printf("%d ",i);
	}
	return 0;
}

 执行结果为

 那么将break改为continue之后,结果会是什么?

int main()
{
	int i = 0;
	for (i = 1; i<=10; i++)
	{
		if (i == 5)
			continue;
		printf("%d ",i);
	}
	return 0;
}

 执行结果为:

 这时,我们发现结果和while的结果是不同的,while中执行结果为1234死循环,思考下,这是为什么?

总结:

        我们发现在for循环中也可以出现break和continue,他们的意义和在while循环中是一样的。 但是还是有些差异:

逗号操作符

        有时候,我们可能会编写有两个或多个初始表达式的for语句,或希望每次循环一次对多个变量进行自增操作。使用逗号操作符作为for循环中表达式1或3则可以实现。

格式:

[逗号操作符]   表达式1,表达式2

这里表达式1,2是任意表达式,逗号表达式的计算通过两个步骤实现,第一步,计算表达式1并且扔掉被计算出的值。第二步,计算表达式2,把这个值作为整个表达式的值。其中表达式1的值可以发送自改变。

如 假设变量i和变量j的值分别为 1和5,当计算逗号表达式++i,i+j 时,变量i先进行自增,然后计算i+j,所以表达式的值为7。所以此时变量i 的值为2。

注:逗号操作符的优先级低于所有其他的操作符,所以不需要加括号。

        逗号操作符时左结合的。

for循环练习

//请问循环要循环多少次?
int main()
{
 int i = 0;
 int k = 0;
 for(i =0,k=0; k=0; i++,k++)
        k++;
 return 0;
}

 

      答案是0次。

      因为在for循环中,表达式2决定循环条件,变量在初始化后,判断循环条件,但此时表达式2为k=0 ,单个=为赋值操作符,==为比较运算符,故循环条件不成立,变为了给k赋值0,故不循环。将k=0改为k==0则循环一次。


至此C语言初阶学习分支语句和循环语句第二篇完结,如果有什么问题,欢迎大家在评论区,讨论、指正。

也希望此文对于你能够有所帮助,谢谢大家~

码字不易,还望支持

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值