目录
C语言是结构化的程序设计语言,这里的结构指的是顺序结构、选择结构、循环结构,C语言是能够实现这三种结构的,其实我们如果仔细分析,我们日常所见的事情都可以拆分为这三种结构或者这三种结构的组合。
我们可以使用if、switch实现分支结构,使用for、while、do while 实现循环结构。
3.1 if语句
1.1 if
if语句的语法形式如下:
if(表达式)
语句
表达式成立(为真),则语句执行;表达式不成立(为假),则语句不执行。
在C语言中,0为假,非0表示真,也就是表达式的结果如果是0,则语句不执行,表达式的结果如果不是0,则语句执行。
例:
#define _CRT_SECURE_NO_WARNINGS
//输入一个整数,判断是否为奇数
#include <stdio.h>
int main()
{
int a = 0;
//输入
scanf("%d",&a);
//判断和输出
if (a % 2 == 1)
printf("%d是奇数\n", a);
return 0;
}
易错点:
- scanf中&
- scanf中"%d"不要打成"%d\n"
- if中是==
1.2 else
如果一个数不是奇数,那就是偶数了,如果任意一个整数,我们要清楚的判断是奇数还是偶数怎么表示?这里就需要if...else...语句了,语法形式如下:
if(表达式)
语句1
else
语句2
例:
#define _CRT_SECURE_NO_WARNINGS
//输入一个整数,判断是否为奇数,如果是奇数打印是奇数,否则打印偶数。
#include <stdio.h>
int main()
{
int num = 0;
//输入
scanf("%d", &num);
//判断是奇数,输出
if (num % 2 == 1)printf("%d是奇数\n", num);
//否则是偶数,输出
else printf("%d是偶数\n", num);
return 0;
}
练习:输入一个年龄,>=18岁就输出成年,否则就输出未成年
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int age = 0;
//输入
scanf("%d", &age);
//>=18岁就输出成年
if (age >= 18)printf("成年\n");
//否则输出未成年
else printf("未成年\n");
return 0;
}
1.3 分支中包含多条语句
默认在if和else语句中默认都只控制一条语句,如:
#define _CRT_SECURE_NO_WARNINGS
#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语句同时控制2条语句,怎么办呢?那就要使用{}将代码括起来,else同理。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age >= 18)
{
printf("成年\n");
printf("可以谈恋爱了\n");
}
else
{
printf("未成年\n");
printf("不可以早恋哦\n");
}
return 0;
}
1.4 嵌套if
在if else语句中,else可以与另一个if语句连用,构成多重判断。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int num = 0;
//输入
scanf("%d", &num);
//判断等于0
if (num == 0)printf("输入的数字是0\n");
//不等于0
else
{
//大于0
if (num > 0)printf("输入的数字是正数\n"); //这里的if相当于嵌套在else语句中
//小于0
else printf("输入的数字是负数\n");
}
return 0;
}
练习:输入一个整数,如果是正数,再判断是奇数还是偶数,并输出;如果不是正数则输出:非正数。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
//输入一个整数
int num = 0;
scanf("%d", &num);
//如果是正数,再判断是奇数还是偶数,并输出
if (num > 0)
{
if (num % 2 == 1)printf("%d是奇数\n", num);
else printf("%d是偶数\n", num);
}
//如果不是正数则输出:非正数
else printf("非正数\n");
return 0;
}
练习:
- 输入一个人的年龄
- 如果年龄<18岁,打印"少年"
- 如果年龄在18岁至44岁打印"青年"
- 如果年龄在45岁至59岁打印"中老年"
- 如果年龄在60岁至89岁打印"老年"
- 如果90岁及以上打印"老寿星"
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
//输入一个人的年龄
int age = 0;
scanf("%d", &age);
//如果年龄<18岁,打印"少年"
if (age < 18)printf("少年\n");
else
{
//如果年龄在18岁至44岁打印"青年"
if (age <= 44)printf("青年\n");
else
{
//如果年龄在45岁至59岁打印"中老年"
if (age <= 59)printf("中老年\n");
else
{
//如果年龄在60岁至89岁打印"老年"
if (age <= 89)printf("老年\n");
//如果90岁及以上打印"老寿星"
else printf("老寿星\n");
}
}
}
return 0;
}
另一种展现方式:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age < 18)printf("少年\n");
else if (age <= 44)printf("青年\n");
else if (age <= 59)printf("中老年\n");
else if (age <= 89)printf("老年\n");
else printf("老寿星\n");
return 0;
}
tips: 按下Tab键时,会向后跳过一个单元格;按下Shift+Tab,则会返回到前一个单元格。
1.5 悬空else问题
#define _CRT_SECURE_NO_WARNINGS
#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;
}
很多初学者,上来判断a是0,不等于1,那就执行else,打印haha。
但是去运行代码,输出的结果是:不输出。
为什么呢?
这就是悬空 else 的问题。
如果有多个if和else,可以记住这样一条规则,else总是跟最接的if匹配。
上面的代码排版else和第一个if语句对齐,我们以为else是和第一个if匹配的,当if语句不成立的时候,自然想到的就是执行else,打印haha。但实际上else是和第二个if进行匹配的,这样后边的 if...else 语句是嵌套在第一个if语句中的,如果第一个 if 语句就不成立,嵌套 if 和else 就没机会执行了,最终不打印。
改成下面这样就更加容易理解了:
#define _CRT_SECURE_NO_WARNINGS
#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匹配,可以这样修改:
#define _CRT_SECURE_NO_WARNINGS
#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;
}
只要带上适当的大括号,代码的逻辑就会更加的清晰,所以以后在写代码的时候要注意括号的使用,让代码的可读性更高。