✌️目录
【明解C语言】之do... while循环_马桶上看算法的博客-CSDN博客C语言、循环语句、初级、编程语言https://blog.csdn.net/m0_63033419/article/details/123704397?spm=1001.2014.3001.5501【明解C语言】循环语句之while_马桶上看算法的博客-CSDN博客C语言、while循环、编程语言、后端、初级、https://blog.csdn.net/m0_63033419/article/details/123677431?spm=1001.2014.3001.5501
一、我与for循环的爱恨情仇
1.for循环书写格式
for(表达式1;表达式2;表达式3)
{
//循环语句;
}
表达式1是初始化部分,表达式2是判断部分,表达式3是调整部分。
若满足判断部分的判断条件,则进入循环执行循环语句;否则跳出。
2.代码示例
#include<stdio.h>
int main()
{
int i = 0;
for(i=1; i<=10; i++)
{
printf("%d ",i);
}
return 0;
}
输出结果:
3.流程图
4.break在for循环中的作用
#include<stdio.h>
int main()
{
int i = 0;
for (i = 1; i <= 10; i++)
{
if (i == 5)//如果i等于5进入if语句
break;//跳出循环,使循环结束
printf("%d ", i);
}
return 0;
}
输出结果:
5.continue在for循环中的作用
#include<stdio.h>
int main()
{
int i = 0;
for (i = 1; i <= 10; i++)
{
if (i == 5)
continue;//只跳过本次循环,并不会跳出整个循环
printf("%d ", i);
}
return 0;
}
输出结果:
6.for循环的循环变量控制
1.不可再for循环体内部修改循环变量,防止for循环失去控制。
例1:
#include<stdio.h>
int main()
{
int i = 0;
for (i = 1; i <= 10; i++)
{
printf("%d ", i);
i = 5;//for循环体内部循环变量被修改了
}
return 0;
}
输出结果:
循环的调整部分可以放在循环体内
例2:
#include<stdio.h>
int main()
{
int i = 0;
for (i = 1; i <= 10; )
{
printf("%d ", i);
i++;//判断部分
}
return 0;
}
输出结果:
前提是自己知道放在这里可以,尽管自己知道可以,别人在看代码的时候 发现调整部分没有内容,有可能会填补,就得不到我们想要的结果了。(语法允许,但是我们不提倡)
例3就是在别人发现没有调整部分填补后的例子
例3:
#include<stdio.h>
int main()
{
int i = 0;
for (i = 1; i <= 10; i++)//i自加1
{
printf("%d ", i);
i++;//i自加1
}
return 0;
}
输出结果:
2. 建议for语句的循环控制变量的取值采用“左闭右开区间的写法”。
(1)左闭右开区间写法
#include<stdio.h>
int main()
{
int arr[10]={0};
int i=0;
for(i=0; i<10; i++)//左闭右开区间写法更能直观地反映出循环次数
{
printf("%d ",arr[i]);
}
return 0;
}
(2)左右都是闭区间
#include<stdio.h>
int main()
{
int arr[10]={0};
int i=0;
for(i=0; i<=9; i++)
{
printf("%d ",arr[i]);
}
return 0;
}
两种方法都是一样的(唯一的区别是判断部分,但都是循环了十次)。
不建议第二种写法,建议左闭右开的写法。
7.for循环表达式的省略
#include<stdio.h>
int main()
{
//判断部分的省略-判断部分恒为真
//结果死循环
for (;;)//表达式可以省略,但是分号不可以
{
printf("hehe");
}
return 0;
}
输出结果:
8.关于for循环嵌套初始化部分的省略
(1)省略前:
#include<stdio.h>
int main()
{
int i = 0;
int j = 0;
for (i = 0; i < 3; i++)//嵌套外循环打印3次内循环
{
for (j = 0; j < 3; j++)//前套内循环打印3次hehe
{
printf("hehe\n");
}
}
return 0;
}
输出结果:
(2)省略后:
#include<stdio.h>
int main()
{
int i = 0;
int j = 0;
for (; i < 3; i++)
{
for (; j < 3; j++)
{
printf("hehe\n");
}
}
}
输出结果:打印了3次hehe
代码分析:
当i=0,i<3的时候,进入循环语句,j加了3次,这个时候已经打印了3个hehe。
j变成3的时候,不满足判断条件了,要进入到i++,i变成了1,i<3进入循环语句。
这个时候的j没有被初始化成0,j始终是3,3不小于3,不满足条件跳出循环。 也就跳过了printf,无法打印出hehe。
二、练习题目
1.编写程序计算1+2+3+......+100的值
#include<stdio.h>
int main()
{
int i = 0;
int sum = 0;//计算1+2+3+......+100的值
for (i = 1; i <= 100; i++)
{
//把sum+i的值赋给sum并累加
sum = sum + i;
}
printf("%d\n", sum);
return 0;
}
输出结果:
2.在屏幕上打印用“*”组成的正方形
#include<stdio.h>
int main()
{
int i = 0;
int j = 0;
int n = 0;
scanf("%d", &n);//n决定正方形的边长
for (i = 0; i < n; i++)//打印正方形的宽
{
for (j = 0; j < n; j++)//打印正方形的长
{
printf("* ");
}
printf("\n");
}
return 0;
}
输出结果:
3.编写程序计算一下1~100中所有的整数有多少个数字9
#include<stdio.h>
int main()
{
int a = 0;
int count = 0;//统计9的个数
for (a = 1; a <= 100; a++)
{
if (a % 10 == 9)//判断个位是9
{
count++;//若个位是9,count个数加1
}
if (a / 10 == 9)//判断十位是9
{
count++;//若十位是9,count个数加1
}
}
printf("count=%d\n", count);
return 0;
}
输出结果:
4.输出9*9乘法表
#include<stdio.h>
int main()
{
int i = 0;//乘数
for (i = 1; i <= 9; i++)
{
int j = 0;//被乘数
for (j = 1; j <= i; j++)
{
//先打印i和j在打印i*j的结果
printf("%d*%d=%d ", i, j, i * j);
}
printf("\n");//每一次换行
}
return 0;
}
输出结果: