分支与循环
嗯,依旧按照我的学习进度来写博客笔记,分支与循环。
操作符
操作符作为语句中的基础,也是较为简单的部分,这里放到最前面讲。
关系操作符
非常简单,分为六类
<号
小于号
>号
大于号
<=号
小于等于号,中间记得不要打空格,检查检查,上次博主顺手打的空格检查了半天没检查出来,后来才发现的。
>=号
大于等于号,须知同上。
==号
相等运算符,嗯,本人一般用来判断对错,发现了新用法再分享。
!=号
不等运算符,同上。
条件操作符
exp1 ? exp2 : exp3
#include <stdio.h>
int main()
{
int b = 2;
int a = 0;
(b = 2) ? (a = 1) : (a = 5);
printf("%d", a);
return 0;
}
在这里a的打印结果为1,如果将三目操作符第一项改为(b!=2)那么a的打印结果将为5,很好理解对伐。
逻辑运算符
!号
&&号
并且的意思,只有&&号的两边都为真,才能为真
类似于python里的and,两边为真才为真
||号
或者的意思,||号的两边只要有一个为真即判定为真
类似于python里的or,一边为真即为真
短路
那么在逻辑运算符下就有短路这么一个需要注意的条件,在物理中,线路被短路了就会跳过后面的用电器,在这里也是如此。
比如&&号,当从左向右判定时,左项已经为假,那么整个&&项已经毫无疑问为假,那么就不用判定右项,此时右项就被短路了。
||号,当从左向右判定时,左项已经为真,那么整个||项已经毫无疑问为真,那么就不用判定右项,,同样,此时右项就被短路了。
如何证明?
#include <stdio.h>
int main()
{
int b = 2;
int a = 0;
int c = 5;
if ((b = 3) && (a = 0) && (c = 5))
printf("此项为真");
else
printf("此项为假");
return 0;
}
当if()中为真时便会打印“此项为真”,但运行的结果却恰恰相反,第一项(b=3)便是错误的,那么整个(b=3)&&(a=0)即为错。
分支
if语句
if意为如果
if()
语句A;
当if的括号中为真时,则执行语句A。
else意为其他
if()
语句A;
else
语句B;
当if()中的括号中为假时则执行语句B。
这边举一个例子
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if(num % 2 == 1)
printf("%d 是奇数\n", num);
else
printf("%d 是偶数\n", num);
return 0;
}
当我们通过scanf输入num后,num进行if的判定,如果除以2余1即为奇数,打印奇数;如果正好可以被2整除即为偶数,打印偶数。
嵌套
else if的使用使代码的表达更上一层,并且不局限与简单的是与否
这边放出我在学习过程中做的题目,判断年龄段
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int a;
scanf("%d", &age);
if (age<= 18)
printf("青少年");
else if (age <= 30)
printf("青年");
else if (age <= 50)
printf("中年");
else if (age <= 80)
printf("老年");
else
printf("长寿");
return 0;
}
可以看到这里使用了三次else if 使得if语句有了五种结果,else if在我的理解中它就是在上一个条件被否定后给出另一种可能进行判定,从而输出。
注意:else只和最近的if配对,而不是对齐的else,如果我们想让某个if和else配对的话可以借用{}来完成
switch语句
和if语句的嵌套很相似,在某些场景中比if更加简便,但是它的局限性就在于case后只能接整型,这就使得当switch在想表达上文中的年龄段划分略显不足(至少我目前没想到怎么简单解决),switch的经典题目应该是判断礼拜,下面给出一段判断礼拜的代码
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch(day)
{
case 1:
printf("星期⼀\n");
break;
case 2:
printf("星期⼆\n");
break;
case 3:
printf("星期三\n");
break;
case 4:
printf("星期四\n");
break;
case 5:
printf("星期五\n");
break;
case 6:
printf("星期六\n");
break;
case 7:
printf("星期天\n");
break;
}
return 0;
}
default的使用
类似于if语句中的else,当所有的case都无法成立时就执行default的语句
循环
while语句
当满足while()内为真时,while便进行循环,在后续题目中深度讲解
do while循环
直接看例子,使用do-while打印数字1-10
#include <stdio.h>
int main()
{
int i = 1;
do
{
printf("%d ", i);
i = i + 1;
}while(i<=10);
return 0;
}
for语句
for(表达式A;表达式B;表达式C) 表达式A一般是初始化循环变量,表达式B进行判断,若为真则将for语句循环,而后执行表达式C。
#include <stdio.h>
int main()
{
int i = 0;
for(i=1; i<=10; i++)
{
printf("%d ", i);
}
return 0;
}
一个很简单的将i从1开始一直打印到10为止,每次都在执行完printf后进行i++,为什么这样说?从反面来看,如果是先i++后打印的话,当i=10时经过i<=10的判断后进行i++,而后printf就会打印出11,所以这并不成立。
break的使用
break一般配合if使用,在while中若是碰到break则会停止整个循环,来看一个例子
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5)
break;
printf("%d ", i);
i ++;
}
return 0;
}
continue的使用
continue的使用方式和break大差不差,但效果却是天翻地覆,continue会跳过下文重新回到while再次循环,这里将上文的break换成continue看看什么效果。
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5)
continue;
printf("%d ", i);
i ++;
}
return 0;
}
#include <stdio.h>
int main()
{
int i = 1;
for (i = 1; i <= 10; i++)
{
if (i == 5)
continue;
printf("%d ", i);
}
return 0;
}
838

被折叠的 条评论
为什么被折叠?



