随风而动,随遇而安......
C语言表达式与if语句-学习七
01/28
本文最后更新于
2022年08月13日,已超过
783天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!
1、关系运算符和关系表达式
关系运算符
运算符 | 描述 | 实例 (A=10, B=20) |
---|---|---|
== | 检查两个操作数的值是否相等,如果相等则条件为真。 | (A == B) 为假。 |
!= | 检查两个操作数的值是否相等,如果不相等则条件为真。 | (A != B) 为真。 |
> | 检查左操作数的值是否大于右操作数的值,如果是则条件为真。 | (A > B) 为假。 |
< | 检查左操作数的值是否小于右操作数的值,如果是则条件为真。 | (A < B) 为真。 |
>= | 检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。 | (A >= B) 为假。 |
<= | 检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真。 | (A <= B) 为真。 |
表达式:
- 算术表达式
- 关系表达式
- 逻辑表达式
- 赋值表达式
- 字符表达式
算术运算符、关系运算符、赋值运算符优先级比较
关系表达式
- 左结合性
- 定义:用关系运算符将两个表达式连接起来的式子。
- 一般形式:
表达式
关系运算符
表达式
关系表达式的值是一个逻辑值,即“真”或“假”。1代表真,0代表假;一个非零的数值认作为“真”。
逻辑运算符和逻辑表达式
3种逻辑运算符:
&&
逻辑与||
逻辑或!
逻辑非
说明:
&&
和||
是双元/目运算符,它要求有两个运算!
是一元/单目运算符,它要求有一个运算量。
例如:
(a>b) || (x>y)
!(a>b)
优先级比较
逻辑表达式
- 一般形式:
表达式
逻辑运算符
表达式
运算规则:
- 只有在必须执行下一个表达式才能求解时,才求解该表达式(即并不是所有的表达式都被求解)。
- 对于逻辑与运算,如果第一个操作数被判定为“假”,系统不再判定或求解第二操作数。
- 对于逻辑或运算,如果第一个操作数被判定为“真”,系统不再判定或求解第二操作数。
例子
计算下列的结果
#include <stdio.h>
void main() {
char c = 'k';
int i = 1, j = 2, k = 3;
float x = 3e+5, y = 0.85;
printf("%d,%d\n", !x * !y, !!!x);
printf("%d,%d\n", x ||j && j - 3, i < j && x < y);
printf("%d,%d\n",i==5 && c &&(j=8),x+y||i+j+k);
}
判断用year表示的某一年是否是闰年。
#include <stdio.h>
void main() {
int year;
scanf_s("%d", &year);
printf("%d\n", year % 4 == 0 && year % 100 != 0 || year % 400 == 0);
}
if语句
- if语句的作用:用来判定所给定的条件是否满足,并根据判定的结果(真或假)决定执行给出的两种操作之一。
if语句有三种基本形式。
- if
- if else
- if else if
前二种形式的if语句一般都用于两个分支的情况。
有多个分支选择时,可采用if-else-if语句。
例子
输入两个数a,b,判断并输出其中较大的数。
- if
#include <stdio.h>
void main() {
int a, b, max;
scanf_s("%d %d", &a, &b);
max = a;
if (max < b) max = b;
printf("max=%d\n", max);
}
- if else
#include <stdio.h>
void main() {
int a, b, max;
scanf_s("%d %d", &a, &b);
if (a > b)
max = a;
else
max = b;
printf("max=%d\n", max);
}
例5:已知百分制成绩mark,显示对应的五级制成绩。
90—100优秀
80—89良好
70—79中等
60—69及格
<60不及格
- if else if
#include <stdio.h>
void main() {
double score;
printf("请输入分数:\n");
scanf_s("%lf", &score);
if (score < 60)
printf("(不及格)\n");
else if (score < 70)
printf("(及格)\n");
else if (score < 80)
printf("(中等)\n");
else if (score < 90)
printf("(良好)\n");
else if(score<=100)
printf("(优秀)\n");
else printf("(输入错误\n");
}
if语句中应注意的问题
- 该表达式通常是逻辑表达式或关系表达式,
if(x>b)
- 但也可以是其它表达式,如赋值表达式等,甚至也可以是—个变量。
例如:
if(a=5)
if(b)
语句;只要表达式的值为非0,即为“真”。
if(a=b) //把 b 的值赋给 a,如果非0则输出该值
printf ("%d",a);
else
printf("a=0");
- 在if语句中,条件判断表达式必须用括号括起来,在语句之后必须加分号。
if (a>b) max=a;
- 在if语句的三种形式中,所有的语句应为单个语句,如果要想在满足条件时执行一组(多个)语句,则必须把这一组语句用{}括起来组成一个复合语句。但要注意的是在}之后不能再加分号。
- 例如:
if (a>b)
{a++; b++;}
else
{a--; b--;}
例子
输入两个实数,按代数值由小到大的顺序输出这两个数。
解题思路:
- 只需要做一次比较,然后进行一次交换即可
- 用if语句实现条件判断
- 关键是怎样实现两个变量值的互换
#include <stdio.h>
void main() {
float a, b,c;
scanf_s("%f %f", &a, &b);
if (a < b)
{
c = a;
a = b;
b = c;
printf("%.2f %.2f\n", a, b);
}
else
printf("%.2f %.2f\n", a, b);
}
输入3个数a,b,c,要求按由小到大的顺序输出。
解题思路:
- if a>b, a和b对换 (a是a、b中的小者)
- if a>c,a和c对换 (a是三者中最小者)
- if b>c,b和c对换 (b是三者中次小者)
#include <stdio.h>
void main() {
float a, b, c, d;
scanf_s("%f %f %f", &a, &b, &c);
if (a > b)
{
d = a; a = b; b = d;
}
if (a > c)
{
d = a; a = c; c = d;
}
if ( b> c)
{
d = b; b = c; c = d;
}
printf("%.2f %.2f %.2f\n", a, b, c);
}
if语句的嵌套
- 在if语句中又包含一个或多个if语句,称为if语句的嵌套。
- else总是与它前面最近没有配对的if配对
例子
比较两个数的大小关系
#include <stdio.h>
void main() {
float a, b;
scanf_s("%f %f", &a, &b);
if (a != b)
if (a > b)
printf("%.2f > %.2f\n", a, b);
else
printf("%.2f < %.2f\n", a, b);
else
printf("%.2f = %.2f\n", a, b);
}
条件运算符
条件运算符: ?
:
- 格式:
表达式1
?
表达式2
:
表达式3
(如果表达式1为“真”,返回表达式2,否则返回表达式3)。 - 使用场合:若在if语句中,当被判别的表达式的值为“真”或“假”时,都执行一个赋值语句且向同一个变量赋值时,可以用一个条件运算符来处理。
- 例如:
if(a>b)
max=a;
else
max=b;
// 相当于
max = (a>b)? a : b;
例子
输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到结果。
#include <stdio.h>
void main() {
char x,y;
scanf_s("%c",&x);
y = (x >= 'A'&& x <= 'Z') ? (x + 32) : x;
printf("%c\n", y);
}