
前言:本文章承接上一篇作者学习c语言分支和循环语句的笔记 ,在本文将会相互学习剩下的三种循环——while、for、do-while以及两种在循环语句中常用到的语句等;欢迎大家留下评论,发表自己的学习看法,也请大家多多指教,让我们一起来学习C语言吧。
C语言提供了3种循环语句,包含 while循环语句;
while循环语句的语法结构和if语句非常相似。
if(表达式)
语句;
while(表达式)
语句;通过一个简单的例子来更直观的对比二者的区别:
int main()
{
if(1)
printf("hello");
return 0;
}
int main()
{
while (1)
printf("hello\n");//从字面意思就可以知道,while语句是循环进行打印
return 0;
}
通过以上对比可知:if 语句在条件复合时只打印一次,而 while循环语句则是无限循环打印;

执行流程:首先执行判断表达式,表达式为0,循环结束;表达式不为0,执行循环语句,然后再进行判断......
下面让我们通过一个简单的例子了解 while语句的运行:
例题9——在屏幕上输出1~10的值
int main()
{
//创建变量
int a = 1;
while (a <= 10)//表达式,条件不满足a<=10后,停止打印;
{
printf("%d ", a);
a++;//在这里a++和++a得效果是一样的,因为都是先执行打印a,即都是从1开始
}
return 0;
}
例题9——
解题思路:
int main()
{
int a = 0;
scanf("%d", &a);
while (a)
{
int b = a % 10;//创建变量b,将a除以10求余的结果赋给b
printf("%d", b);
a = a / 10;
}
return 0;
}
//形式:
for(exp1; exp2; exp3)
语句;
//exp1:循环变量的初始化
//exp2:一轮循环结束后条件的判断
//exp3:循环变量的调整操作
执行流程:首先exp1初始化变量,接下来执行exp2进行条件判断,如果判断的结果 ==0 则循环结束;反之为 !=0则进行循环语句,结束后执行exp3变量调整,然后再次执行exp2......;
注意:exp1只会执行一次,其余则是exp2和exp3的循环执行;
下面,也是通过一个简单的例题来体会 for语句的执行:
例题10——在屏幕上输出1~10
int main()
{
int a = 0;
for (a = 1; a <= 10; a++)
{
printf("%d ", a);
}
return 0;
}
//结果输出1 2 3 4 5 6 7 8 9 10for循环 和 while循环 都有着变量初始化、条件判断、变量调整三个部分,但由于 for循环 在形式上将这三个部分集起来,这样就有利于代码执行的理解;而 while循环 中这三个部分处于不同位置,当代码比较复杂时就导致不容易理解。
总结:for循环 和 while循环 二者实现的
例题11——
解题思路:
int main()
{
int a = 0;
int sum = 0;
for (a = 3; a <= 100; a += 3)//先利用for循环找到符合条件的数值
{
printf("%d ", a);
sum += a;//sum随着循环体将输出的数值逐个相加
}
printf("\n %d\n", sum);
return 0;
}
//形式
do
语句;
while(表达式);通过上面的学习可以知道,while 和 for 这两种循环都是先判断,条件满足就进入循环,反之推出;
do-while循环则是先进入循环体,在执行while后的判断表达式,为真则继续,反之结束;

执行流程:先执行语句部分,执行完语句后,去执行判断表达式,表达式结果 != 0 则继续循环;结果 == 0,循环结束;
可知:在 do-while循环中,循环体至少执行一次
下面,再次通过一个简单的例题来体会 do-while语句的执行:
例题12——
int main()
{
int a = 1;
do
{
printf("%d ", a);
a++;
} while (a <= 10);
return 0;
}
//屏幕输出1~10例题13——
解题思路:
int main()
{
//先创建一个变量,用于存放我们输入的数值
int a = 0;
//创建dig变量,到时候用来存放数值的位数
int dig = 0;
//输入
printf("请输入一个正整数:");
scanf("%d", &a);
do
{
a = a / 10;
dig++;
} while (a != 0);
printf("正整数的位数是 % d\n", dig);
return 0;
}
这个例题实际上非常适用于 do-while循环,因为是先执行循环体再判断,所以即使输入的是0也会正确打印出位数;
在下面,介绍了 break 和 continue 在 while循环 、 for循环 和 do-while 中的应用;(continue 在 while循环和 for循环中存在差异,在 while循环中操作不当会导致死循环)
通过一个简单的代码运行来了解 break 在 while循环中的作用:
int main()
{
int a = 0;
while (a <= 10)
{
a++;
printf("%d ", a);
if (a == 4)
break;//当a运行到4时,break-跳出循环,即结束
}
return 0;
}
通过一个简单的代码运行来了解 continue在 while循环中的作用:
int main()
{
int a = 0;
while (a < 10)
{
a++;
if (a == 4)
continue;//当a == 4时,continue跳过后面的代码,继续运行,即不打印4
printf("%d ", a);
}
return 0;
}
以下操作均继续使用9.1部分中所使用的代码思路,这样方便我们进行对比;
int main()
{
int a = 0;
for (a = 1; a <= 10; a++)
{
if (a == 4)
{
break;//当a运行到4时,break-跳出循环,不再打印4~10
}
printf("%d ", a);
}
return 0;
}
int main()
{
int a = 0;
for (a = 1; a <= 10; a++)
{
if (a == 4)
{
continue;//当a运行到4时,跳过后面的代码(不再打印4),继续执行
}
printf("%d ", a);
}
return 0;
}
int main()
{
int a = 0;
do
{
++a;
if (a == 4)
break;//当a运行到4时,break-跳出循环,不再打印4~10
printf("%d ", a);
} while (a < 10);
return 0;
}
int main()
{
int a = 0;
do
{
++a;
if (a == 4)
continue;//当a运行到4时,跳过后面的代码(不再打印4),继续执行
printf("%d ", a);
} while (a < 10);
return 0;
}
例题14——
解题思路:
素数又称质数(大于1并且只能被1和本身整除);
下面请根据具体代码来理解——
int main()
{
//定义被除数为i
int i = 0;
//用第一个for循环来生成所需要的100~200之间的数字
for (i = 100; i <= 200; i++)
{
int flag = 1;//假设i是素数
//定义除数为j,用来试验i是否是素数
int j = 0;
//在这里用第二个for循环来生成j,范围是:2~i-1
for (j = 2; j < i - 1; j++)
{
//这里我们使用if语句来判断i能否整除j
if (i % j == 0)//整除代表取余数为0
{
flag = 0;
break;//判断i不是素数,跳出
}
}
//接下来就是flag == 1的情况,再次使用if语句
if (flag == 1)
{
printf("%d ", i);
}
}
return 0;
}
C语言提供了 goto语句和跳转标号,使得 goto语句可以实现在同一个函数内进行跳转到标号处;
int main()
{
printf("我是男的\n");
goto next;
printf("我真丑...");
next:
//由于goto语句,跳过打印"我真丑...",转而打印"我真帅!!";
printf("我真帅!!");
return 0;
}
当然,goto语句也有着一定的弊端, 使用不会导致在函数中随意跳转,进而程序无法按照预期运行;
合理利用 goto语句可以帮助我们在多层循环代码中实现跳转;
总结:在这里,关于分支和循环语句的学习就结束了,在初次接触时,看到分支和循环语句的语法结构,觉得它们挺难搞的,没啥信心。但通过这段时间的学习和实践,我感觉其实懂得了它们的使用场景和方法也就会用了(虽然写一段有时候都要想半天(´-﹏-`;)...); 最后,期待下次的相遇(✧ω✧)