一、分支语句(if、switch)
1、if分支语句
if(<表达式>)
<语句>
eg:if(x>y)
printf("%d",x);
if(<表达式>)
<语句1>
else
<语句2>
eg:if(x>y)
printf("%d",x);
else
printf("%d",y);
if(<表达式1>)
<语句1>
else if(<表达式2>)
<语句2>
else
<语句3>
/*<1> if()一般为逻辑表达式或者关系表达式
<2>if 语句中要写多条语句时,要用花括号括起来
eg:if(a+b>c && b+c>a && a+c>b)
{
s=0.5*(a+b+c);
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("area=%6.2f",area);
}
else
printf("It's not a trilateral");
if语句的嵌套:
if(条件1)
if(条件2) 语句1
else 语句2
else
if(条件3) 语句3
else 语句4
注意if与else的配对关系,从最内层开始,else总是与它上面最近的未配对的if配对
eg:if(条件1)
if(条件2)
else //即使else与第一个if对齐,但实际上它与第二个if配对,因为他们相距最近
if(条件3)
else
上述语句就相当于
if(条件1)
{
if(条件2)
else
{
if(条件3)
else
}
}
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
if (a == 1)//!!!注意不能写成a=1
if (b == 2)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
很多人可能认为此程序运行结果为haha,但实际上else与第二个if配对,由于第一个if条件不满足,因此运行结果什么都不打印
2、switch分支语句
switch语句是一种特殊的if...else结构,用于判断条件有多个结果的情况
***switch后的表达式必须是整型表达式
case后的值,必须为整形常量表达式
例如:根据学生成绩打印学生成绩等级,程序如下
#include <stdio.h>
int main()
{
int score=85, grade;
if (score < 60 && score >0)
{
grade = 5;
}
else
{
grade = score / 10;
}
switch (grade)
{
case 9: printf("优秀\n");
case 8: printf("良好\n");
case 7: printf("中等\n");
case 6: printf("及格\n");
case 5: printf("不及格\n");
default:printf("错误\n");
}
return 0;
}
注意:case和后面的数字之间必须有空格
如果我们一开始输入score的值为85,我们期望打印的是良好,那么我们来看运行结果
可以看到,程序将依次打印出这些等级,达不到我们的预期,为了解决这种问题,可以在执行完一个case语句后面加上一个break语句,从而跳出switch语句
switch(grade)
{
case 9: printf("优秀\n");
break;
case 8: printf("良好\n");
break;
case 7: printf("中等\n");
break;
case 6: printf("及格\n");
break;
case 5: printf("不及格\n");
break;
default: printf("错误\n");
}
修改之后,如果输入成绩85,则只打印良好
在switch语句中case子句和default子句没有顺序要求,不过通常情况下我们将default子句放在后面
二、循环语句(while,do-while,for)
1、while循环(先判断条件,再循环)
while循环语句实现“当型”循环结构
一般形式:while(<表达式>) //表达式值为非0时,执行while语句中的内嵌套语句
<语句>
练习:在屏幕上打印1-10的数
#include <stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
printf("%d ", i);
i++;
}
return 0;
}
打印结果如下
例如:计算10!
首先我们先来定义两个变量i和product,i为循环变量,用来表示每次乘的数值,也用来控制循环次数;product用来存放连乘值,初始值都设定为1。进入循环后先判定“i<=10”的条件,条件成立则执行product*i,做连乘,之后再做i=i+1,本次循环结束后,让i与10进行比较,如果i<=10,则在执行两条循环语句,重复到i>10为止。
#include<stdio.h>
int main()
{
int i=1,product=1;
while(i<=10)
{
product=product*i;
i++;
}
printf("%d\n",product);
return 0;
}
执行结果如下:
2、do-while循环(先进循环体,再判断条件)
“直到型”循环语句的一般形式为
do <语句>
while (<表达式>); //注意此处要加分号
语句的功能是:先执行do 后面的语句,然后判断表达式,当表达式的值为非0时,返回重新执行该语句,如此反复,直到表达式的值等于0时结束循环
例:计算10!
#include <stdio.h>
int main()
{
int i = 1, product = 1;
do
{
product = product * i;
i++;
} while (i <= 10);
printf("%d", product);
return 0;
}
打印结果如下:
3、for循环
循环结构的一般形式为:
for(<表达式1>;<表达式2>;<表达式3>)
<语句>;
while循环与for循环的对比
for循环的三个部分非常集中,便于代码的维护
例:计算1-100之间3的倍数的数字之和
1-100数字要找出3的倍数,所以我们要使用循环,见下面的代码:
#include <stdio.h>
int main()
{
int i = 0, sum = 0;
for (i = 1; i <= 100; i++)
{
if (i % 3 == 0)
sum = sum + i;
}
printf("%d", sum);
return 0;
}
这样的代码显然还不够高效,如果我们直接产生3的倍数,然后求和效率也会更高一点,代码如下:
#include <stdio.h>
int main()
{
int i = 0, sum = 0;
for (i = 3; i <= 100; i+=3)
{
sum = sum + i;
}
printf("%d", sum);
return 0;
}
4、多重循环的嵌套
例:找出100-200之间的素数,并打印出来
首先我们得有100-200之间的数,在这里可以使用循环
假设要判断i为素数,可以用2到i-1之间的数去除i,要产生2到i-1之间的数,也可以使用循环
如果2到i-1之间的数都不能整除i,则i为素数
#include <stdio.h>
int main()
{
int i = 0, j = 0;
int f = 1;//假设i是素数
for (i = 100; i <= 200; i++)//循环产生100-200之间的数字
{
for (j = 2; j <= i - 1; j++)//循环产生2到i-1之间的数字
if (i % j == 0)
{
f = 0;
break;
}
if (f = 1)
printf("%d ", i);
}
return 0;
}
运行结果如下:
分支与循环就讲到这里啦,欢迎大家在评论区多提意见哦~