C语言第四章自述2

第四章 选择结构程序设计

4.2 if语句

4.2.1 if语句格式
选择结构算法的流程图

在这里插入图片描述
在这里插入图片描述

if语句选择结构一般形式为:if(逻辑量) 语句1 [else 语句2]
if和else是构成if语句的关键字,语句中的逻辑量是选择结构的条件,“[ ]”表示else分支可以省略。语句中的逻辑量应对于选择结构的条件P,语句1对应分支A,语句2对应于分支B。语句2对应于分支B。if 语句执行时,首先判断括号里的逻辑量,如果逻辑量为1,则执行语句1;如果逻辑量为0,则执行else分支后的语句2。
其中,语句1和语句2都只能是单条语句,如果在逻辑量。为真或为假的分支中需执行多个操作,应该使用复合语句将多个操作构成-条语句。语句1是选择结构必须的语句,else 分支可有可无。i试( )~else语句中虽然有两个分支,但在具体执行时,每次只执行其中的一个分支,在语法上是一条语句。在使用if语句时,应注意构成if语句的各个部分和N-S流程图的关系,同时注意构成if语句的各个部分的限定。
例1、求三角形面积:

在这里插入图片描述

#include<math.h>
#include <stdio.h>
void main()
{
	float a, b, c, s, area;
	scanf_s("%f%f%f", &a, &b, &c);
	if (a + b > c&& b + c > a&& a + c > b)
	{
		s = (a + b + c) / 2;
		area = sqrt(s * (s - a) * (s - b) * (s - c));
		printf("a=%7.2f,b=%7.2f,c=%7.2f,s=% 7.2f\n", a, b, c, s);
		printf("area=%7.2f\n", area);
	}
	else
	{
		printf("Data Error!");
	}
}
例1、根据a,b关系输出c:

在这里插入图片描述

#include <stdio.h>
void main()
{
	int a, b, c;
	scanf_s("%d%d%d", &a, &b, &c);
	if (a != b)
	{
		a = a + b;
	    c = a + b;
	}
	printf("a=%d,b=%d,c=%d",a,b,c);
}
4.2.2条件表达式:条件表达式是实现双分支选择结构的表达式
1.条件运算符

条件运算符由两个符号“?" 和“:”复合而成,是C语言中的唯一-的一 一个三目运算符,条件运算符的第1目书写在“?” 之前,是逻辑量,条件运算符的第2目书写在“?” 和“:”中间,是数据,条件运算符的第3目书写在“:”之后,是数据。条件运算符的优先级只比赋值运算符和逗号运算符高,结合性为右结合。

2.条件表达式

用条件运算符将运算对象连接起来的符合C语言规则的表达式称为条件表达式。条件表达式的运算过程为:先判断第1目逻辑量,如果逻辑量为真,选取第2目的结果作为整个表达式的值,否则选取第3目结果作为整个表达式的值。
假定有变量定义:int a=3,b=2, max;
表达式“max= =(a>b)?a:b”运算时,运算顺序为:判断逻辑量a>b,得到结果为逻辑量1; 运算条件表达式(a>b)?a:b,得到结果3;运算max=3,得到变量max的值为3,整个表达式的值也为3。条件表达式中存在类型的自动转换,条件表达式的值的类型是第2目和第3目中类型较高的运算对象的类型。例如:表达式1?3:4.5的值为3.0而不是3。

//ASCII码值的转换
//第一种
#include <stdio.h>
void main()
{
	char c;
	printf("Input c:");
	c = getchar();
	if (c >= 'a' && c <= 'z') c = c - 32;
	putchar(c);
}
//第二种
#include <stdio.h>
void main()
{
	char c;
	printf("Input c:");
	c = getchar();
	c=(c >= 'a' && c <= 'z')? c-32:c;
	putchar(c);
}
/*用条件表达式代替if( )~ else语句实现简单的双分支选择结构时,可简化程序的书写。
实际应用中,并不是所有的if( )-~else语句都适合用条件表达式来替换。如果if( )- else语句中的if分支和else分支都是由多个操作组成,
或者if语句内部嵌套了其他一些语句时,如果用条件表达式替换,会使得程序的结构不清晰,选择结构的分支混乱,降低程序的可读性。*/
3.条件表达式运算短路

条件表达式中的第2目和第3目并不是每次运算时都会被执行,如果第1目表示的逻辑量为真,则计算第2目的值,第3目被短路;逻辑量为假时,计算第3目的值,第2目被短路。运算时将第2目、第3目当做独立的表达式对待。

4.2.3 if语句的嵌套(多分支解决问题)
一般形式:
if (逻辑量1)
 if (逻辑量2)语句1;
 else	语句2;
 else if (逻辑量3)	语句1;
 else	语句2;

标题

例:如下解决问题相同,思路不同代码

在这里插入图片描述


#include <stdio.h>
#include <math.h>
void main()
{
	float x, a;
	printf("输入x的值:");
	scanf_s("%f", &x);
	if (x > 6)
		a = 2 * x * x + 3*sin(x);
	else
	{
		if (x > 0)
			a = sqrt(x + 2);
		else
		{
			if (x >= -3)
				a = 3 * x * x * x;
			else
			{
				a = cos(x) + 5;
			}
		}
	}
	printf("x=%f", a);
}


#include <stdio.h>
#include <math.h>
void main()
{
	float x, a;
	printf("输入x的值:");
	scanf_s("%f", &x);
	if (x>6)
		a = 2 * x * x + 3 * sin(x);
	if (x < 0&&x<=6)
		a = sqrt(x + 2);
	if (x>=-3&&x<=0)
		a = 3 * x * x * x;
	if (x<-3)
		a = cos(x) + 5;
	printf("x=%f", a);
}
#include <stdio.h>
#include <math.h>
void main()
{
	float x, a;
	printf("输入x的值:");
	scanf_s("%f", &x);
	if(x>0)
		if (x>6)
			a = 2 * x * x + 3 * sin(x);
		else
		{
			a = sqrt(x + 2);
		}
	else
	{
		if (x<-3)
			a = cos(x) + 5;
		else
		{
			a = 3 * x * x * x;
		}
	}
	printf("x=%f", a);
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值