文章目录
引言
C语言是一门结构化的程序设计语言
- 顺序结构
- 选择结构( if 语句 / switch 语句 )
- 循环结构(while 循环 / for 循环 / do while 循环)
一、if语句
1.1 if
if语句的语法形式如下:
if(表达式) //真
语句 //假
//c语言中0表示假,非0表示真
例子: 输入一个整数,判断是否为奇数
int main()
{
int num = 0;
scanf("%d", &num);//输入
if (num % 2 == 1)//判断(数值相等需要用==)
printf("%d 是奇数\n", num);//输出
return 0;
}
下面我们通过流程图结构分分析此题
1.2 else
如果一个数不是奇数,那就是偶数了,如果任意一个整数,我们要清楚的判断是奇数还是偶数怎么表示呢?
这里需要 if…else… 语句
1 if(表达式)
2 语句1
3 else
4 语句2
例子: 输入一个整数,判断是否为奇数,如果是奇数打印时奇数,否则打印偶数
int main()
{
int num = 0;
scanf("%d", &num);//输入
if (num % 2 == 1)//判断
printf("%d 是奇数\n", num);//输出
else
printf("%d 是偶数\n", num);
return 0;
}
练习: 输入一个年龄,>=18岁就输出:成年,否则就输出:未成年
int main()
{
int age = 0;
scanf("%d",&age);
if(age>=18)
printf("成年人\n")
else
printf("未成年\n")
return 0 ;
}
1.3 分支中包含多条语句
默认在if和else语句中默认都只控制一条语句,比如:
int main()
{
int age = 0;
scanf("%d", &age);
if (age >= 18)
printf("成年\n");
printf("可以谈恋爱了\n");
return 0;
}
上面的代码,你会发现输入的值不管时>=18还是<18,"可以谈恋爱了"都会打印在屏幕上
if 语句只能控制一条语句,就是 printf(“成年了\n”);对于 printf(“可以谈恋爱了\n"),是单独存在的,不管if语句的条件真假,都会被执行
如果我们要同时控制两条语句,怎么办呢?需要使用{ }将代码括起来,else后也可以跟上大括号。如下:
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语句连用,构成多重判断。
比如:要求输入一个整数,判断输入的整数是0,还是正数或者负数。请看如下代码:
int main()
{
int num = 0;
scanf("%d", &num);
if (num == 0)
printf("num 是0\n");
else
{ //大括号可以去掉
if (num > 0)
printf("num 是正数\n");
else
printf("num 是负数\n");
}
return 0;
}
我们可以为此简化if…else…,代码如下:
int main()
{
int num = 0;
scanf("%d", &num);
if (num == 0)
printf("num 是0\n");
else if (num > 0)
printf("num 是正数\n");
else
printf("num 是负数\n");
return 0;
}//简化
练习:
int main()
{
int age = 0;
scanf("%d", &age);
if (age < 18)
printf("少年\n");
else if (age >= 18 && age <= 44)
printf("青年\n");
else if (age > 44 && age <= 59)
printf("中老年\n");
......
return 0;
}
1.5 悬空else问题
如果有多个if和else,可以记住这样一条规则,else总是跟最接近的if匹配。我们首先从下面代码开始
#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不等于1,那么就会执行haha。但是当你执行代码,输出的结果为:空。
这是因为悬空else的问题,如果有多个if和else,可以记住这样一条规则,else总是跟最近接近的if匹配
我们将代码改成如下,更通俗易解
#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匹配,可以这样修改代码:
#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个。
- > 大于运算符
- < 小于运算符
- = 大于等于运算符
- <= 小于等于运算符
- == 相等运算符
- != 不相等运算符
关系表达式通常返回0或1,表示真假。
C语言中,0表示假,所有非零值表示真。比如20>12 返回1;12>20 返回0.
int main()
{
int a = 3;
if (a == 3)
printf("hehe\n");
return 0;
}
注意相等运算符 ==(判断) 与赋值运算符 = 是两个不一样的运算符,不要混淆。
另一个需要避免的错误是:多个关系运算符不宜连用。
比如:我们输入⼀个年龄,如果年龄在18岁~36岁之间,我们输出青年。
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(18<=age<=36)
{
printf("⻘年\n");
}
return 0;
}
当我们输入10的时候,依然输出青年。这是因为表达式18<=10为假,所以18<=的结果是0,在拿0和36比较,0<=36为真,所以打印了青年。
那么可以使用 && 操作都来实现这道题的要求。
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(18<=age && age<=36) //逻辑操作符 &&
{
printf("⻘年\n");
}
return 0;
}
三、条件操作符
条件操作符也叫三目操作符,需要接受三个操作符的,形式如下:
1. exp ? exp2 : exp3 //三目操作符
2. 3+5//双目操作符
3. a++, -a //单目操作符
练习1: 使用条件操作符表示下面代码的逻辑
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
scanf("%d", &a);
if (a > 5)
b = 3;
else
b = -3;
printf("%d\n", b);
return 0;
}
改造后:
int main() //三目操作符
{
int a = 0;
int b = 0;
scanf("%d", &a);
b = (a > 5 ? 3 : -3);
printf("%d\n", b);
return 0;
}
练习2: 使用条件表达式实现找两个数中较大值。
int main()
{
int a = 0;
int b = 0;
int m = 0;
scanf("%d %d", &a, &b);
m = (a > b ? a : b);
printf("%d\n", m);
return 0;
}
四、逻辑操作符:&&,|| ,!
逻辑运算符提供逻辑判断功能,用于构建复杂的表达式。主要有以下的三个运算符。
- ! :逻辑取反运算符(改变单个表达式的真假)
- && :逻辑与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)。
- ||:逻辑或运算符,就是或者的意思(两侧至少有一个表达式为真,则为真,否则为假)。
注:c语言中,0 为假,非0 为真。
4.1 逻辑取反运算符 !
a | !a |
---|---|
非0 | 0 |
0 | 1 |
int main()
{
int a = 9;
printf("%d\n", !a); //打印结果为0(假)
return 0;
}
4.2 逻辑与运算符 &&
a | b | a&&b |
---|---|---|
非0 | 非0 | 1 |
非0 | 0 | 0 |
0 | 非0 | 0 |
0 | 0 | 0 |
比如:我们说月份6月到9月,是夏季,那使用代码怎么体现呢?
int main()
{
int month = 0;
scanf("%d", &month);
if (month >= 6 && month <= 9)
printf("夏季\n");
return 0;
}
4.3 逻辑或运算符
a | b | a II b |
---|---|---|
非0 | 非0 | 1 |
非0 | 0 | 1 |
0 | 非0 | 1 |
0 | 0 | 0 |
比如:一年中月份是12月或者1月或者2月是冬天,那么我们如何使用代码体现呢?
int main()
{
int month = 0;
scanf("%d", &month);
if (month==3 || month==9 || month == 12)
printf("冬季\n");
return 0;
}
4.4 练习:闰年的判断
输入一个年份year,判断year是否是闰年
闰年的判断规则:
1.能被4整除并且不能被100整除是闰年
2.能被400整除是闰年
int main()
{
int year = 0;
scanf("%d",&year);
if((year % 4 ==0 && year %100 !=0)||year % 400 = 0))
printf("闰年\n");
else
printf("不是闰年\n");
return 0;
}
4.5 短路
c语言逻辑运算符还有⼀个特点,它总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是保证的。
如果左边的表达式满足逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为短路。
if(month>=3 &&month<=5)
if(month == 12 || month==1 || month == 2)
像这种仅仅根据左操作数的结果就能知道整个表达式的结果,不再对右操作数进⾏计算的运算称为短路求值。
下面我们举几个例子,大家来练习一下:
int main()
{
int i = 0, a = 0, b = 2, c = 3, d = 4;
i = a++ && ++b && d++;//短路
printf("a=%d\n b=%d\n c=%d\n d=%d\n", a, b, c, d);
return 0;
}
//输出结果为 1 2 3 4
int main()
{
int i = 0, a = 0, b = 2, c = 3, d = 4;
i = a++ && ++b && d++;
//i = a++||++b||d++;
printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);
printf("i = %d\n", i);
return 0;
}
//输出结果为 1 2 3 4 i=0
int main()
{
int i = 0, a = 1, b = 2, c = 3, d = 4;
i = a++ && ++b && d++;
printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);
printf("i = %d\n", i);
return 0;
}
//输出结果为 2 3 3 5 1
int main()
{
int i = 0, a = 1, b = 2, c = 3, d = 4;
//i = a++ && ++b && d++;
i = a++ || ++b || d++;
printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);
printf("i = %d\n", i);
return 0;
}
//输出结果为:2 3 3 4 1
五、switch语句
除了if语句外,c语言还提供了switch语句来实现分支结构。
switch语句是一种特殊形式的if…else… 结构,用于判断条件有多个结果的情况。
switch (expression) {
case value1: statement
case value2: statement
...
default: statement
}
5.1 if语句和switch语句的对比
练习:输入任意一个整数值,计算除3之后的余数
if语句
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语句
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;
}
上述代码中,我们需要注意的点
- case和后边的数字之间必须有空格
- 每一个case语句中的代码执行完成后,需要加上break,才能跳出这个switch语句
5.3 switch语句中的default
在使用switch语句的时候,我们经常可能遇见一种情况,比如switch后表达式中的值无法匹配代码中的case语句的时候,这时候就要在switch语句中加入default子句。
switch (expression) {
case value1: statement
case value2: statement
default: statement
}
就比如打印星期的练习,如果day的输入不是1~7的值,如果我们要提示:输入错误,则可以这样完成代码:
int main()
{
int month = 0;
scanf("%d", &month);
switch (month)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日\n");
break;
case 6:
case 7:
printf("休息日\n");
break;
default: //默认语句 一般情况下默认放在最后
printf("输入错误\n");
break;
}
return 0;
}
2024/11/9 end
标签:语句,int,else,运算符,循环,printf,main,分支 From: https://blog.csdn.net/weixin_64957584/article/details/143635115