第三章 三大结构 | 循环语句
while 函数
可以这样理解,当满足什么条件时,执行while循环。
编写格式
while (condition) { // this is the function }
当满足condition
时,循环可以运行。
如果condition
内的东西不变,那么就会造成一个死循环。
do-while循环
先进行一次循环,然后再检查条件是否满足,如果条件不满足(即表达式为零),则退出循环。
编写格式
do { //To do } while ( condition );
例子
这让我们想到如果用它来算位数,也是不错的选择
#include <stdio.h> int main () { int num; scanf("%d",&num); int i = 0; do { num /= 10; i++; } while ( num > 0 ); printf("是%d位数",i); return 0; }
这就可以解决用户输入0的问题了。
其实,它等同于下面的代码
while (1) { // this is the function if( condition ) { break; } }
for循环
编写格式
for ( 初始条件(控制变量); 循环条件; 循环要执行的步长) { // to do }
例子
输出3的n次方
#include <stdio.h> #include <math.h> int main() { int n; scanf("%d",&n); for(int i = 0; i <= n; i++) { printf("pow(3,%d) = %.0f\n", i, pow(3,i)); } return 0; }
读取数组
#include <stdio.h> int main() { int n[10] = {1,2,3,4,5,6,7,8,9,10}; for(int i = 0; i <= n; i++) { printf("n[%d] = %d",i,n[i]); } return 0; }
还是输出3的n次方,如果把初始变量的部分去掉呢?
就像这样
#include <stdio.h> #include <math.h> int main() { int n; scanf("%d",&n); for(; n >= 1; n--) { printf("pow(3,%d) = %.0f\n", i, pow(3,n)); } return 0; }
结果也是可以的。
i = 0; i < 10; i++
和i = 1; i <= 10; i++
的循环次数是一样的,但是起始的值不一样:一个是从i=0
开始,一个是从i=1
开始。
for循环要注意的事情
请看代码1和代码2
代码1
for (int i = 0; i < N; i++) {}
代码2
for (int i = 0; i <= N; i++) {}
这两个的不同之处在于,代码2比代码1多运行了一次,就如PTA里面的练习2-14 求奇数分之一序列前N项和中的那样:如果用代码1则可以求出前23项之和,代码2则可以求出前24项之和。
所以代码1等同于代码3
代码3
for (int i = 1; i <= N; i++) {}
何时用while、do-while、for循环
- 如果有固定次数,用for循环是最好的;无论如何都要执行一次,用do-while循环;其他情况用while循环。
- 其实,for循环和while循环是等价的。特别是for(; condition;){}和while(condition){},简直就是完全等价
本文来自博客园,作者:Mryan2005,转载请注明原文链接:https://www.cnblogs.com/Mryan2005/p/17872801.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南