一、if语句
1.if
语法形式:
if (表达式)
语句
流程:
例子: 输入一个整数,判断是否为小于10的数。’
1 #include<stdio.h>
2 int main()
3 {
4 int i=0;
5 scanf("%d",&i);
6 if (i<10)
7 printf("hehe\n",i);
8 return 0;
9 }
2.else
如果需要表示if条件不成立这种情况及结果,则需要用到else语句。
语法形式:
1 if (表达式)
2 语句:
3 else
4 语句:
例子:输入一个非0整数,判断是否为正数,如果是正数则打印是正数,如果不是则打印是负数。
1 #include<stdio.h>
2 int main()
3 {
4 int i=1;
5 scanf("%d",&i);
6 if(i>0)
7 printf("%d 是正数\n",i);
8 else
9 printf("%d 是负数\n",i);
10 return 0;
11 }
3.分支中包含多条语句
分支默认只包含一条语句,若需包含多条语句应使用{ }
例子:
1 else
2 {
3 printf("***\n");
4 printf("###\n");
5 }
注意:else的匹配原则是:与最近的未成对if语句配对。
4.嵌套
例子:输入一个整数,判断是正数,负数还是0。
方式1:将输入正数或负数这两种情况,视作非0的一种情况,并入i=0的else语句下。代码如下图。
1 #include<stdio.h>
2 int main()
3 {
4 int i=0;
5 scanf("%d",&i);
6 if(i==0)
7 printf("输入了0\n");
8 else
9 {
10 if(i>0)
11 printf("输入了正数\n");
12 else
13 printf("输入了负数\n");
14 }
15 return 0;
16 }
方式2:遵照题目将三种情况依次讨论。代码如图。
1 #include<stdio.h>
2 int main()
3 {
4 int i=0;
5 scanf("%d",&i);
6 if(i==0)
7 printf("输入了0\n");
8 else if(i>0)
9 printf("输入了正数\n");
10 else
11 printf("输入了负数\n");
12 return 0;
13 }
二、操作符
1.关系操作符
<小于运算符
>=大于等于运算符
<= 小于等于运算符
>大于运算符
== 相等运算符
!= 不相等运算符
c语言中,所有非0至表示真。
关系表达式通常返回1或0表示真假。
注意:运算符尽量不要连用。
2.条件操作符
即三目操作符
形式:
exp1?exp2:exp3
条件操作符的计算逻辑是:
如果 exp1 为真, exp2 计算,计算的结果是整个表达式的结果;
如果exp1 为假, exp3 计算,计算的结果是整个表达式的结果。
例子:
1 #include<stdio.h>
2 int main()
3 {
4 int a=0;
5 int b=0;
6 scanf("%d",&a);
7 //if(a>5)
8 // b=3;
9 //else
10 // b=-3;
11 b=(a>6?3:-3);
12 return 0;
13 }
注释部分,即为等价于b=(a>6?3:-3);的部分
在这段代码中,先判断a是否>6,a>6时b=3,反之则b=-3
3.逻辑操作符
- !:逻辑取反运算符(改变单个表达式的真假)
- &&:逻辑与运算符(即并且,两侧皆真方为真,其余为假)
- ||:逻辑或运算符(即或者,两侧至少有一个为真则为真,其余为假)
注:c语言中非0为真,0为假。
5.闰年的判断
条件:1.能被4整除并且不能被100整除
2.能被400整除
(满足其中一项即可)
代码如下:
6.短路
成因:
c语言 逻辑运算符 特点是,先对左侧的表达式求值,如果左边的表达式可以满足条件,则不再对右边的表达式求值。
对于&&,若左边结果为0(假),则右边不再执行。
对于||,若左侧结果不为0(假),则右边不再执行。
三、switch语句
switch语句是一种特殊形式的if…else结构,用于判断条件有多个结果的情况。它把多重的else if改成更易用,可读性更好的形式。
1.语法形式:
1 switch(m){
2 case 1:语句1;
3 break;
4 case 2:语句2;
5 break;
6 default:默认语句
7 break;
8 }
在上述代码中,根据m不同的值,执行相应的case分支,若找不到对应的值,则执行default分支。
注意:
switch后的m必须是整型表达式
case后的值,必须是整型常量表达式
例子:输入任意一个整数,计算除3之后的余数
2.break
break起到跳出循环的作用
如上题中,若将break都删去,则printf语句将依次打印。
即:输入6,打印余数是0,余数是1,余数是2
3.default
在switch语句中,case子句和default语句是没有顺序要求的,满足实际需求即可。
但通常情况下,我们把default子句放在最后处理。
四、while循环
1.语法形式:
1 while(表达式)
2 语句;//如果循环体想包含更多的语句,可以加上大括号
2.流程:
3.练习:
(1)打印1到10的值
(2)输入一个正整数,逆序打印这个整数的每一位
分析:1.想得到n的最低位,可以使用n%10的运算,得到的余数就是最低位,如:1234%10得到4
2.要想去掉n的最低位,找出倒数第二位,则使用n=n/10操作就以去掉最低位的,如:n=1234/10得到123,
123相较于1234就去掉了最低位,123%10就得到倒数第二位3.
3.循环1和2两个步骤,在n变成0之前,就能到所有的位。
代码如下:
五、for循环
1.语法形式:
1 for(表达式1;表达式2;表达式3)
2 语句://如果循环体想包含更多的语句,可以加上大括号
注意:
表达式1:初始化表达式
表达式2:判断表达式
表达式3:调整
2.执行流程:
3.练习
(1)计算1~100之间3的倍数的数字之和
六、do-while循环
1.语法形式:
1 do
2 语句:
3 while(表达式):
2.执行流程:
3.例子:
(1)打印1到10的值
(2)输入一个正整数,计算它至少是几位数
七、break和continue
用于提前终止循环
1.while循环中
- break: 永久终止,直接跳出循环向后执行
- continue: 跳过本次循环中continue后的代码
如下:
i=5时,break终止循环,只打印1234
i=5时,continue跳过打印和i++,因此i一直是5,故只打印到4
2.for循环中
若用for循环改写上述continue代码,效果如下:
此处continue只跳过了5的打印
3.do-while循环中
效果如下:
八、goto语句
goto语句可以实现在同一个函数内跳转到设置好的标号处。
常用于多层循环中。
例子:
1 for(...)
2 {
3 for(...)
4 {
5 for(...)
6 {
7 if(disaster)
8 goto error;
9 }
10 }
11 }
12 error