如何写表达式
// 3种逻辑表达式
// && || !
A && B A || B !A
B第二 || A第三 == true B第二 && A第三 == false
B第二 || E第四 == true B第二 && E第四 == false
C第一 || D第二 == true C第一 && D第二 == false
C第五 || D第三 == true C第五 && D第三 == false
E第四 || A第一 == true E第四 && A第一 == false
A第三 E第四 C第五 D第二 B第一
if else语句
//单分支结构
if(expression)
{
statement1;
}
if(expression)
if (secondexpression) statement1; // 注意这个if与下面的else构成双分支结构,不是与上一个if构成嵌套分支
else
statement2;
// 双分支结构
if(expression)
{
// 嵌套分支
if (secondexpression) statement1;
}
else
statement2;
// 多分支结构,只会执行一个分支
if ()
{
}
else if()
{
}
else
{
}
// 下面的if语句都会进行判断,如果条件之间有交集可能会导致bug
if ()
{
}
if ()
{
}
else和最近的if相匹配,如果使用嵌套的if else的话 {}不可缺少, 同一级别 if else if else 只会执行一个 一连串的if 和一连串的if 、else if、 else的区别 一连串的if会依次进行判断,可能会导致多个符合条件的if块中的语句执行 if 、else if 、else只会执行一个块中的语句
逻辑表达式的短路原则
if(condition1 && condition2) # 如果condition1为假,不会再去计算condition2
if (condition1 || condition2) # 两个condition的真假都会被计算
a > b ? c + d : e+f 三目运算符?:,如果a > b 则计算c + d,否则计算 e + f
等价的循环结构
//i从[0,n) 共执行n次循环
for (int i = 0; i < n; i++)
{
...
}
int i = 0;
while(i < n)
{
...
i++;
}
// do while结构使得循环至少执行一次
do{
...
}while(b)
// {}里的语句会在while循环前执行一次
{
...
}
while(b)
{
...;
}
continue
while(a)
{
if(b) // 如果条件b为真,则跳过下面的printf语句,不进行输出
{
continue;
}
printf("hello world\n");
}
// same
while(a)
{
if(!b) // 如果不满足b条件则进行输出与上面等价
{
printf("hello world\n");
}
}
break
while(a)
{
...
if (b)
break; // 满足b条件则跳出循环,循环结束 这种写法使得循环有一个入口,多个出口,不好
}
// same
// 循环语句应该只有一个入口,一个出口
while(a && !b) // 不满足b条件则继续循环
{
if(!b) // 不满足b条件则执行相应的语句
{
...
}
}
switch
case中为一个常量表达式,必须为整型或枚举类型
// 计算某年某月的天数为例
// if else if else写法
// 判断是否是闰年
bool isLeapYear(int year)
{
// 年份能被400整除 或 年份能被4整除不能被100整除
if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))
{
return true;
}
else
{
return false;
}
}
int main(int argc, char **argv)
{
int year,month;
int day;
scanf("%d%d",&year, &month);
if(month == 1
|| month == 3
|| month == 5
|| month == 7
|| month == 8
|| month == 10
|| month == 12)
{
day = 31;
}
else if(month == 2)
{
day = 28;
if (isLeapYear(year))
{
day = 29;
}
}
else
{
day = 30;
}
printf("%d", day);
return 0;
}
// switch case 写法
// 计算某年某月的天数为例
// 判断是否是闰年
bool isLeapYear(int year)
{
// 年份能被400整除 或 年份能被4整除不能被100整除
if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))
{
return true;
}
else
{
return false;
}
}
int main(int argc, char **argv)
{
int year,month;
int day = 0;
scanf("%d%d",&year, &month);
switch(month) //month必须为整型、字符型、或枚举类型
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
{
day = 31;
break;
}
case 2:
{
day = 28;
if (isLeapYear(year))
{
day = 29;
}
break;
}
case 4:
case 6:
case 9:
case 11:
{
day = 30;
break;
}
default:
break;
}
printf("%d", day);
return 0;
}
Comments