1.关系操作符
>、<、>=、<=、==、!=
2.逻辑操作符
&&、||、 !
3.条件操作符
(expression1 ? expression2 : expression3)
4.选择语句
(1).if与else的使用
(2).switch的使用
5.循环语句
(1).for循环
(2).while循环
(3).do while循环
(4).break与continue
(5) .循环的嵌套
(6).goto 语句
1.关系操作符
主要有>、<、>=、<=、==、!=六种关系运算符,可以用作数值比较等用途。
a > b;//大于运算符
a < b;//小于运算符
a >= b;//大于等于运算符
a <= b;//小于等于运算符
a == b;//相等运算符
a != b;//不相等运算符
需要注意的是赋值操作符=与相等运算符==的用法区别,新手容易混淆二者的用法而导致程序运行未达到预期,例如:
2.逻辑操作符
逻辑操作符主要有与(&&)、或(||)、逻辑取反(!)。
- &&:当且仅当&&两边的表达式同时为真,整个表达式返回结果为真,否则为假
例如:a>1 && b<3,当a>1并且b<3同时成立,整个表达式为真,当a>1或b<3任意一方不成立或二者同时不成立,整个表达式结果为假,返回值为0。
- ||:当且仅当||两边的表达式同时为假,整个表达式返回结果为假,否则为真
例如:a>1 || b<3,当a>1并且b<3同时不成立,整个表达式为假,当a>1或b<3任意一方成立或二者同时成立,整个表达式结果为真,返回值为非0。
- !:用于逻辑取反,如果 !后面表达式结果为真,则将其转化为假。
例如:if(!a=1),a=1表达式结果为真,if执行条件成立,但(!a=1)将使整使表达式结果转为假,if不再执行,总之,!使真转为假,假转为真。
参考
需要注意的是C语言逻辑运算符的执行顺序是从左到右,这样就会发生一种“短路现象”,如果逻辑运算符左边的表达式成立,就不再向右执行,例如 if(a>1 && b<3),计算机执行到a>1,如果a>1为假,由&&的运算规则,整个表达式为假,不再判断右边的表达式; if(a>1 || b<3)
,如果a>1为真,由||的运算规则,整个表达式为真,不再计算右边的表达式。
短路的好处,这里引用ChatGPT的回答:
提高性能: 当表达式中包含多个逻辑运算时,短路现象可以减少不必要的计算,从而提高程序的执行效率。特别是当第一个操作数足以决定整个表达式的值时,就避免了对其他操作数的计算。
防止错误: 短路现象有助于防止由于对无效或未定义的操作数进行计算而引起的错误。例如,在判断指针是否为空时,如果第一个操作数为假(指针为空),那么整个表达式的值已经确定为假,就不会执行第二个操作数,从而避免了对空指针的非法操作。
提高代码可读性: 在使用逻辑运算来组织条件语句时,利用短路现象可以使代码更加简洁和易读,因为不必显式地检查每个条件。
3.条件操作符(三目操作符)
expression1 ? expression2 :expression3
运算逻辑较为简单:当exoresson1成立,则执行exoression2,否则执行expression3。
4.选择语句
- (1)if的使用
if后面默认紧跟一条执行语句,所以,可以简写为:
需要注意的是{ }的添加,建议if后面只有一条语句也加上{ },养成良好的代码风格,免去不必要的程序出错。
若需要多向的条件选择,需要搭配else使用,三种及以上的需要用到else if:
- (2).switch的使用
其功能相当于简化版的if....else 语句,使用格式:
需要注意 的是:value1和value2.........和default几者的先后顺序并不影响程序的执行,例如default及其所属可以放在case value1 前;
break在保证switch结构的顺利执行很重要!若没有break,程序会执行后面的case或default语句直到遇到break或全部执行完毕才结束
tips:if和switch均可以嵌套使用,更灵活的实现叠加任务
5.循环语句
- (1).for循环
for的格式:
for (初始化; 条件; 更新)
{
// 循环体(要重复执行的代码块)
}
使用如下:
int main()
{
// 使用 for 循环打印数字 1 到 5
for (int i = 1; i <= 5; ++i)
{
printf("%d ", i);
}
return 0;
}
a.初始化: 在循环开始时执行,通常用于初始化计数器或设置循环的起始条件。这部分在整个循环生命周期内只执行一次。
b.条件: 在每次循环迭代开始时评估,如果条件为真,则执行循环体;如果条件为假,则退出循环。
c,更新: 在每次循环迭代结束时执行,通常用于更新计数器或执行其他必要的操作。
d.循环体: 在条件为真时执行的代码块。循环执行的实际操作
tips:for循环也可以嵌套使用;for集初始化、判断条件、更新条件为一体,因此相比于while和do while使用更加频繁。
- (2).while循环
while使用格式:
while (条件)
{
// 循环体(要重复执行的代码块)
}
使用如下:
int main()
{
// 使用 while 循环打印数字 1 到 5
int i = 1;
while (i <= 5)
{
printf("%d ", i);
i++; // 更新循环变量
}
return 0;
}
tips:while也可以嵌套使用;while的判断语句总是比执行语句多执行一次。
- (3).do while循环
使用格式:
tips:执行语句“ /*expression*/; ”总是彼=比while里面的判断语句多执行一次
- (4).break与continue
break:用于跳出循环
continue:终止此次循环,循环体内continue后面的语句都不在执行, 直接进入下一次循环。
需要注意的是: break和continue只能在循环语句for、while、do while里使用;且作用能力仅限于所属循环体,如在嵌套的for循环中:
int main() {
for (int i = 1; i <= 5; ++i) {
for (int j = 1; j <= 5; ++j) {
printf("* ");
break;//仅仅跳出内层的for循环
}
printf("\n");
}
return 0;
}
- (5) .循环的嵌套
for和while和do while可以混合嵌套使用:
int main()
{
// 使用 while 循环嵌套 for 循环打印数字 1 到 3
int i = 1;
while (i <= 3)
{
for (int j = 1; j <= 3; ++j)
{
printf("%d ", j);
}
printf("\n");
++i;
}
return 0;
}
- (6).goto 语句
goto语句可以使代码跳转到某个提前设定好了的标号处开始执行,但会有使代码变复杂的风险,但可以用来跳出多层嵌套的循环体:
int main()
{
// 嵌套三层 for 循环
for (int i = 1; i <= 3; ++i)
{
for (int j = 1; j <= 3; ++j)
{
for (int k = 1; k <= 3; ++k)
{
printf("* ");
goto there;//goto 语句
}
printf("\n");
}
printf("\n");
}
there://直接跳转到此处,程序结束
return 0;
}
以上便是码主对分支与循环这部分内容的简单总结。如有错误望诸位及时指出,我将及时改正,谢谢!!!