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; //返回到B
return; //函数结束
}
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);
}