文章目录
- goto语句
- 循环语句的类型
- while语句
- 死循环
- 语句的嵌套
- do..while语句
- for语句
goto语句
如果我们想要实现从0输出到n,如果要写0~100的话那我们就要写100个printf,这样非常麻烦,也
不现实,在汇编中当程序print完了我们可以用一个jmp让它回去继续输出,在C语言中一样可以实现,
我们可以用goto语句。
例子:
#include <stdio.h> //头文件
#include <windows.h>void function(int x) //定义函数
{int i = 0; //定义变量
B: //设置返回点printf("%d \n",i); //输出i的值i++; //在i的基础上进行自加if(i<=x) //进行判断goto B; //返回到Breturn; //函数结束
}void main() //程序入口
{function(10000); //调用函数并传参return; //程序结束
}
运行结果:
我们可以去看一下反汇编,这里的goto对应的就是jmp:
循环语句的类型
在C语言中循环语句的类型有以下三种:
while语句do..while语句for语句
while语句
while语句格式while(表达式)
{ 语句;
}
刚才的例子在这里用while来实现也很简单:
#include <stdio.h> //头文件
#include <windows.h>void function(int x) //定义函数
{int i = 0; //定义变量
A: while(i<=x) //开始循环{printf("%d\n",i); //若循环判断成立则输出i的值i++; //i自加,并跳回到A,直至判断不成立跳出while语句}return; //函数结束
}void main() //程序入口
{function(10000); //调用函数并传参return; //程序结束
}
这里写A纯属是为了方便理解,正常写完保存是会报警告的,看一下运行结果:
死循环
while判断是否进入循环就两个结果,0和1,如果是0就跳出去,如果是1就跳进去,那么死循环就不难理解了,while(1)就行了,程序就会无限输出,直至死机。
例子:
#include <stdio.h> //头文件
#include <windows.h>void function(int x) //定义函数
{int i = 0; //定义变量while(1) //开始循环(无限循环){printf("%d\n",i); //若循环判断成立则输出i的值i++; //i自加,并跳回到A,直至判断不成立跳出while语句}return; //函数结束
}void main() //程序入口
{function(10000); //调用函数并传参return; //程序结束
}
运行结果:
语句的嵌套
格式while(表达式)
{其他语句
}
现在我们把例子改一下,要求输出1~100内所有的偶数:
#include <stdio.h> //头文件
#include <windows.h>void function(int x) //定义函数
{int i = 0; //定义变量while(i<=x) //开始循环{if(i%2 == 0) //i的值对2取余,若为零则进行输出{printf("%d\n",i); //若循环判断成立则输出i的值}i++; //i自加,并跳回到A,直至判断不成立跳出while语句 }return; //函数结束
}void main() //程序入口
{function(100); //调用函数并传参return; //程序结束
}
运行结果:
do…while语句
do..while语句格式do
{语句
}while(表达式);当程序运行到while时判断若为零则跳回继续执行,反之跳出,即使判断不成立,也会执行一次。
例子:
#include <stdio.h> //头文件
#include <windows.h>void main() //程序入口
{int day = 1; //定义局部变量do //开始循环{printf("%d\n", day); //输出参数day++; //参数自加}while (day <= 31); //判断是否大于31,大于跳出循环
return; //程序结束
}
运行结果:
在汇编中,do…while与while的区别是,while先进行判断,在进行输出,而do…while则是,先输出一次,在进行判断,若符合则输出,不符合则跳出循环。
for语句
格式
for(表达式1;表达式2;表达式3)
{需要执行的代码4
}这里表达式1与表达式3没有什么特定的要求,但是表达式2必须要有返回值。执行顺序:
第一次:1243
第二次:243
第三次:243
...
若表达式2不成立则跳出循环,执行后面的语句。
例子:
#include <stdio.h> //头文件
#include <windows.h>void Q1() //定义函数Q1
{printf("Q1 \n");
}
int Q2() //定义函数Q2
{printf("Q2 \n");return -1;
}
void Q3() //定义函数Q3
{printf("Q3 \n");
}
void testfor() //定义函数testfor
{for(Q1();Q2();Q3()) //开始for循环,调用前面的三个函数{printf("Q4 \n"); //执行完Q1执行Q2,条件符合执行Q4,在执行Q3}return; //循环结束
}void mian() //程序入口
{testfor(); //调用testfor()函数return; //程序结束
}
这里可以看到,程序的运行顺序是1、2、4、3、2、4、3、2、4、3…:
现在我们可以用for语句来输出1~100的值了:
#include <stdio.h> //头文件
#include <windows.h>void testfor() //定义函数
{for(int i = 0;i>100;i++) //定义for循环的三个表达式{printf("%d \n"); //输出结果}return; //循环结束
}void mian() //程序入口
{testfor(); //调用testfor()函数return; //程序结束
}
这里有两点需要说明:
第一、for循环的三个表达式可以省略,但是分号不可以省略。
例如:
for(;;)
{printf("默认成立 \n");
}
for(;-1;)
{printf("第二个表达式非零就成立");
}
for(;0;)
{printf("不成立 \n");
}
第二、for循环的第一三表达式可以使用逗号。
例如:
int x;
int y;
int z;for(x = 0,y = 0,z = 0:x<10;x++,y++,z++)
{printf("%d %d %d \n",x,y,z);
}