C语言-分支结构if-else

用if-else语句可以实现二分支和多分支结构。

1、二分支结构和if-else语句

二分支结构主要有两种形式,流程图如下,即if-else语句和省略else的if语句。

图(a)是if-else语句实现,其一般形式为:
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的值为“真”,则执行语句1,并结束整个if语句的执行,否则,求解表达式2......最后的else处理给出条件都不满足的情况,即表达式1、表达式2......表达式n-1的值都为“假”时,执行语句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.5x10.5x<00x15x>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

  • 7
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值