C语言--分支和循环语句
前言
在C语言中,语句分为以下五类:
- 空语句
- 表达式语句
- 函数调用语句
- 复合语句
- 控制语句:分为 条件判断语句(又叫分支语句)、循环执行语句、转向语句
今天我们就要介绍的是控制语句中的分支语句和循环语句,希望大家看完有所收获。
一.分支语句
1. if语句
1.1 单分支
语法形式:
if (表达式) //表达式成立(为真)则语句执行,反之则不执行
语句;
1.2 二分支
语法形式:
if (表达式)
语句1;
else
语句2;
<注意>:默认情况下,if 和 else 后边只能跟一条语句,如果要跟多条语句,要使用大括号{},否则除第一条以外的语句将不受 if else 条件限制,发生错误。为防止错误,建议不论执行语句有多少都加{},这也是一个好的编程习惯
1.3 多分支
if语句可通过嵌套实现多分支,示例如下:
int main()
{
int num = 0;
scanf("%d", &num);
if (num == 0)
{
printf("输入的值是0\n");
}
else if (num > 0)//此处是整个if和else语句嵌入else里了
//为看起来简洁把缩进和大括号删了
{ //else if数量无限制
printf("输入的值是正数\n");
}
else
{
printf("输入的值是负数\n");
}
return 0;
}
1.4 悬空else问题
如果有多个 if 和 else,else总是跟最近的if匹配(不是跟谁对齐就和谁匹配),所以若if中嵌套了if又有else的话,要想else不与其嵌套的匹配,而和外层的匹配,要用{}分隔
错误示例:
标准写法:
2. switch语句
2.1 用法
switch是用来进行多分支选择的语句,语法形式如下:
switch(变量表达式)
{
case 常量表达式1:
语句1;
break;//看实际需要加不加,表示中断,用于终止当前代码块的执行并跳出switch语句
case 常量表达式2:
语句2;
···
case 常量表达式n:
语句n;
defaut://可有可无,当所有的case值不匹配时,执行default(表示默认)
//default通常放在最后,但实际上顺序没影响
语句n+1;
}
示例如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
switch (n % 3)
{
case 0:
printf("余数是0\n");
break;
case 1:
printf("余数是1\n");
break;
case 2:
printf("余数是2\n");
break;
}
return 0;
}
2.2 注意事项
- switch后必须是整型表达式(字符类型属于整型,因为每个字符都有它的ASCII码值,ASCII码值为整数)
- case后必须是整型常量表达式
- 当case中语句较为复杂时,可以用if进行判断
- switch,break,case,default是switch中常用关键字,continue不是switch的关键字,它是用于跳过本次循环后面的代码的
二.循环语句
1.while语句
语法形式:
while (表达式) //表达式成立(为真)则进入循环,语句执行,反之则不执行
语句; //即循环体,若想包含超过一条语句,需加上大括号{}
示例如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
//输入一个正整数,逆序打印这个数的每一位
while (n)
{
printf("%d", n % 10);//打印余数即打印最后一位
n = n / 10;//若输入为4位,此步4位变3位,继续循环直到为0即为假跳出循环
}
return 0;
}
2.do while语句
语法形式:
do
语句;//上来不管符不符合下面表达式条件都执行一次
while(表达式);//若表达式为真就会重复do···while这个循环,直至表达式为假(0)
3.for语句
for(表达式1;表达式2;表达式3)
语句;
<注意>:
- 表达式1是初始化,表达式1是判断,表达式3是调整
- 表达式间用分号;间隔
示例如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{ //计算1-100之间3的倍数的数字之和
int i = 0;
int count = 0;
for (i = 3; i <= 100; i+=3)
{
count += i;
}
printf("%d\n", count);
return 0;
}
三.区别continue break
continue: 跳出本次循环后面的代码
break: 跳出循环
continue示例如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int a = 0, b = 0;
for (a = 1, b = 1; a <= 100; a++)
{
if (b >= 20)
break;
if (b % 3 == 1)
{
b = b + 3;
continue;//continiue跳过本次循环后面的部分,if不是循环
//是跳过本次for循环后面的部分即b = b - 5
}
b = b - 5;
}
printf("%d\n", a);//打印出来的值为8
return 0;
}
break示例如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int i = 0;
while (i < 10)
{
i++;
if (i == 5)
{
break;
}
printf("%d ", i);//输出1 2 3 4
}
return 0;
}