C语言是结构化的程序设计语言,这里的结构指的是顺序结构、选择结构、循环结构。
1、if语句
1.1 if
if语句的语法形式如下:
if(表达式)
语句
表达式成立(为真),则执行语句;表达式不成立(为假) ,则语句不执行
在C语言中,0为假,非0为真
例子:输入一个整数,判断是否为奇数
#include <stdio.h>
int main()
{
int a = 0;
scanf("%d",&a);
if(a%2==1) //表达式a%2==1成立,执行下面的语句;如果不成立,则不执行
printf("%d是奇数",a);
return 0;
}
1.2 else
如果一个数不是奇数,那就是偶数,如果任意一个整数,我们要清楚的判断是奇数还是偶数字母表达?
这里就需要if...else语句了,语法形式如下:
if(表达式)
语句1
else
语句2
例子:输入一个整数,判断是否为奇数,如果是奇数打印是奇数,否则打印是偶数
#include <stdio.h>
int main()
{
int a = 0;
scanf("%d",&a);
if(a%2==1)
printf("%d是奇数",a);
else
printf("%d是偶数",a);
return 0;
}
1.3 if语句的嵌套
在if else语句中,else语句可以与另一个if语句连用,构成多重判断。
例子:输入一个整数,如果是正数,判断奇偶数,并输出;如果不少正数则输出:非正数
#include <stdio.h>
int main()
{
int a = 0;
scanf("%d",&a);
//外层if结构,判断正负数
if(a>0)
{
//内层嵌套,判断奇偶数
if(a%2==1)
printf("%d是奇数",a);
else
printf("%d是偶数",a);
}
else
{
printf("%d非正数",a);
}
return 0;
}
以上就是嵌套if语句的语法,有了嵌套if语句,就可以完成更复杂的逻辑判断
2、swith语句
2.1 swith语句形式
除了if语句,C语言还提供了switch语句来实现分支结构
switch语句是一种特殊形式的if...else结构,用于判断条件有多个结果的情况。它把1多重else if改成更易用、可读性更好的形式。
switch(expression)
{
case value1:statement
case value2:statement
default value1:statement
}
上面的代码,根据表达式expression不同的值,执行相应的case分支。如果找不到对应的值,就执行default分支。
注:
- switch后的expression必须的整型表达式
- case后的值,必须是整型常量表达式
2.2 if语句和switch语句的对比
例子:输入一个整数,计算除3之后的余数
if语句:
#include <stdio.h>
int main()
{
int a = 0;
scanf("%d", &a);
if (a % 3 == 0)
{
printf("整除,余数为0\n");
}
else if (a % 3 == 1)
{
printf("余数为1\n");
}
else
{
printf("余数为2\n");
}
return 0;
}
switch语句改写:
#include <stdio.h>
int main()
{
int a = 0;
scanf("%d", &a);
switch (a % 3)
{
case 0:
printf("整除,余数为0\n");
break;
case 1:
printf("余数为1\n");
break;
case 2:
printf("余数为2\n");
break;
}
return 0;
}
注意点:每一个case语句中的代码执行完成后,必须加上break,才能跳出这个switch语句
2.3 switch语句中的default
在使用switch语句的时候,我们经常遇见一种情况,比如switch后的表达式中的值无法匹配代码中的case语句的时候,这时要不就不做处理,要不就得在switch语句后加入default语句。
switch(expression)
{
case value1:statement
case value2:statement
default value1:statement
}
switch后面的expression的结果不是value1,也不是value2的时候,就会执行default子句
例子:输入1-5的数字,输出“工作日”;输入6-7,输出“休息日”;输入其他数字:输出“输入有误”
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日");
break;
case 6:
case 7:
printf("休息日");
break;
default:
printf("输入有误");
break;
}
return 0;
}
2.4 switch语句中的case和default的顺序问题
其实在switch语句中case语句和default语句是没有顺序要求的,只要你的顺序是满足实际需求就可以。
不过我们通常是把default子句放在最后处理的。
3、while循环
C语言提供了3种循环语句,while是其中一种。
while语句的语法结构和if语句非常相似
3.1 if和while对比
if (表达式)
语句;
while(表达式)
语句;
具体写个代码,对比一下:
if语句:
#include <stdio.h>
int main()
{
if (1)
printf("Hello World!!"); //if后面的条件满足,打印一次Hello World!!
return 0;
}
while语句:
#include <stdio.h>
int main()
{
while (1)
printf("Hello World!!"); //while后面的条件满足,死循环打印Hello World!!
return 0;
}
这就是他们的区别,while语句是可以实现循环效果的。
3.2 while语句的执行流程
首先上来就是执行判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执行循环语句,语句执行完后再继续判断,是否进行下一次判断。
3.3 while循环的实践
例子:在屏幕上打印1-10
#include <stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
printf("%d ", i);
i++;
}
return 0;
}
4、for循环
4.1 语法形式
for循环是三种循环中使用最多的,for循环的语法形式如下:
for(表达式1;表达式2;表达式3)
语句;//如果循环体想包含更多的语句,可以加上大括号
表达式1:用于循环变量的初始化;
表达式2:用于循环结束条件的判断;
表达式3:用于循环条件的调整
4.2 for循环的执行流程
首先执行表达式初始化循环变量,接下来就是执行表达式2的判断部分,表达式2的结果如果==0,则循环结束;表达式2的结果如果!=0则执行循环语句,循环语句执行完后,再去执行表达式3,调整循环变量;然后再去表达式2的地方执行判断,表达式2的结果是否为0,决定循环是否继续。
整个循环的过程中,表达式1初始化的部分只被执行1次。
4.3 for循环的实践
例子:在屏幕上打印1-10
#include <stdio.h>
int main()
{
int i = 1;
for (i = 1; i <= 10; i++)
{
printf("%d ", i);
}
return 0;
}
5、do...while循环
5.1 语法形式
do
语句;
while(表达式);
while和for这两种循环都是先判断,条件如果满足就加入循环,执行循环语句,如果不满足就跳出循环;
而do...while循环则是先直接加入循环体,执行循环语句,然后再执行while后的判断表达式,表达式为真,就会进行下一次,表达式为假,则不再继续循环。
5.2 while循环的执行流程
在do while循环中先执行语句,执行完语句,再去执行“判断表达式”,判断表达式的结果是·!=0,则继续循环,执行循环语句;判断表达式的结果==0,则循环结束。
所以do...while语句中循环体是至少执行一次的,这是do...while循环比较特殊的地方。
5.3 do...while循环的实践
例子:在屏幕上打印1-10
#include <stdio.h>
int main()
{
int i = 1;
do
{
printf("%d ", i);
i++;
} while (i <= 10);
return 0;
}
6、break和continue语句
在循环执行的过程中,如果某些状况发生的时候,需要提前终止循环,这是非常常见的现象。C语言中提供了break和continue两个关键字,就是应该到循环中的。
- break的作用是用于永久的终止循环,只要break被执行,直接就会跳出循环,继续往后执行。
- continue的作用是跳出本次循环continue后面的代码,在for循环和while循环中有所差异的