C语言中的选择结构语句

本文详细介绍了C语言中if语句的单分支、双分支和多分支结构,包括嵌套使用实例,以及switch语句的多分支条件判断,通过实例演示了如何根据输入判断字符类型和计算商。重点讲解了条件判断在程序设计中的关键作用和switch语句的高效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C语言中,选择结构语句可分为为if语句和switch语句

if语句的三种形式:

if 语句   单分支结构

if...else 语句   双分支结构

if...else  if...else语句   多分支结构

if 语句 单分支结构

如何判断一个数为正数?

语法格式

if(表达式)

{

        语句块

} 

如果表达式的值为真,则执行语句块。

在程序设计中处理选择问题的关键在于进行条件判断,即如果满足某种条件,就进行相应的处理

if...else语句 双分支结构

语法格式

if(表达式)
{
    语句块1
}
else
{
    语句块2
}

 表达式的值为真,则执行语块1,否则执行语块2.

#include<stdio.h>
int main()
double x,y;有错误看看
double result;
printf("请输入被除数:");
scanf("%lf",&x);
printf("请输入除数:");
scanf("%lf",&y);
if(y!=0)
{
	result=x/y;
	printf("两个数的商:%.2f\n",result);
}
else
{
	printf("除数为零!\n");
}

if...else if ...else语句  多分支结构

if(表达式1){ 语句块1 }
else if(表达式2){ 语句块2 }
else if(表达式3) { 语句块3 }
......
else if(表达式n){ 语句块n }
else { 语句块m }

例:字符类型判断

从键盘键入任意一个字符,判断该字符是英文字母(不区分大、小写)、数字字符还是其它字符,并分别输出相应的信息。
若键入字母,则屏幕显示It is an English character.
若键入数字,则屏幕显示It is a digit character.
若输入其它字符,则屏幕显示: It is other character.

#include<stdio.h>
int main()
{
	char c;
	printf("Input a character:");
	scanf("%c",&c);
	if(c>='a' && c<='z' || c>='A' && c<='Z')
		printf("It is an English character.\n");
	else if(c>='0' && c<='9')
		printf("It is a digit character.\n");
	else
		printf("It is other character.\n");
	return 0;
}

if语句的嵌套

在if语句中又包含一个或多个if语句成为if语句的嵌套。

4种形式:

if(表达式1)
    if(表达式2)    语句1
    [else    语句2]  




if(表达式1)
    if(表达式2)    语句1
    [else    语句2]
else    语句3




if(表达式1)    语句1
else
    if(表达式2)    语句2
    [else    语句3]



if(表达式1)
    if(表达式2)    语句1
    [else    语句2]
else
    if(表达式3)    语句3
    [else    语句4]


使用if语句嵌套的时候要注意if和else的配对关系,if语句中如果 花括号中仅有一条语句时可以省略花括号  。但在if语句嵌套时,省略花括号可能导致程序运行结果与预期不符,这是由于if语句中else词句不能作为独立语句单独使用,它只能是if语句的一部分,和if语句配对使用。

临近原则:else和if成对出现,并且总是与最近的未配对的if配对

建议:在if后面使用{}将要执行的语句括起来,避免程序代码混乱

例:有一函数

编写程序,要求输入一个x后,输出y值。

算法1:使用单分支的if语句

输入x

若x<0,则y=-1

若x=0,则y=0

若x>0,则y=1

输出y

#include<stdio.h>
int main()
{
	int x,y;
	printf("please input x:");
	scanf("%d",&x);
	if(x<0)	y=-1;
	if(x==0)	y=0;
	if(x>0)	y=1;
	printf("x=%d,y=%d\n",x,y);
	return 0;
}

算法2:使用多分支的if语句

输入x

若x<0,则y=-1

否则若x=0,则y=0

否则y=1

输出y

#include<stdio.h>
int main()
{
	int x,y;
	printf("please input x:");
	scanf("%d",&x);
	if(x<0)	y=-1;
	else if(x==0)	y=0;
	else y=1;
	printf("x=%d,y=%d\n",x,y);
	return 0;
}

算法3:嵌套在if子句中

输入x

若x!=0

        若x<0,则y=-1

        否则,y=1

否则,y=0

输出y

#include<stdio.h>
int main()
{
	int x,y;
	printf("please input x:");
	scanf("%d",&x);
	if(x!=0)
		if(x<0)	y=-1;
		else	y=1;
	else	y=0;
	printf("x=%d,y=%d\n",x,y);
	return 0;
}

算法4:嵌套在else子句中

输入x

若x<0,则y=-1

否则

        若x=0,则y=0

        否则,y=1

输出y

#include<stdio.h>
int main()
{
	int x,y;
	printf("please input x:");
	scanf("%d",&x);
	if(x<0)	y=-1;
	else
		if(x==0)	y=0;
		else	y=1;
	printf("x=%d,y=%d\n",x,y);
	return 0;
}

switch语句--多分支条件判断语句

当问题分支较多时,使用if语句来实现将会使程序冗长且可读性低

switch语句是多分支条件判断语句,,它能够根据表达式的值从多个分支中选择一个执行的分支。

switch语句的一般形式

switch(表达式)      整数、字符枚举类型
{
    case    常量表达式1:语句块1;break;
    case    常量表达式2:语句块2;break;
    ......                                 语句块互不相同
    case    常量表达式n:语句块n;break;
    default:  语句块n+1

执行流程:
首先计算表达式的值,与各个case后的常量表达式的值比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。
如表达式的值与所有case后的常量表达式均不相同,则执行default后的语句。
如:

#include<stdio.h>
int main()
{
	int a;
	printf("Input integer number:");
	scanf("%d",&a);
	switch(a)
	{
		case 1:printf("Monday\n");break;
		case 2:printf("Tuesday\n");break;
		case 3:printf("Wednesday\n");break;
		case 4:printf("Thursday\n");break;
		case 5:printf("Fridday\n");break;
		case 6:printf("Saturdday\n");break;
		case 7:printf("Sunady\n");break;
		default:printf("error\n");
	}
	return 0;
}

在使用switch语句时应注意以下几点:
①表达式的值为整数、字符、枚举类型。
②常量表达式的值必须互不相同,否则会出现分支矛盾的现象。
③case后 面的常量表达式只起标号作用,而不起条件判断作用,即“只是开始执行处的入口标
号”。一般情况下需用break语句跳出switch语句。若没有break语句,则会一直运行到结束或出现break语句。可将上述代码的break全部删除
④语句块可以是一条语句,或复合语句,可以不用花括号{}。
⑤各个case和default出现的先后次序,并不影响执行结果,习 惯上将default子句放在switch
的末尾。
⑥多个case标号可共 用一组执行语句。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值