【C基础篇】选择结构与循环控制
一、选择结构
1.if语句的基本形式
if语句首先要判断表达式的值,然后根据该值的真假情况决定去执行后续的流程图。
//模拟员工考勤 工号和密码都对则考勤成功
#include<stdio.h>
int main()
{
int id,passwd;
printf("请输入您的工号:\n");
printf("请输入您的密码:\n");
scanf("%d",&id);
scanf("%d",&passwd);
if(id == 12 && passwd == 14)
{
printf("考勤成功!\n");
}
if(id != 12 && passwd != 14)
{
printf("对不起,您输入的工号或者密码错误!\n");
}
return 0;
}
2.if…else 语句
if语句只给出了条件为真是,需要执行的操作,当条件为假是,未给出相应的执行操作。
if (表达式)
{
语句1;//表达式值为真值,则执行此语句
}
else
{
语句1;//表达式值为假值,则执行此语句
}
3.else if语句
利用if和else关键字的组合,可以实现else if语句,对一系列互斥条件进行检验,从而解决较为复杂的判断和决策问题。
if(表达式1)
{
语句1;//表达式1为真,执行此语句
}
else if(表达式2)
{
语句2;//表达式2为真,执行此语句
}
...
else if(表达式n)
{
语句n;//表达式n为真,执行此语句
}
else
{
语句n+1;//前面所有判断都不成立,执行此语句
}
4.if的嵌套形式
if语句中可以包含一个或多个if语句,称之为if的嵌套。
if(表达式1)
{
if (表达式2)
{
语句块1;
}
else
{
语句块2;
}
}
else
{
if(表达式3)
{
语句块3;
}
else
{
表达式4;
}
}
4.条件运算符
条件运算符可以对一个表达式中值的真假进行检验,根据检验结果返回另外两个表达式中的一个。
max = (a > b) ? a : b;
//等效表达
if(a > b)
{
max = a;
}
else
{
max = b;
}
5.switch语句
switch是多路分支选择语句
switch (表达式)
{
case 情况1:
语句1;
break;
case 情况2:
语句2;
break;
...
case 情况n:
语句n;
break;
default:
break;
}
6.if…else语句和switch语句区别
语法的比较
- if需要配合else关键字;switch需要配合case关键字;
- if语句先对条件进行判断,而switch语句是后进行判断。
语法的比较
- if…else适用少量的检验
- switch每个case检验速度相同,default比case快。
- 高于4个检验时,使用switch语句较好。
二、循环控制
1.while语句
使用while语句可以解决当谋个条件满足时反复执行谋个循环体的问题。
while (表达式)
{
语句块(循环体);
}
//无法终止的循环被称为死循环或无限循环
2.do…while语句
在某些情况下,不论条件是否满足,都需要执行一次循环过程,可以采用do…while语句。
do
{
语句块(循环体);
} while (表达式);
/* === 执行过程 === */
// 先执行一次循环体,然后判断表达式
// 表达式为真,返回重新执行循环体语句
// 再次判断表达式,表达式为假,循环结束
while和do…while区别:
while先判断,后执行;
do…while先执行后判断。
3.for循环
for语句的一般表达式
for (表达式1; 表达式2; 表达式3)
{
语句块(循环体);
}
4.循环嵌套
while与while
while (表达式)
{
语句块;
while (表达式)
{
语句块;
}
}
do…while和do…while
do
{
语句块;
do
{
语句块;
} while (表达式);
} while (表达式);
for和for
for (表达式; 表达式; 表达式)
{
语句块;
for (表达式; 表达式; 表达式)
{
语句块;
}
}
类似嵌套形式多样。
三、转移语句
1.goto语句
goto语句为无条件转移语句,可以使程序跳到函数内部的任意一条可执行语句处。
goto关键词后面带一个标识符,该标识符是同一个函数内某条语句的标号,标号可出现在任何可执行语句的前面,并且以一个:
作为后缀。其一般形式如下:
goto 标识符;
//"下一步" or "退出"
#include<stdio.h>
int main()
{
int num;//循环变量
int putnum;//输入数值
for(num = 1;num <10;num ++)
{
printf("当前次数:%d\n",num);
do
{
printf("请输入一个数:\n");
printf("(0 exit,99 continue)\n");
scanf("%d",&putnum);
if(putnum == 0)
{
goto exit;
}
}
while (putnum != 99);
}
exit:
printf("退出程序!\n");
return 0;
}
2.break语句
有时候会遇到不管表达式检验结果如何,都需要强行终止循环,这时可以使用break语句;break语句用于终止并跳出当前循环,然后继续执行后面的程序。
break语句不能用于除循环语句和switch语句之外的其他任何语句中;另外,在多层循环嵌套下,使用break语句只能跳出当前循环。
#include<stdio.h>
int main()
{
int i;
for ( i = 0; i < 15; i++)
{
if(i == 10)
{
printf("Break here\n");
break;
}
printf("the number is:%d\n",i);
}
return 0;
}
3.continue语句
某些情况下,程序需要循环头部继续执行,而不是跳出循环,此时可以使用continue语句。
continue语句作用是结束本次循环,即跳过循环体中尚未执行的部分,直接执行下一次的循环操作。
#include<stdio.h>
int main()
{
int i;
for ( i = 0; i < 15; i++)
{
if(i == 10)
{
printf("Continue here\n");
continue;
}
printf("the number is:%d\n",i);
}
return 0;
}