C语言是结构化的程序设计语言
- 顺序结构
- 选择结构
- 循环结构
分支语句对应的就是选择结构,循环语句对应的就是循环结构
分支语句
- if...else
- switch
循环语句
- while
- for
- do...while
goto语句
语句
C语言中由分号隔开的就是一条语句,比如:
#include <stdio.h>
int main()
{
printf("Hello, world!\n");
3 + 5;
;//空语句
return 0;
}
分支语句
if语句
语法结构
if(表达式)
语句;
//表达式中的值为真则执行语句,为假则不执行
if(表达式)
语句1;
else
语句2;
//表达式中的值为真,则执行语句1,为假则执行语句2
C语言中如何表示真假?
非0 是 真 例如 -1 为真
0 是 假
#include <stdio.h>
int main()
{
int age = 10;
if(age >= 18)
printf("成年");
else
printf("未成年");
return 0;
}
通过age的值判断应该执行哪些语句
if和else后面默认只跟一条语句
#include <stdio.h>
int main()
{
int age = 20;
if(age >= 18)
printf("成年\n");
else
printf("未成年\n");
printf("不能喝酒\n");
return 0;
}
所以如果想让if和else控制多条语句,则要给语句加上大括号
#include <stdio.h>
int main()
{
int age = 20;
if(age >= 18)
printf("成年\n");
else
{
printf("未成年\n");
printf("不能喝酒\n");
}
return 0;
}
if...else语句的多分支情况
为什么明明age的值是60,还打印出青年呢?
因为 18 <= age < 26 这个写法是错误的,程序执行到这会先判断 18 <= age,这是成立的所以18 <= age 被替换成 1,替换后的 1 < 26 也成立,所以整个表达式为 真,最终输出青年
#include <stdio.h>
int main()
{
int age = 20;
if(age < 18)
printf("少年\n");
else if(age >= 18 && age < 26)
printf("青年\n");
else if(age >= 26 && age < 40)
printf("中年\n");
else if(age >= 40 && age < 60)
printf("壮年\n");
else if(age >= 60 && age < 100)
printf("老年\n");
else
printf("老不死\n");
return 0;
}
悬空else
判断如下代码的结果:
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1)
if(b == 2)
printf("1\n");
else
printf("2\n");
return 0;
}
运行结果什么都没打印,这就是else匹配的问题
else是和离他最近的if匹配
而上述代码中的else应该和if(b == 2)匹配,但是if(a == 1)不成立,则无法进入if(b == 2)这里,所以什么都没打印
由此可知,代码的书写风格非常重要
if书写格式的对比
if(condition){
reutrn x;
}
return y;
if(condition)
{
return x;
}
else
{
return y;
}
这两个代码本质是一样的,因为return运行以后,后面的代码就不执行了
但是第二种代码风格更好
#include <stdio.h>
int main()
{
int num = 1;
if(num == 5)
{
printf("1\n");
}
return 0;
}
#include <stdio.h>
int main()
{
int num = 1;
if(5 == num)
{
printf("1\n");
}
return 0;
}
这两个代码本质也是一样的,num == 5和5 == num相比,5 == num可以防止少写一个等号,从而导致if后面的表达式恒为 真
判断一个数是奇数还是偶数
#include <stdio.h>
int main()
{
//判断一个数是否为奇数
int num = 0;
printf("请输入一个数字:");
scanf("%d", &num);
if(num % 2 == 1 || num % 2 == -1)
{
printf("%d是奇数\n", num);
}
else
{
printf("%d是偶数\n", num);
}
return 0;
}
输出1~100之间的所有奇数
#include <stdio.h>
int main()
{
//输出1~100之间的奇数
int i = 0;
while(i <= 100)
{
if(i % 2 == 1)
{
printf("%d ", i);
}
i++;
}
return 0;
}