目录
分支语句与循环语句
C语言是一门结构化的程序设计语言,其结构化主要体现在顺序结构、选择结构和循环结构这三者上;不难发现实际生活中很多事情,或多或少都可以划分成以上三种结构。同样,程序设计也可以划分为以上三种结构,这样做所带来的影响便是所设计的程序可以执行各种各样的功能。
这三种结构想要顺利的执行必然离不开控制语句,控制语句可分为条件判断语句、循环执行语句以及转向语句。其中分支结构主要涉及条件判断语句(if 语句、Switch语句)、循环结构则涉及循环执行语句(do while语句、while语句、for语句);转向语句在两种结构中都可使用。
分支语句
在具体介绍之前有必要先了解一下关系、条件以及逻辑这三种操作符
关系操作符
符号 | 意义 |
---|---|
> | 大于运算符 |
>= | 大于等于运算符 |
< | 小于运算符 |
<= | 小于等于运算符 |
== | 相等运算符 |
!= | 不相等运算符 |
以下是相关例子
1. a > b
2. a >= b
3. a < b
4. a <= b
5. a == b
6. a !=b
条件操作符(三目操作符)
1 exp1 ? exp2 : exp3 //先对exp1进行判断,如果为真则执行exp2,否则执行exp2
逻辑操作符
符号 | 含义 |
---|---|
! | 逻辑取反运算符(改变单个表达式的真假) |
&& | 与运算符(就是并且的意思,两侧表达式同真则真,否则为假) |
l l | 或运算符(就是或者的意思,两侧表达式同假则假,否则为真) |
以上三种操作符起着条件控制的作用,符合条件则为真,执行相对应的操作;不符合条件则为假,要么执行特定的操作,要么直接退出。其中,通常使用0表示假,非0为真。
1. if语句
//if 语句的语法形式
if (表达式) //表达式为真时,执行内部语句;否则没有任何操作
{
语句
}
//输入一个整数,判断其是否为奇数
#include <stdio.h>
int main()
{
int number = 0;
scanf("%d", &number);
if(number % 2 == 1 )
printf("%d 是奇数\n", number);
return 0;
}
1.2. else语句
else语句执行的是if语句中不符合表达式条件的语句
//if...else 语句语法形式
if(表达式)
{
语句1
}
else
{
语句2
}
例:输入一个整数,判断是否为奇数,如果是则输出是奇数,否则输出偶数
#include <stdio.h>
int main()
{
int number = 0;
scanf("%d", &number);
if(number % 2 == 1 )
printf("%d 是奇数\n", number);
else
printf("%d 是偶数\n", number);
return 0;
}
1.3. 分支语句中出现多条语句
if和else语句中默认只控制一条语句,若出现多条语句时则要加上"{ }"控制
#include <stdio.h>
int main()
{
int number = 0;
scanf("%d", &number);
if(number % 2 == 1 ) //if后使用{ }控制多条语句,也叫做代码块,或者复合语句
{
printf("%d 是奇数\n", number);
printf("每天多挣 %d 倍小钱钱\n",number);
}
else
{
printf("%d 是偶数\n", number);
printf("每天多挣 %d 倍小钱钱\n",number);
}
return 0;
}
1.4. 嵌套if(if else语句中,else与if语句连用,构成多重判断)
#include <stdio.h>
int main()
{
int number = 0;
scanf("%d", &number);
if(number == 0 )
{
printf("输入的数字是0\n");
}
/*
else
{
if(number > 0)
{
printf("输入的数字是正数\n");
}
}
*/
else if(number > 0) //这里的if相当于嵌套在else语句中,形成嵌套结构
{
printf("输入的数字是正数\n");
}
else
{
printf("输入的数字是负数\n");
}
return 0;
}
1.5. 悬空else
若果有多个if和else连用,则采用就近原则即else与最近的if匹配
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1)
if(b == 2)
printf("hehe\n");
else
printf("haha\n");
return 0;
//最总的结果是什么也没打印输出,因为else并不是跟第一个if连用,而是跟第二个if连用
}
2.switch 语句
分支语句除if……else语句外,还有Switch语句,Switch语句用于判断条件有多个结果的情况。
//Switch语句语法形式
switch(表达式){ // 表达式必须为整形表达式
case value1: // case后的值必须是整型常量表达式
语句
break; //case后语句执行完必须加上break,否则会出现击穿现象;也可以根据所要实现的操作适当的省略
case value2:
语句
break;
……
default : //当所有case都没执行则会执行此语句
语句
break;
}
if……else语句和Switch语句是可以相互转换的
#include <stdio.h>
int main()
{
/*if……else语句实现
int number = 0;
scanf("%d", &number);
if(number %3 == 0 )
{
printf("整除,余数为0\n");
}
else if(number % 3 == 1)
{
printf("整除,余数为1\n");
}
else
{
printf("整除,余数为2\n");
}
*/
/* Switch语句实现*/
int number = 0;
scanf("%d", &number);
switch(number % 3)
{
case 0:
printf("整除,余数为0\n");
break;
case 1:
printf("整除,余数为1\n");
break;
case 2:
printf("整除,余数为2\n");
break;
}
return 0;
}
[ 注] Switch语句中case语句与default语句没有顺序的要求,但通常把default语句在最后。
循环结构
循环结构主要由循环语句控制,循环语句分为while循环、do……while循环和for循环
while循环
//while循环语法形式
while(表达式)
语句;
/*while循环执行顺序:先进行表达式判断,如果表达式的值为0,则结束循环;
反之则执行循环语句,之后继续进行表达式判断直至表达式为0不满足条件退出循环为止*/
例:在屏幕上打印1~10的值
#include <stdio.h>
int main()
{
int i = 1;
while (i<=10)
{
printf("%d ", i);
i++;
}
return 0;
}
执行结果:
do……while循环
//do……while循环语法形式
do
{
语句;
}while(表达式);
//do……while循环会先执行一次循环体,在进行表达式判断
例:在屏幕上打印1~10的值
#include <stdio.h>
int main()
{
int i = 1;
do{
printf("%d ", i);
i++;
}while(i <= 10);
return 0;
}
执行结果:
for 循环
//for循环语法形式
for(表达式1; 表达式2; 表达式3)
{
语句;
}
/*for循环中表达式1是初始条件,只执行一次;表达式2是判断条件,判断是否继续执行循环;表达式3是循环变量的调整
for循环的执行顺序是表达式1 ==> 表达式2 ==> 语句 ==> 表达式3 ==> 表达式2 ==> 语句 ==> 表达式3……直至不满足循环条件*/
例:在屏幕上打印1~10的值
#include <stdio.h>
int main()
{
int i = 0;
for (i = 1; i <= 10; i++)
{
printf("%d ", i);
}
return 0;
}
执行结果:
- for循环与while循环的对比
for循环和while循环都有初始化、判断以及调整三部分,但是二者的执行顺序各有不同;这也意味着for循环和while循环可以相互改写,只需修改初始化、判断以及调整的执行顺序即可。