一.if语句
1.if语句:
1.1.语法形式:
if(表达式)
语句;
表达式为真(非零),进去语句内部;表达式为假(零),则不进入语句内部
例1:
你是天才吗?_牛客题霸_牛客网 (nowcoder.com)
解答:
#include <stdio.h>
int main() {
int a = 0;
scanf("%d",&a);
if( a >= 140)//根据题目判断,如果输入大于140则输出Genius;如果输入小于140则不输出
printf("Genius\n");
return 0;
}
2.if...else...语句
2.1.语法形式
if(表达式)
语句1
else
语句2
表达式为真时进入语句1;为假时进入语句2
例2:将1.1例题增加一个条件
如果智商大于等于140输出天才,如果智商小于140就输出不是天才,则代码如下:
#include <stdio.h>
int main() {
int a = 0;
scanf("%d",&a);
if( a >= 140)
printf("Genius\n");//如果智商高于140则执行
else
printf("Not Genius\n");//如果智商低于140则执行
return 0;
}
3.分⽀中包含多条语句
以上只有一条语句,如果有多条语句就要用{ }将语句阔起来
例3:
#include <stdio.h>
int main(){
int a = 0;
printf("请输入你的年龄/n");
scanf("%d",&a);
if(a >= 18){
printf("恭喜你\n");
printf("你已经成年了"\n);
}
return 0;
}
4.if语句嵌套
在if...else...语句中else后可以跟另一个if语句连用
例4:
再给例1加一个条件
如果智商大于等于200则输出超级天才,在140到200之间则输出天才,低于140则输出不是天才
#include <stdio.h>
int main() {
int a = 0;
scanf("%d",&a);
if( a >= 200)
printf("Super Genius\n");//如果智商高于200则执行
else if (a>=140 && a<200)
printf("Genius\n");//如果智商高于140低于200则执行
else
printf("Not Genius\n");//如果智商低于140则执行
return 0;
}
5.悬空else问题
如果有多个if else语句,则else会跟最近的if匹配
例5:
//有如下代码
#include <stdio.h>
int main(){
int a = 0;
int b = 2;
if(a == 1)
if(b == 2)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
输入结果为:
为什么呢?
这就是悬空 else 的问题,如果有多个 的 if 匹配。 上⾯的代码排版,让 if 和 else ,可以记住这样⼀条规则, else 总是跟最接近 else 和第⼀个 if 语句对⻬,让我们以为 语句不成⽴的时候,⾃然想到的就是执⾏ else ⼦句,打印 else 是和第⼀个if匹配的,当 进⾏匹配的,这样后边的 haha ,但实际上 if...else 语句是嵌套在第⼀个 if else 是和第⼆个 if 成⽴,嵌套 if 和 if 语句中的,如果第⼀个 if 语句就不 else 就没机会执⾏了,最终啥都不打印。
可以将上述代码这样理解:
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if (a == 1){
if (b == 2)
printf("hehe\n");
else
printf("haha\n");
}
return 0;
}
二.关系操作符
C语⾔⽤于⽐较的表达式,称为“关系表达式”(relationalexpression),⾥⾯使⽤的运算符就称 为“关系运算符”(relationaloperator),主要有下⾯6个。
> 大于运算符
< 小于运算符
>= 大于等于预算符
<= 小于等于运算符
== 相等运算符
!= 不相等运算符
注意:
= 是赋值运算符 ==是相等运算符
运算符不能连用
三.条件操作符
条件操作符也叫三⽬操作符,需要接受三个操作数的,形式如下:
exp1 ? exp2 : exp3
如果表达式exp1为真则返回exp2的结果,exp1为假则返回exp3的结果
例6:
返回两个较大的数
#include <stdio.h>
int main(){
int a,b;
scanf("%d %d",&a,&b);
printf("%d\n",a>b?a:b);
return 0;
}
四. 逻辑操作符:&&,||,!
&& 逻辑与 两侧只要有表达式为假则为假
|| 逻辑或 两侧至少有一个表达式为真则为真
! 逻辑非 改变单个表达式真假
五.短路
C语⾔逻辑运算符还有⼀个特点,它总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是 保证的。 如果左边的表达式满⾜逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为“短路”。
例7:
if(month >= 3 && month <= 5)
表达式中&&的左操作数是 结果是0的时候,即使不判断 month >= 3 ,右操作数是 month = 3 的 month <= 5 ,整个表达式的结果也是0(不是春季)。 所以,对于&&操作符来说,左边操作数的结果是0的时候,右边操作数就不再执⾏。
六.switch语句
除了 if 语句外,C语⾔还提供了 switch 语句来实现分⽀结构。 switch 语句是⼀种特殊形式的 的 el if...else 结构,⽤于判断条件有多个结果的情况。它把多重 se if 改成更易⽤、可读性更好的形式。
switch (expression) {
case value1: statement
case value2: statement
default: statement
}
上述代码中,根据表达式expression的值来确定执行case分支
注意:
switch(expression)中expression必须是整形表达式
case 必须是整型常量表达式
default 在所有的case语句都不匹配时则执行default后的语句
注意:
case之间;case与default之间的先后顺序是无所谓的,可以任意交换
七.if语句与switch语句的对比
例8:
输⼊任意⼀个整数值,计算除3之后的余数
用if语句完成结果如下:
#include <stdio.h>
int main(){
int n = 0;
scanf("%d", &n);
if(n%3 == 0)
printf("整除,余数为0\n");
else if(n%3 == 1)
printf("余数是1\n");
else
printf("余数是2\n");
return 0;
}
用switch语句完成结果如下:
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
switch (n % 3)
{
case 0:
printf("整除,余数为0\n");
break;
case 1:
printf("余数是1\n");
break;
case 2:
printf("余数是2\n");
break;
}
return 0;
}
我们需要注意的问题有:
1.case后面跟常量整形表达式时必须用空格隔开
2.每一个case语句中代码执行完成后,必须通过break跳出这个stitch语句