前言
循环是重复执行其他语句(循环体)的一种语句。在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循环的执行顺序:
- 初始化表达式(只在循环开始时执行一次)
- 判断循环条件,如果满足则执行循环体内的语句,否则跳出循环
- 执行循环体内的语句
- 更新循环变量
- 重复步骤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语言初阶学习分支语句和循环语句第二篇完结,如果有什么问题,欢迎大家在评论区,讨论、指正。
也希望此文对于你能够有所帮助,谢谢大家~
码字不易,还望支持