第四章 选择结构程序设计
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);
}