C程序在默认情况下,是自顶向下执行,从main()的起始位置开始,逐条地执行语句,直到main()函数的最后。
但是实际情况中却很少这样,C语言提供了各种程序控制语句,以控制程序的执行次序。
流程控制语句有哪些呢?
if语句。
for语句。
while语句。
do...while语句。
1,for语句
for语句是一种C编程结构,它将一个由一条或多条语句组成的代码块执行特定的次数。它有时候也被称为for
循环,因为程序通常循环执行这种语句多次。
for语句的结构:
for(initial;condition;increment)
{
statement;
}
其中initial、condition、increment都是表达式,而statement为单条语句或复合语句。
程序执行到for语句时,将发生以下事件:
a,执行表达式initial。initial通常是一条赋值语句,将一个变量设置为特定的值。
b,判断condition。condition通常是一个关系表达式。
如果condition为假(即等于0),for语句结束,并接着执行statement语句后面的
第一条语句。
如果condition为真(即不等于0),则执行statement语句。
c,执行表达式increment,然后返回到第2步。
简单的for循环
#include<stdio.h> /* for循环示例 */ int i; //在声明全局变量 i //打印1到20的数字 void main(void) { for (int i = 1; i <= 20;i++) // 向上计数 { printf("%d\n",i); } system("pause"); }
运行后的结果
for语句常常被用来“向上计数”,也就是将计算器从一个值增加到另一个值,我们也
可以使用“倒计数”,也就是将计算器变量递减。
倒计数
#include<stdio.h> void main() { for (int i = 20; i >= 1;i--)//倒计数 { printf("%d\n",i); } system("pause"); }
运行后结果
增量为2
#include<stdio.h> void main() { int i = 0; /* for语句非常灵活,若已经在程序前面初始化了计数器,则可以省略初始化表达式,但不能省略分隔符。 */ for (; i <= 20; i += 2)//向上计数,但增量为2 { printf("%d\n", i); } system("pause"); }
运行后结果
另一种写法
#include<stdio.h> void main() { int i = 0; for (; i <= 20;)//向上计数,但增量为2 { //i++ 写在这里也是可以的 printf("%d\n", i++); //i++ 放在这里也是也是可以的 } system("pause"); }
运行结果
深入理解for
#include<stdio.h> void main() { /* 用于终止for循环的表达式也可以是任何表达式。只要该表达式为真(非零),for语句便会继续执行。 */ int i = 0; int j = 15; for (; i <= 20 && j>=0;)//向上计数,但增量为2 { j--; //i++ 写在这里也是可以的 printf("%d\n", i++); //i++ 放在这里也是也是可以的 } system("pause"); }
运行后结果
initial 可以使任何合法的表达式,通是一个将变量设置为特定的赋值语句。
condition 可以是任何合法的表达式,通常是一个关系表达式。当condition为假(0)时,for
语句将终止,然后接着执行statement后面的第一条语句;否则将执行statement中的语句。
for语句中可以包含另一条for语句,这就是嵌套。
打印任意行和列
#include<stdio.h> void draw_box(int, int); void main() { //打印出8行25列的X draw_box(8, 25); system("pause"); } void draw_box(int row, int column) { int col; //定义中间变量 for (; row > 0;row--) { for (col = column; col > 0;col--) { printf("x"); } printf("\n"); //每行打印完毕后,添加换行符使其换行 } }
运行结果
2,while语句
while语句也叫while循环,他不断地执行一个语句块,直到条件为假为止。
while(condition)
statement
其中condition可以使任何表达式,statement是一条语句或一个复合语句。
程序执行到while语句后,将发生一下事件:
a,计算表达式condition;
b,如果condition为假(0),while语句将结束。
c,如果condition为真(非0),将执行statement中的语句。
d,返回到第1步。
while循环
#include<stdio.h> int count; /* 打印1到20的数字 */ void main() { count = 1;//初始化 while (count<=20) { printf("%d\n",count); count++; } system("pause"); }
运行结果
结论:
for(;condition;) 等价于 while(condition);
由于这种等价性,使用for语句能够完成的任何工作,都可以用while语句来完成。
使用while语句时,必须先使用单独的语句来完成所有必要的初始化工作,同时必
须在while循环体内使用一条语句来完成递增工作。
和for语句一样,while语句的嵌套。
for和while的结合
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int array[5]; //声明一个容量为5的数组 void main(void) { //声明并初始化2个变量 int ctr = 0, nbr=0; printf("This program prompts you to enter 5 numbers \n"); printf("Each number should be from 1 to 10 \n"); while (ctr < 5) { nbr = 0; while (nbr<1|| nbr>10) { printf("\n Enter number %d of 5:",ctr+1); scanf("%d",&nbr); } array[ctr] = nbr;//给数组赋值 ctr++; //增量1 } //输出数组 for (ctr = 0; ctr < 5;ctr++) { printf("Value %d is %d\n",ctr+1,array[ctr]); } system("pause"); }
运行结果