c语言逻辑控制详解
一、顺序结构
顺序结构:程序按照代码书写的顺序一行一行执行。
二、选择结构
1、if语句(判断表达式里的结果是真还是假)
if(表达式)
{
语句;
} 没有花括号只会执行一条语句
语法形式2: if(表达式)
{ 语句1;
}
else { 语句2;
}
如果表达式为真则执行语句1,否则执行语句2。
语法形式3: if(表达式1)
{ 语句1;
}
else if(表达式2)
{ 语句2;
}
else { 语句3;
}
如果表达式1为真则执行语句1,如果表达式2为真则执行语句2,否则执行语句3。
2、逻辑运算符
(1)!:逻辑取反
#include<stdio.h> int main() { int month = 0; scanf("%d", &month); if (month == 12 || month == 1 || month == 2) { printf("冬季\n"); } return 0; }(2)&&:逻辑与(同时)
表达式1 && 表达式2
#include<stdio.h> int main() { int month = 0; scanf("%d", &month); if (month >= 3 && month <= 5) { printf("春季\n"); } return 0; }当两个表达式都为真时 整个表达式为真
只要有一个表达式为假 整个表达式为假
短路或:如果表达式1为假,则不执行表达式2
(3) ||:逻辑或
#include<stdio.h> int main() { int month = 0; scanf("%d", &month); if (month >= 3 || month <= 5) { printf("春季\n"); } return 0; }表达式1 || 表达式2
只要有一个表达式结果是真,则整个为真
只有当两个表达式都为假时,整个为假
短路或;如果表达式1为真,则不执行表达式2
int main() { int month = 0; int a = -1; scanf("%d",&month); if(month == 12 || ++a) { printf("冬季/n"); } printf("%d/n",a); return 0; }if判断是真是假,一个表达式为0则假,非0为真
此代码当输入非12的数,if里的第一个条件为假,执行第二个语句,-1++后为0,假。此时if语句为假则不输出,即无冬季
闰年判断的规则: 1. 能被4整除并且不能被100整除是闰年。 2. 能被400整除是闰年。
3、switch(开关)语句
switch语句是一种特殊形式的 if...else 结构,用于判断条件有多个确定结果的情况。它把多重的else if改成更易 用、可读性更好的形式。
switch语法格式:
switch (整型表达式)
{
case 整型常量1: 语句;
break;
case 整型常量2: 语句;
break;
... default: 语句;
break;
}
switch后的expression必须是整型表达式。
switch语句不需要判断真假,只是一个开关
case 后的值,必须是整型常量表达式。
4、循环结构
(1)while循环
条件为真时重复执行代码,适合循环次数未知的场景
while语法格式:
while (循环条件)
{
// 循环条件为真则 循环体
}
#include <stdio.h> int main() { int i = 1; while(i <= 10) { printf("%d ", i); i = i + 1; } return 0; }关键点: 先检查条件,再执行循环体。 若初始条件为 假,循环体一次也不执行。
getchar():可读一个空格或一个回车
(2)for循环:
for语法格式:
for(表达式1; 表达式2; 表达式3)
{
// 循环体语句
}
表达式1: 用于循环变量的初始化。
表达式2: 用于循环结束条件的判断。
表达式3: 用于循环变量的调整
(3)do-while循环:
作用:在循环语句中do-while语句的使用最少,它保证循环体至少被执行一次。
do-while语法格式:
do
{
// 循环体语句
}
while(表达式);
先执行一次循环体,然后再判断表达式。只要表达式为真,就继续循环。
(4)循环嵌套
循环是可以进行嵌套的,不管是for循环嵌套while循环,还是while循环嵌套for循环都是可以的。一个循环体 内又包含另一个完整的循环结构,称为循环的嵌套
#include<stdio.h> int main() { int i, j; // i表示行,j表示列 printf("========== 九九乘法表 ==========\n"); for (i = 1; i <= 9; i++) // 外层循环控制行数 { for (j = 1; j <= i; j++) // 内层循环控制每行的列数 { printf("%d*%d=%2d ", j, i, j * i); // %-2d 表示左对齐,占2位 } printf("\n"); // 每行结束后换行 } return 0; }(5)break和continue
循环控制语句 break 和 continue 是两个用于在循环内部精确控制循环流程的关键字。
break: 立即终止并跳出当前所在的循环。
continue: 跳过本次循环中尚未执行的语句,直接开始下一次循环的判断和执行。
1.break - 中断循环
break顾名思义为:"打断","中断"的意思。在循环当中意味着中断循环。
2.continue - 继续下一次循环
continue顾名思义为:"继续"的意思。在循环当中意味着继续执行下一次循环。