本篇介绍以下C语言控制语句:
1.条件判断语句也叫分支语句:if语句,switch语句;
2.循环执行语句:do while语句,while语句,for语句;
3.转向语句也叫跳转语句:break语句,continue语句。
(咱不怕,没啥技术含量,其实,也就那回事儿);
1.1 if条件语句
if条件语句分为3种语法格式,每一种都有其特点,下面分别讲解。
1.1.1 if语句
例如,小明妈妈跟小明说:“如果考试100分,就给你换手机。”
我们可以理解为:
如果小明考试得100分;
妈妈给他换手机;
上述中的”如果“相当于” if “,”妈妈给换手机“就是执行语句,需放在{ }中。
if (小明考了100)
{
妈妈给换手机
}
我们最终将理解为:
if (判断条件)
{
执行语句
}
判断条件的值只能是0或非0,对应真或假。实例为:
if(x<10)
{
x=x+1;
}
如果x小于10是真的,则x的值+1
1.1.2 if...else 语句
基于上述理解,我们再增加一个分支:if如果满足条件,则执行相应处理,else否则就进行另一种处理。
if(num%2==0)
{
printf(”数字%d是一个偶数\n",num);
}
else
{
//判断上边的 ” if “ 条件不成立
printf(“数字%d是一个奇数\n“,num);
}
1.1.3 if...else if...else
为了满足人们更多需要,我们需要多条判断语句,从而对不同情况进行不同处理。
if(判断条件1)
{
执行语句1;
}
else if (判断语句2)
{
执行语句2;
}
else if (判断条件n)
{
执行语句n;
}
else
{
执行语句n+1;
}
好,接下来代入实例:
假设学生成绩grade为90分,它满足第一个条件grade>=80,直接打印“该成绩为优”
if(grade>=80)
{
//满足条件grade>=80
printf("该成绩为优\n”);
}
else if(grade>=70)
{
//不满足条件grade>=80,但满足条件grade>=70
printf("该成绩为良\n");
}
else if (grade>=60)
{
//不满足条件grade>=70,但满足grade>=60
printf("该成绩为中\n");
}
else
{
//不满足条件grade>=60
printf("该成绩为差\n");
}
注意:其中多条执行语句中,只要有一个执行语句因为判断语句满足条件而被执行,则不执行其他与他对其的执行语句
1.2 switch 条件语句
对于switch语句,我们可以抽象的把 “ if ” 语句中的判断语句换成1,2,3......98............。也就是说如果一个式子,一个数字,一个你输入的数......等于你创建的switch语句中对应的那个数字,则执行对应式子下方的执行语句。上实例:
switch (week) //也可以理解为switch(表达式)
{
case 1:
printf("星期一\n");
break; //这里可直接看3.1关于break的内容
case 2:
printf("星期二\n");
break;
case 3:
printf("星期三\n");
break;
case 4:
printf("星期四\n");
break;
case 5:
printf("星期五\n");
break;
case 6:
printf("休息日\n");
break;
case 7:
printf("休息日\n");
break;
default:
printf("输入的数字不正确\n");
break;
}
如果switch括号中的week函数=1,则打印星期一,如果week=6,则打印休息日。
当然我们把1,2,3,4,5视为工作日,6,7视为休息日时就可写为:
switch(week)
{
case 1:
case 2:
case 3:
case 4:
case 5:
//当week满足值1,2,3,4,5中任意一个时,打印
printf(”今天是工作日\n");
break;
case 6:
case 7:
//当week满足6,7任意一个时,打印
printf("今天是休息日“);
break;
}
2.1 while 循环
while和if相似区别在于while会反复判断,”判断语句“是否为真,一直到判断语句为假时停止。
while(i<=fac)
{
res=res*i;
i++;
}
while循环中变量i每次计算乘积后自增1,当i的值大于fac时退出循环。
下面是一个运用switch语句和do...while循环做的小游戏,可增加理解
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void menu()
{
printf("*****************************\n");
printf("****1.play*****0.exit********\n");
printf("*****************************\n");
}
void game()
{
int ret = 0;
int num = 0;
ret = rand() % 100 + 1;
while (1)
{
printf("猜数字\n");
scanf("%d",&num);
if (num > ret)
{
printf("猜大了\n");
}
else if (num < ret)
{
printf("猜小了\n");
}
else
{
printf("猜对了\n");
break;
}
}
}
int main()
{
int input = 0;
srand((unsigned int)time(NULL));
do
{
menu();
printf("请选择:");
scanf("%d", &input);
switch (input)
{
case 1:
game(); //根据菜单内容玩家选择玩或者退出,input变量=1,则执行game()
break; //程序,input=0,则打印退出游戏并退出。
case 0:
printf("退出游戏\n");
break;
default: //default代表玩家输入的既不是1也不是0,则执行default下的程序。
printf("选择错误\n");
break;
}
} while (input);
return 0;
}
2.2 do...while 循环
和之前不同,do...while语句会无脑先把while执行一遍,再对while括号中的判断语句进行判断(和while一样的原理)
do
{
res=num%10; //取末尾第一个数
printf("%d",res);
num=num/10; //整除,把最后一位的数去掉
} while (num !=0 ) //直到num为0,(0不等于0),这句话时错的,是假的时退出循环。
我们在编写一个小游戏时通常要先将程序执行一遍,再根据玩家所选内容判断要不要执行循环玩游戏,这时do...while的作用就体现出来了。之后我还会发编写其他小游戏的相关文章。
2.3 for 循环
它通常用在循环次数已知,或我想让其循环几次的情况。
for(初始化表达式;循环条件(判断条件);操作表达式)
{
执行语句
}
在计算机看来,1,执行初始化变量
2,判断条件为真,为非0,则执行”执行语句“,然后运行操作表达式。
3,判断条件为假时退出循环。
上实例:
for(int i=0 ; i<=100 ; i++) //i的值会在执行完sum+=i后自加1,如此循环,只到i=100,i再
{ //次自加为101时不满足i<=100时退出循环
sum+=i ;
}
例如我们可以借此打印乘法口诀表:
#include<stdio.h>
int main()
{
int i = 0;
for (i = 1; i <= 9; i++)
{
int j = 0;
for (j = 1; j <= i; j++)
{
printf("%d*%d=%d ", i, j, i * j);
}
printf("\n");
}
}
3.1 break 语句
break打破,也可以理解成跳出,在循环中有这直接跳出循环的作用(是直接跳出循环整段程序,不是只跳过一次循环)在switch语句中也有跳出switch整段程序的作用。
while(x<=4)
{
printf("x=%d\n",x);
if(x==2)
{
break;
}
x++;
}
上述代码中while循环打印x的值(假设x初始值为0),当x值为2时,遇到break跳出循环,因此只会打印x=0,x=1,x=2,不会打印x=3,x=4
3.2 continue 语句
break跳出整段循环程序,而continue是跳过本次循环,不执行continue之后的程序,直接进行下一次循环,
for(int i=1;i<=100;i++) //这段代码的目的在于打印1到100中的奇数,也就是
{ //不能被2整除的数。
if(i%2==0)
{
continue; //凡是可以被2整除的数都会执行到continue,而
} //continue会跳过本次循环不让其执行到下边的printf。
printf("%d",i);
}