分支语句和循环
1+2; //在c语言中我们以分号作为语句的分隔,隔开的就是一条语句
在C语言中程序是按顺序执行的,即函数中的第一个语句先执行,接着是第二个语句,依此类推。
但在实际运用中往往需要用选择和循环来执行某件事,由此诞生了分支语句和循环。
分支语句
if
if
语句的语法如下,if在英文中就表示如果
的意思,在下面语法中如果表达式满足则执行语句
;if else
中表达式为真执行语句1,不满足则执行语句2。多分支同理。
if(表达式)
{
语句;
}
例1:
#include <stdio.h>
int main()
{
int a = 0; //初始化
scanf("%d", &a); //从键盘输入b的值
if (a == 1) //判断a是否等于1
{
printf("a等于1");
}
return 0;
}
if…else
if(表达式)
{
语句1;
}
else
{
语句2;
}
例2:
#include <stdio.h>
int main()
{
int b = 0;
scanf("%d", &b); //从键盘输入b的值
if (b == 1)
{
printf("b等于1"); //等于1时打印
}
else
{
printf("b不等于1"); //不等于1时打印
}
return 0;
}
if…else if…else
//多分支
if(表达式1)
{
语句1;
}
else if(表达式2)
{
语句2;
}
else
{
语句3;
}
例3
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b); //键盘输入两个整数,中间用空格隔开
if (a > b)
{
printf("%d比%d大\n",a,b); //a比b大时打印
}
else if (a < b)
{
printf("%d比%d大\n",b,a); //b比a大时打印
}
else
{
printf("%d和%d相等\n",a,b); //a和b相等时打印
}
return 0;
}
如果表达式的结果为真,则语句执行。
0表示假,非0表示真。
一对{ }就是一个代码块
switch
语法如下:
switch(整形表达式)
{
case 整型常量表达式:
语句;
break;
}
break语句的实际效果是把语句列表划分为不同的部分
break 是C语言中的一个关键字,专门用于跳出 switch 语句。所谓“跳出”,是指一旦遇到 break,就不再执行 switch 中的任何语句,包括当前分支中的语句和其他分支中的语句;也就是说,整个 switch 执行结束了,接着会执行整个 switch 后面的代码。
任务描述
五级制成绩表示法可以这样来理解,A代表[90-100]、B代表[80-90)、C代表[70-80)、D代表[60-70)、E代表[0-60)。 给出五级制成绩(一个字符),请输出这个字符所代表的分数范围。
#include <stdio.h>
int main()
{
char score;
scanf("%c", &score);
switch (score) {
case 'A':
printf("90分以上\n");
break;
case 'B':
printf("80到90分\n");
break;
case 'C':
printf("70到80分\n");
break;
case 'D':
printf("60到70分\n");
break;
case 'E':
printf("60分以下\n");
break;
default:
printf("输入错误\n");
}
return 0;
}
default子句
- default语句并不只能写到最后,可以写在任何一个case标签可以出现的位置。
- 如果表达的值与所有的case标签的值都不匹配,此时执行default语句后面的。
- 每个switch语句中只能出现一条default子句。
编程好习惯:
在每个 switch 语句中都放一条default子句是个好习惯,甚至可以在后边再加一个 break 。
循环语句
while
在上面我们已经掌握了,if
的用法,当条件满足的情况下,if语句后的语句执行,否则不执行。但是这个语句只会执行一次。
在生活中很多的实际例子是:同一件事我们需要完成很多次。在C语言中我们引入了:while
语句,可以实现循环。
语法结构如下:
while(表达式)
循环语句;
例1:
我们借助在屏幕上打印1-10的数字来熟悉while用法。
#include <stdio.h>
int main()
{
int i = 0;
while (i <=10) //当i小于10时进入循环
{
printf("%d ", i); //执行一次打印一个i
i ++ ; //执行一次后i+
}
return 0;
}
下面我们再来了解while语句中的break和continue
- break介绍
int main()
{
int i = 0;
while (i <= 10)
{
if (i == 6) //当程序运行到i=6时跳出当前循环
break;
printf("%d ", i); //最后屏幕上打印0 1 2 3 4 5
i++;
}
return 0;
}
在循环中只要遇到break,就停止后期的所有循环,直接终止循环。
continue介绍
int main()
{
int i = 1;
while (i <= 10)
{
if (i == 6)
continue;
printf("%d ", i); //1 2 3 4 5
i++;
}
return 0;
}
continue出现的地方就会跳过一次后续代码。
int main()
{
int i = 1;
while (i <= 10)
{
i = i + 1;
if (i == 5)
continue;
printf("%d ", i); // 2 3 4 6 7 8 9 10 11
}
return 0;
}
总结: continue在while循环中的作用就是:
continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会在执行,而是直接跳转到while语句的判断部分。进行下一次循环的入口判断。
for循环
for循环是一种常用的循环结构,具有灵活的语法和强大的功能。
for循环的语法结构如下:
for(表达式1,表达式2,表达式3)
循环语句
- 表达式1为初始化部分,用于初始化循环变量的;
- 表达式2为条件判断部分,用于判断循环的终止;
- 表达式3为调整部分,用于循环条件的调整,趋向于终止条件;
例1:
使用for循环在屏幕上打印1-10的数字。
int main()
{
int i = 1;
//i=1 初始化,i<=10 判断部分,i++ 调整部分
for (i = 1; i<=10;i++)
{
printf("%d ", i); //1 2 3 4 5 6 7 8 9 10
}
return 0;
}
do while循环
do语句的语法:
do
循环语句;
while(表达式);
该循环至少执行一次,使用的场景有限,所以不经常使用。
int main()
{
int i = 10;
do
{
printf("%d\n", i); //10
} while (i < 10);
return 0;
}
do while循环中的break和continue
int main()
{
int i = 10;
do
{
if (5 == i)
break;
printf("%d\n", i);
} while (i < 10);
return 0;
}
goto语句
C语言无特殊情况,往往是从main函数开始,一条一条往下执行语句的,但当程序遇到goto
时,可以无条件转移到同一函数内的被标记的语句。
goto DestName;
...
...
DestName:statement;
从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程,例如一次跳出两层或多层循环。
这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。
简单示例:
int main()
{
int i = 0;
for (i = 0; i < 10; i++)
{
if (i = 5) //当i=5时跳到Print后续语句;从而结束循环
{
goto Print;
}
Print:
printf("当前的i为%d\n", i);
return 0;
}
}
注意: 在任何编程语言中,都不建议使用 goto 语句。因为它使得程序的控制流难以跟踪,使程序难以理解和难以修改。任何使用 goto 语句的程序可以改写成不需要使用 goto 语句的写法。