C语言-分支结构if-else
分支结构
用if-else语句可以实现二分支和多分支结构。
1、二分支结构和if-else语句
二分支结构主要有两种形式,流程图如下,即if-else语句和省略else的if语句。
if (表达式)
语句1;
else
语句2;
该语句的执行流程:先求解表达式,如果表达式的值为“真”,就执行语句1;否则(即表达式的值为“假”),就执行语句2。语句1和语句2总要执行一个,且只执行一个。
图(b)是用省略else的if语句实现的,该语句的一般形式是:
if (表达式)
语句1;
其执行流程:先求解表达式,如果表达式的值为“真”,就执行语句1;否则(表达式的值为“假”),则什么也不做。
例1:奇偶分家。
奇偶分家。输入一个正整数n,再输入n个非负整数,统计奇数和偶数各有多少个?
#include <stdio.h>
int main(void)
{
int count_odd, count_even, i, n, number;
count_odd = 0; /*count_odd记录奇数的个数*/
count_even = 0; /*count_even记录偶数的个数*/
printf("Enter n:");
scanf("%d", &n);
printf("Enter %d numbers:", n); /*提示输入n个数*/
for (i=1; i<=n; i++){
scanf("%d", &number);
if (number%2 != 0){ /*若number除以2的余数不是0,则为奇数*/
count_odd++; /*统计奇数的个数*/
} else {
count_even++; /*统计偶数的个数*/
}
}
printf("Odd:%d, Even:%d\n", count_odd, count_even);
return 0;
}
运行效果:
Enter n: 6 ‾ \underline{6} 6
Enter 6 numbers:23 34 324 44 2 23
Odd:2, Even:4
这里使用的就是图(a)的if-else语句,输入的6个非负整数中间可以加空格,也可以后回车键。
例2:计算平均分
统计指定数量学生的平均成绩与不及格人数。输入一个非负整数n,再输入n个学生的成绩,计算平均分,并统计不及格成绩的学生人数。
#include <stdio.h>
int main(void)
{
int count, i, n; /*count记录不及格成绩的个数*/
double score, total; /*score存放输入的成绩,total保存成绩之和*/
printf("Enter n:");
scanf("%d", &n);
total = 0;
count = 0;
for (i=1; i<=n; i++){
printf("Enter score #%d:", i); /*提示输入第i个成绩*/
scanf("%lf", &score); /*输入第i个成绩*/
total = total+score; /*累加成绩*/
if (score < 60){ /*统计不及格成绩的学生人数*/
count++;
}
}
if (n != 0){
printf("Average = %.2f\n", total/n); /*分母不能为0*/
} else {
printf("Average = %.2f\n", 0.0); /*当n为0时,平均分为0*/
}
printf("Number of failures = %d\n", count);
return 0;
}
运行效果:
Enter n:4
Enter score #1:45
Enter score #2:67
Enter score #3:87
Enter score #4:34
Average = 58.25
Number of failures = 2
该段程序的分支结构使用的是图(b)的省略else的if语句。C语言中除数不能为0,要注意变量做除数时分母不能为0。
2、多分支结构和else-if语句
else-if语句是最常用的多分支结构,这是if-else语句的级联用法,其一般形式为:
if (表达式1)
语句1;
else if (表达式2)
语句2;
...
else if (表达式n-1)
语句n-1;
else
语句n;
其流程图如下:
例1:猜数游戏
输入你猜的整数(假定1~100),与计算机产生的被猜数比较,若相等,显示猜中;若不相等,显示与被猜数的大小关系。
int main(void)
{
int mynumber = 38; /*计算机指定被猜的数*/
int yournumber;
printf("Input your number:"); /*提示输出你所采的整数*/
scanf("%d", &yournumber);
if (yournumber == mynumber){ /*若相等,显示猜中*/
printf("Good Guess!\n");
} else if (yournumber > mynumber){ /*若不等,比较大小*/
printf("Too big!\n");
} else {
printf("Too small!\n");
}
return 0;
}
运行效果:
Input your number:35
Too small!
Input your number:38
Good Guess!
这里使用了else-if语句来判断多路分支。多路分支只执行一路。
例2:阶梯水费
分段计算居民的水费。按以下公式计算水费,增加了用水量x小于0的情况,确保程序运行时出现误输入的情况,放置计算出错。
y = f ( x ) = { 0 x < 0 4 x 3 0 ≤ x ≤ 15 2.5 x − 10.5 x > 15 y=f(x) = \begin{cases}0 & x<0 \\ \frac{4x}{3} & 0\leq x \leq 15 \\ 2.5x-10.5 & x > 15 \end{cases} y=f(x)=⎩⎪⎨⎪⎧034x2.5x−10.5x<00≤x≤15x>15
#include <stdio.h>
int main(void)
{
double x, y;
printf("Enter x:");
scanf("%lf", &x); /*输入double型数据用%lf*/
if (x < 0){
y = 0; /*满足x<0*/
} else if (x <= 15){
y = 4*x/3; /*不满足x<0,但满足x<=15,即满足0<=x<=15*/
} else{
y = 2.5*x-10.5; /*既不满足x<0,也不满足x<=15,即满足x>15*/
}
printf("f(%.2f) = %.2f\n", x, y);
return 0;
}
运行结果:
Enter x:-0.8
f(-0.80) = 0.00
Enter x:4.6
f(4.60) = 6.13
Enter x:43.21
f(43.21) = 97.53
参考 C语言程序设计(第4版)/何钦铭,颜晖
例题及课后习题参考程序https://gitee.com/sgxgitee/mooc-c
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)