1.C语言语句结构
C语言是结构化的程序设计语言,这里的结构指的是顺序结构、选择结构、循环结构,C语言是能够实现这三种结构的,其实我们如果仔细分析,我们日常所见的事情都可以拆分为这三种结构或者这三种结构的组合。
我们可以使用 if、switch 实现分支结构,使用 for 、while 、do while 实现循环结构。
2.if 语句
2.1.if 语句的语法形式如下:
if (表达式)
语句
if 语句成立:表达式成立(为真),则语句执行,表达式不成立(为假),则语句不执行。
在C语言中,0为假,非0表示真,也就是表达式的结果如果是0,则语句不执行,表达式的结果如果是不是0,则语句执行。
接下来写个例子:
// 输⼊⼀个整数,判断是否为奇数
int main()
{
int i = 0; // 初始化
scanf("%d", &i); // 输入值
if (i % 2 == 1) // 表达式
{
printf("是奇数!"); // 语句
}
return 0;
}
执行结果:
流程图:
2.2.else 语句的语法形式如下:
if (表达式)
语句1
else
语句2
接下来写个例子:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
// 输入一个整数,判断是否为奇数,如果是奇数打印是奇数,否则打印数偶数。
int main()
{
int i = 0; // 初始化
scanf("%d", &i); // 输入整数
if (i % 2 == 1) // 如果 i 模 2 等于 1的 就是奇数
{
printf("%d是奇数!", i);
}
else // 如果不是等于 1的,就是偶数
{
printf("%d 是偶数!", i);
}
return 0;
}
运行结果:
2.3. 分支中包含多条语句
默认在 if 和 else 中,默认都只控制一条语句,比如:
# include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(age >= 18)
printf("成年了!\n");
printf("可以谈恋爱了!\n");
return 0;
}
上面的代码,你会发现输⼊的值不管是>=18 还是小于18,"可以谈恋爱了" 都会打印在屏幕上。
这是因为 if 语句只能控制一条语句,就是 printf("成年了\n");,if语句为真,则打印成年了if语句为假,则不打印,对于 printf("可以谈恋爱了\n");是独立存在的,不管if语句的条件的真假,都会被执行。那如果我们要if语句同时控制2条语句。
怎么办呢? 那就要使用将代码括起来else 后也可以跟上大括号。如下:
int main()
{
int age = 0;
scanf("%d", &age);
if (age >= 18) //if 后使⽤{} 控制多条语句-这个块也叫:程序块,或者复合语句
{
printf("成年了!\n");
printf("可以谈恋爱了!\n");
}
else // else 后使⽤{}控制多条语句-这个块也叫:程序块,或者复合语句
{
printf("未成年!\n");
printf("不可以早恋哦!\n");
}
return 0;
}
2.4.嵌套if
在 if else语句中,else 可以与另一个 if语句连用,构成多重判断。
例子:要求输入一个整数,判断输入的整数是0,还是正数或者负数。
int main()
{
int i = 0;
scanf("%d", &i);
if (i == 0)
{
printf("%d是零\n", i);
}
else if (i > 0)
{
printf("%d是正数\n", i);
}
else
{
printf("%d是负数\n", i);
}
return 0;
}
2.5.悬空else问题
如果有多个 if 和 else,i可以记住这样一条规则,else 总是跟最接近的 if 匹配
看下面的代码:
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
if (a == 1)
if (b == 2)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
这段代码输出什么呢?
其实什么都没有输出,初学者其实会犯的错误,上来就判断 a是0,不等于1,那就执行else子句,打印 haha,但是当你去运行的时候会发现,啥都没有。
为什么呢?
因为这就是悬空else的问题了,如果有多个 if 和 else,可以记住这样一条规则,else总是跟最接近的 if 匹配。
上面的代码排版,让 else 和第一个 if 语句对齐了,让我们以为 else是和第一个 if匹配的, 当 if 语句不成立的时候,自然想到的就是执行 else 子句,打印 haha ,但实际上 else 是和第二个 if 进行匹配的,这样后边的 if...else 语句是嵌套在第一个 if 语中的,如果第一个 if 语句就不成立,嵌套 if 和 ese 就没机会执行了,最终啥都不打印。
那来改进一下,如下:
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
if (a == 1)
{
if (b == 2)
printf("hehe\n");
else
printf("haha\n");
}
return 0;
}
如果希望 else 和第一个 if 匹配,可以改成这样,如下:
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
if (a == 1)
{
if (b == 2)
printf("hehe\n");
}
else
{
printf("haha\n");
}
return 0;
}