在这里我们来复习一下前面学过的内容
关系运算符和表达式
关系运算符用于比较两个值之间的关系。
常见的六种关系运算符:
- 小于(<)
- 大于(>)
- 小于等于(<=)
- 大于等于(>=)
- 等于(==)
- 不等于(!=)
这些运算符在编程中用于比较两个值的大小或相等性,并返回一个布尔值(True或False)。例如,在C语言中,表达式 a < b 会返回 True 如果 a 小于 b,否则返回 False。
关系表达式是指使用关系运算符连接两个表达式的式子。例如,a <= b 是一个关系表达式,它比较变量 a 和 b 的大小,并返回一个布尔值。关系表达式的运算结果为逻辑值,表示两个值之间的关系是否成立。
关系运算的其他形式(仅了解)
除了关系运算符,关系运算还包括其他形式,如:
- 选择运算:从关系中选出满足特定条件的元组。
- 投影运算:从关系中选取特定的列组成新的关系。
- 连接运算:将两个关系根据某些条件合并成一个关系。
- 除法运算:通过除法运算可以从一个关系中提取出满足特定条件的元组。
逻辑运算符和表达式
逻辑运算符是用于对逻辑值(True和False)进行运算的运算符,主要包括以下三种:
逻辑表达式的优先级和结合方向:
- 优先级:!(逻辑非) > &&(逻辑与) > ||(逻辑或)。这意味着逻辑非的优先级最高,逻辑与次之,逻辑或最低。
- 结合方向:!(逻辑非)的结合方向是由右向左,而&&和||的结合方向是由左向右。
短路现象:
在逻辑表达式中,如果运算符左侧的表达式已经确定了整个表达式的结果,那么右侧的表达式可能不会被执行。例如:
- 在&&运算中,如果左侧表达式为False,则右侧表达式不会被执行,因为结果已经确定为False。
- 在||运算中,如果左侧表达式为True,则右侧表达式不会被执行,因为结果已经确定为True。
逻辑表达式的值:
在C语言中,逻辑表达式的值用1表示True,用0表示False。参与逻辑运算的操作数可以是逻辑值或能转换为逻辑值的数值(非0为True,0为False)。
运用:
#include <stdio.h>
int main() {
int a = 3, b = 4;
printf("%d\n", a <= 5 && a > 2); // 输出1(True)
printf("%d\n", a < b || a + b == 8); // 输出1(True)
printf("%d\n", !a || b && 2); // 输出1(True)
return 0;
}
条件运算符和条件表达式
条件运算符由两个符号(?和:)组成,必须一起使用,称为三目运算符。其形式为:
表达式1 ? 表达式2 : 表达式3
这里,表达式1是一个布尔表达式,表达式2和表达式3是任意两个表达式。如果表达式1的结果为真(非零),则整个条件表达式的值就是表达式2的值;否则,它就是表达式3的值。
使用场景和示例
条件表达式常用于需要根据某个条件进行简单分支的场合。例如:
计算两个数中的较大值:
int a = 5, b = 10;
int max = (a > b) ? a : b;
printf("The maximum is %d\n", max);
转换字符的大小写:
char ch = 'a';
char result = (ch >= 'a' && ch <= 'z') ? (ch - 'a' + 'A') : ch;
printf("The character in uppercase is %c\n", result);
根据成绩给出等级:
int score = 85;
char grade = (score >= 90) ? 'A' : (score >= 80) ? 'B' : (score >= 70) ? 'C' : (score >= 60) ? 'D' : 'F';
printf("The grade is %c\n", grade);
优先级和结合性
条件运算符的优先级低于大多数其他运算符,但高于赋值运算符。因此,在使用条件运算符时,先求解条件表达式,再将它的值赋给目标变量。条件运算符属于右结合(从右往左)。
二.简单分支程序设计
单分支结构的程序设计
单分支结构语句,即if语句,形式如下:
if (条件表达式)
语句
这里的“条件表达式”是一个布尔表达式,如果条件表达式为真(true),则执行其后的语句;否则,直接跳过该语句。
编程语言中的实现方式
在中,单分支结构的基本语法如下:
if (条件表达式) {
// 条件满足时执行的代码块
}
如果条件表达式为真,则执行大括号内的代码块;否则,直接跳过该代码块。
示例代码
简单的数字判断:
#include <stdio.h>
int main() {
int num = 5;
if (num > 3) {
printf("Number is greater than 3\n");
}
return 0;
}
双分支结构的程序设计
在C语言中,双分支结构主要是通过if-else语句来实现的。这种结构能够让程序根据条件的真假,选择不同的执行路径。
#include <stdio.h>
//这行代码是预处理指令,告诉编译器包含标准输入输出库。这是因为程序中用到了printf函数,该函数定义在这个库中。
int main() {//这是主函数的开始。在C语言中,程序的执行总是从main函数开始。int表明main函数返回一个整数类型的值,这是程序执行结束时的状态码。按照惯例,如果程序成功执行,会返回0。
int num = 10;// 这行代码声明了一个整数变量num并初始化为10。这意味着num存储了值10
if(num > 0) {//这是一个`if`语句,用于判断`num`的值是否大于0。如果条件为真(即`num`的值确实大于0),则执行大括号`{}`内的代码。
printf("Number is positive\n");//如果if语句的条件为真,则执行这行代码,打印出Number is positive,然后换行。\n是换行符。
} else {//如果`if`语句的条件为假(即`num`的值不大于0),则执行`else`部分大括号`{}`内的代码。但在这个例子中,由于`num`被初始化为10,这个`else`部分实际上不会被执行。
printf("Number is non-positive\n");
}// 这行代码位于else部分,如果num的值不大于0,则会打印Number is non-positive,然后换行。但如前所述,这在这个特定的程序运行中不会发生。
return 0;//这行代码表示main函数的结束,并向操作系统返回0,表示程序成功执行结束。
}
三.多分支程序设计
if语句的多重选择程序设计
在C语言中,if语句是用来进行多重选择的重要控制语句。它的基本语法结构如下:
if (condition)
{
// Block of code to be executed if the condition is true
}
如果你想在条件为真时执行多个语句,可以使用大括号{}将这些语句括起来,构成一个复合语句。
if (condition)
{
statement1;
statement2;
// ...
}
如果你想在条件为真时执行一个代码块,否则执行另一个代码块,可以使用else关键字
if (condition)
{
// Block of code to be executed if the condition is true
}
else
{
// Block of code to be executed if the condition is false
}
如果你想进行多重选择,即有多个条件需要判断,可以使用else if关键字。
if (condition1)
{
// Block of code to be executed if condition1 is true
}
else if (condition2)
{
// Block of code to be executed if condition1 is false and condition2 is true
}
else
{
// Block of code to be executed if both conditions are false
}
在使用if语句时,需要注意以下几点:
-
条件(condition)应该是一个可以转换为布尔类型的表达式。
-
如果你有多个else if语句,它们应该按照你认为可能为真的顺序排列。
-
最后的else语句是可选的,当所有的条件都不满足时,代码块中的内容将不会执行。
排序程序示例:
#include <stdio.h>
int main() {
int a, b, c;
printf("请输入三个数字:");
scanf("%d %d %d", &a, &b, &c);
if (a > b) {
if (a > c) {
if (b > c) {
printf("顺序为:%d > %d > %d\n", a, b, c);
} else {
printf("顺序为:%d > %d > %d\n", a, c, b);
}
} else {
printf("顺序为:%d > %d > %d\n", c, a, b);
}
} else {
if (b > c) {
if (a > c) {
printf("顺序为:%d > %d > %d\n", b, a, c);
} else {
printf("顺序为:%d > %d > %d\n", b, c, a);
}
} else {
printf("顺序为:%d > %d > %d\n", c, b, a);
}
}
return 0;
}
switch语句的多重选择程序设计
在C语言中,switch语句是一种选择结构,它允许程序根据一个变量的不同值,使用多个代码块中的一个。这是一种非常有效的代替多个if-else-if语句的方法,尤其是在需要比较一个变量与多个值的情况下。
switch语句中的变量类型可以是int、char等基本类型,也可以是枚举类型或者是整型常量表达式。
case标签必须是整型常量表达式,包括字面量和已定义的常量。
每个case后面必须有break语句,以防止case穿透。
如果没有任何case匹配,程序将执行switch语句的default部分。
每个case的值必须互不相同,以保证程序可以准确地识别应该执行哪一段代码。
int x = 1;
switch(x) {
case 1:
printf("x is 1\n");
break;
case 1:
printf("x is 1 again\n");
break;
default:
printf("x is neither 1 nor 2\n");
}
代码示例:
#include <stdio.h>
int main() {
int number;//在主函数内部,声明了一个整型变量number,用于存储用户输入的数字。
printf("请输入一个数字(1-4):");//使用printf函数打印提示信息,告诉用户需要输入一个1到4之间的数字。
scanf("%d", &number);//使用scanf函数从标准输入(通常是键盘)读取一个整数,并将其存储在变量number中。%d是格式说明符,表示读取的数据是一个整数。&number是变量number的地址,scanf需要这个地址来将输入的数据存储到number中。
switch (number) {//使用switch语句来根据变量number的值选择执行不同的代码块。switch语句是C语言中一种多分支选择结构
case 1://如果number的值是1,则执行这个case后面的代码块
printf("您选择了选项1\n");// printf("您选择了选项1\n");: 打印出用户选择了选项1的信息
break;//结束当前的case块,跳出switch语句。如果没有break,程序会继续执行下一个case块的代码,这通常是不希望发生的(称为“贯穿”现象)。
case 2:
printf("您选择了选项2\n");
break;
case 3:
printf("您选择了选项3\n");
break;
case 4:
printf("您选择了选项4\n");
break;
default://如果number的值不是1、2、3或4中的任何一个,则执行default后面的代码块。 printf("未知的选项\n");
break;
}
return 0;
}