C语言是结构化的程序设计语言,这里的结构指的是:顺序结构、选择结构、循环结构
在C语言中,使用if , switch实现分支结构,使用for ,while do ...while实现循环结构
1、if语句
1.1if
if语句的语法形式如下:
if(表达式)
语句
当表达式成立(即:表达式结果为真)的时候,语句才会执行;表达式不成立(即:表达式结果为假)时,语句不执行
注意:在C语言中,0代表假,非0代表真,也就是表达式的结果如果是0,则语句不执行,表达式的结果如果不是0,则语句执行。
示例:用if语句判断输入的数字是否是奇数
//用if语句判断输入的数字是否是奇数
#include<stdio.h>
int main()
{
int number = 0;
scanf("%d", &number);
if (number %2==1)
{
printf("%d 是奇数\n", number);
}
return 0;
}
结果:(注意:C语言中用==来判断等于关系,而=是赋值操作)

1.2 else
在上述示例中,如果一个数不是奇数,那肯定就是偶数了。如果我们输入一个数来判断是奇数还是偶数,那么就可以使用else语句。
这里要使用if...else...语句,语法形式如下:
if(表达式)
语句1
else
语句2
上述代码执行逻辑是:如果表达式结果为真,则执行语句1,表达式结果为假时,才执行语句2(注意:语句1和语句2只会执行一个)
示例:输入一个整数,判断其是奇数还是偶数,如果是奇数借就打印奇数,否则打印偶数
//示例:输入一个整数,判断其是奇数还是偶数,如果是奇数借就打印奇数,否则打印偶数--if..else..语句
#include<stdio.h>
int main()
{
int number = 0;
scanf("%d", &number);
if (number % 2 == 0)
{
printf("偶数");
}
else
{
printf("奇数");
}
return 0;
}
结果:


1.3分支中包含多条语句
默认情况下,if和else语句中默认都只控制一条语句,比如:
//if语句默认值控制一条语句,
#include<stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age >= 18)
printf("成年了\n");
printf("ok\n");
return 0;
}

上述代码中,不管age取什么值,ok都会被输出到屏幕上。因为:if和else语句中默认都只控制一条语句
如果想让if和else语句控制多条语句,可以加上大括号{ },例如:
//if语句默认值控制一条语句,如果想让if语句控制多条语句,可以加上大括号:{ }
#include<stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age >= 18)
{
printf("成年了\n");
printf("ok\n");
}
return 0;
}
结果:
上述代码只有age>=18时,才会输入ok
1.4嵌套if
在if...else语句中,else可以和另一个if语句合用,构成多重判断。
示例:输入一个数,判断输入的整数是0还是正数,还是负数。
代码:
//嵌套if
#include<stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if (num == 0)
{
printf("输入的数字是0\n");
}
else
{
if (num > 0)
{
printf("输入的数字是正数\n");
}
else
{
printf("输入的数字是负数\n");
}
}
return 0;
}

事实上,上述代码还可以写成,下述代码与上述代码是等价的:
//与上述代码是等价的
#include<stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if (num == 0)
{
printf("输入的数字是0\n");
}
else if (num > 0)
{
printf("输入的数字是正数\n");
}
else
{
printf("输入的数字是负数\n");
}
return 0;
}
1.5悬空else问题
如果有多个if和else,可以记住一条规则,else总是跟最近的if匹配。以如下代码举例:

对于如上代码,我们可能会认为:a为0,不等于1,那就执行else语句,那结果就是haha
但是当运行上述代码时,什么也不输出
解释:这涉及了悬空else的问题,如果有多个if和else,可以记住一条原则,else总是跟最接近的if匹配。上述代码实际上else语句是跟第二个if(b==2)进行匹配的,这样后边的if...else..语句就是嵌套在第一个if(a==1)语句中的,如果if(a==1)不成立,那么嵌套在该语句中的if...else就不会执行,这就是为什么这个代码什么也不打印的原因。
2、关系运算符
C语言中用于比较的表达式,称为:关系表达式,在关系表达式中使用的运算符就称为关系运算符,关系运算符主要有如下六个:
(1)>大于运算符
(2)<小于运算符
(3)>=大于等于运算符
(4)<=小于等于运算符
(5)==相等运算符
(6)!=不等于运算符
关系运算符通常返回0或1来表示真假
C语言中,0表示假,所有非零值表示真。比如:20>12返回1,12>20返回0

关系运算符常用于if或while结构
注意:相等运算符==与赋值运算符=是两个不一样的运算符。
注意:多个关系运算符不宜连用,比如:i<j<k
该示例:i<j<k,连续使用两个小于运算符。虽然这是个合法的表达式,但是通常达不到想要的效果,即不能保证变量j的值在i和k之间。因为关系运算符是从左到右计算,所以上述代码实际执行的效果是:(i<k)<j.上面式子中,i<j返回0或1,所以上述式子最终是0或1与变量k进行比较。如果想要判断变量j的值是否在i和k之间,应该使用下面的写法:i<j && j<k(&&运算符下面会讲)
3、条件操作符
条件操作符也叫三目操作符,该操作符需要接收三个操作数,语法如下:
exp1 ? exp2 :exp3
条件操作符的计算逻辑是:如果exp1为真,则计算exp2,exp2的结果就是整个表达式的结果;如果exp1为假,则计算exp3,exp3的结果就是整个表达式的结果。
示例:
//使用条件操作符计算两个整型变量的最大值
#include<stdio.h>
int main()
{
int a = 0;
int b = 0;
scanf("%d", &a);
scanf("%d", &b);
int max_value = a > b ? a : b;
printf("%d与%d的最大值为:%d\n", a, b, max_value);
return 0;
}
结果:

1084

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



