目录
第三章:分支循环结构
第一节:if语句
📖读书笔记
-
if语句 · 其一:
if语句是逻辑判断语句其中的一种,它的执行条件是控制表达式为真就执行这一条件下的语句,既然这样,就一定会有控制表达式为假的情况,所以if语句就称为逻辑判断语句,判断的结果有真和假两种情况,比如判断一个数是否被5整除的具体代码如下:
//判断一个数是否被5整除
#include<stdio.h>
int main()
{
int no = 0;
printf("请输入一个整数:");
scanf("%d", &no);
if (no % 5)
puts("输入的整数不能被5整除。");
return 0;
}
上述代码中的no%5就是if语句的控制表达式,如果no能整除5,那么这个表达式的结果应该是0,0就是假,就不执行里面的puts语句;反之,表达式的结果非零,就为真,就执行puts语句。
C语言中,0表示假,一切的非零表示真。
-
奇数的判定:
想要判断一个数是否是奇数,通常的方法是判断这个数是否能整除2,如果不能,就说明这个数字是奇数,具体代码如下:
//判断一个整除是否是奇数
#include<stdio.h>
int main()
{
int no = 0;
printf("请输入一个整数:");
scanf("%d", &no);//键盘输入36
if (no % 2)
puts("输入的整数是奇数。");//打印结果为:输入的整数是奇数。
return 0;
}
if语句的控制表达式no%2的含义是如果这个数能整除2,就说明这个数是偶数,反之是奇数。
-
if语句 · 其二:
在上面的判断一个整除能否被5整除的程序中,如果能被5整除,可是却不显示任何信息,这显然是不合适的,所以if语句通畅还要和else语句搭配使用,else语句表示了if语句中的一个分支。
//判断一个数是否被5整除
#include<stdio.h>
int main()
{
int no = 0;
printf("请输入一个整数:");
scanf("%d", &no);
if (no % 5)
puts("输入的整数不能被5整除。");
else
puts("输入的整除能被5整除。");
return 0;
}
如果if语句中的控制表法式为真,就执行if语句中的内容,否则执行else语句中的内容,这就是if...else语句。
-
奇数 · 偶数的判断:
那么有了else语句的加入,判断奇偶数的程序就可以更加完善了,代码如下:
//判断一个整除是否是奇数
#include<stdio.h>
int main()
{
int no = 0;
printf("请输入一个整数:");
scanf("%d", &no);
if (no % 2)
puts("输入的整数是奇数。");
else
puts("输入的整数是偶数。");
return 0;
}
-
非0的判断:
C语言中,0就代表假,一切非0表示真,利用这个特点,可以判断一个数是否为0,也就是直接把这个变量当成if语句的控制表达式即可,代码如下:
//判断输入的数字是否为0
#include<stdio.h>
int main()
{
int num = 0;
printf("请输入一个整数:");
scanf("%d", &num);
if (num)
puts("该整数不是0。");
else
puts("该整数是0。");
return 0;
}
-
if语句结构图:
下图是if语句的语法结构图,这也是最基本、最常见的一种,首先判断if语句中的控制表达式的真假,如果为真,就执行if语句中的内容,否则执行else语句中的内容,所以如果没有意外的话,if语句和else语句中的内容只能也必须执行一个。
-
相等运算符:
C语言中支持判断两个数或表达式的值是否相等,如果想判断相等就使用“==”运算符,判断不相等就使用“!=”运算符,下面代码是判断两个整数是否相等。
//判断两个整数是否相等
#include<stdio.h>
int main()
{
int n1 = 0, n2 = 0;
puts("请输入两个整数。");
printf("整数n1:");
scanf("%d", &n1);
printf("整数n2:");
scanf("%d", &n2);
if (n1 == n2)//如果相等,表达式为真,执行if语句,否则执行else语句
printf("它们相等。");
else
printf("它们不相等。");
return 0;
}
当然上述代码中if语句的条件也可以写成n1 != n2,这样的话,if语句和else语句中的printf语句就需要调换位置了。
-
余数的判断:
判断所输入的整数的个位数是否为5的代码如下:
//判断所输入的整数的个位数是否为5
#include<stdio.h>
int main()
{
int num = 0;
printf("请输入一个整数:");
scanf("%d", &num);
if ((num % 10) == 5)
puts("该整数的个位数是5。");
else
puts("该整数的个位数不是5。");
return 0;
}
if语句中的控制表达式(num % 10) == 5的含义是num除10取余数,如果余数是5,表达式为真,否则为假,其中将num % 10用小括号括起来的目的是先执行这个部分,然后将这个部分的值与5进行比较看是否相等。
-
关系运算符:
C语言中不仅可以判断两个数大小是否相等,还可以判断两个数之间的大小关系,于是就有4个关系运算符。
运算符 | 示例 | 含义 |
---|---|---|
< | a < b | 判断a是否小于b。如果a小于b,结果非0,否则结果为0,结果类型都为int |
> | a > b | 判断a是否大于b。如果a大于b,结果非0,否则结果为0,结果类型都为int |
<= | a <= b | 判断a是否小于等于b。如果a小于等于b,结果非0,否则结果为0,结果类型都为int |
>= | a >= b | 判断a是否大于等于b。如果a大于等于b,结果非0,否则结果为0,结果类型都为int |
利用关系运算符就可以判断所有整数的大小关系,下面判断一个整数是正数、负数还是0。
//判断一个整数是否为正数
#include<stdio.h>
int main()
{
int no = 0;
printf("请输入一个整数:");
scanf("%d", &no);
if (no == 0)
puts("该整数为0。");
else if (no > 0)
puts("该整数为正数。");
else
puts("该整数为负数。");
return 0;
}
上述代码中,出现了第三个分支else if语句,这个语句的功能是用来补充if语句的。它和if语句一样,后面括号中都要写控制表达式,并且表达式为真就执行该语句中的内容,否则执行else中的内容,且该语句必须写在if语句和else语句之间,带有else if语句的语法结构图如下:
在一个if条件语句中,else if语句可以有0条至多条,每条语句都对应着一个条件,而if语句和else语句只能是1条,不管是if语句、else语句还是else if语句,它们中的内容可有可无(没有内容用;表示空语句代替),但是if语句和else if语句的判断条件必须存在,语法结构如下:
if(判断条件1)
执行代码1
else if(判断条件2)
执行代码2
else if(判断条件3)
; //这个else if语句没有执行代码,用;表示一条空语句
else if(判断条件4)
执行代码3
... //这里简单代表有n条else if语句
else if(判断条件n)
执行代码n-1
else
执行代码n
-
嵌套if语句:
在if语句中再写if语句就是嵌套if语句,可以写一个或多个,但是也不要太多,避免逻辑过于复杂,最多嵌套五六层就够了,如何判断一个正数的奇偶呢,具体代码如下:
//判断一个正数的奇偶
#include<stdio.h>
int main()
{
int no = 0;
printf("请输入一个整数:");
scanf("%d", &no);
//判断正负
if (no > 0)
//判断奇偶
if (no % 2 == 0)
puts("该整数为偶数");
else
puts("该整数为奇数");
else
puts("您输入的不是正数。\a\n");
return 0;
}
当一个程序中,嵌套了多个if...else语句时,if语句和else语句的匹配规则是:else语句与它最近的没有被匹配的if语句相匹配。
-
判断:
控制表达式的结果都会有一个值(极少部分除外),程序对这个值的真假进行检测,就称为判断。
-
计算较大值:
如何使用if语句计算两个整数的较大值呢?首先可以先定义两个变量用来表示两个整数,再将这两个变量的值进行大小比较,进而得出较大值,具体代码如下:
//计算两个整数的较大值
#include<stdio.h>
int main()
{
int n1 = 0, n2 = 0;
puts("请输入两个整数。");
printf("整数n1:");
scanf("%d", &n1);//键盘输入83
printf("整数n2:");
scanf("%d", &n2);//键盘输入45
//比较
if (n1 > n2)
printf("较大的数是%d。\n", n1);//打印结果为:较大的数是83。
else
printf("较大的数是%d。\n", n2);
return 0;
}
还可以把较大的数放在第三个变量max中,然后输出max即可,代码如下:
//计算两个整数的较大值
#include<stdio.h>
int main()
{
int n1 = 0, n2 = 0, max = 0;
puts("请输入两个整数。");
printf("整数n1:");
scanf("%d", &n1);//键盘输入83
printf("整数n2:");
scanf("%d", &n2);//键盘输入45
//比较
if (n1 > n2)
max = n1;
else
max = n2;
printf("较大的数是%d。\n", max);//打印结果为:较大的数是83。
return 0;
}
-
计算三个数的最大值:
这个程序比计算两个数的较大值复杂一些,需要定义四个变量,前三个代表三个整数,最后一个代表最大值,在if判断语句中也有多种写法,代码如下:
//计算三个整数的最大值
#include<stdio.h>
int main()
{
int n1 = 0, n2 = 0, n3 = 0, max = 0;
puts("请输入三个整数。");
printf("整数n1:");
scanf("%d", &n1);//键盘输入45
printf("整数n2:");
scanf("%d", &n2);//键盘输入83
printf("整数n3:");
scanf("%d", &n3);//键盘输入62
//比较
max = n1;//先假设n1是最大值
if (n2 > max)
max = n2;
if(n3 > max)
max = n3;
printf("最大值是%d。\n", max);//打印结果为:最大值是83。
return 0;
}
上述代码的比较逻辑是先假设n1是最大值,把n1给max,然后用另外两个数分别与这个数进行比较。如果n2比n1大,就把n2给max,之后n2与n3进行比较;如果n2比n1小,此时还不能说明n1最大,还要将n1与n3进行比较。
if语句还有其他几种写法,比如:
//计算三个整数的最大值
#include<stdio.h>
int main()
{
int n1 = 0, n2 = 0, n3 = 0, max = 0;
puts("请输入三个整数。");
printf("整数n1:");
scanf("%d", &n1);//键盘输入45
printf("整数n2:");
scanf("%d", &n2);//键盘输入83
printf("整数n3:");
scanf("%d", &n3);//键盘输入62
//比较
if (n1 > n2)
if (n1 > n3)
max = n1;
else
if (n2 > n3)
max = n2;
else
max = n3;
else
if (n1 > n3)
max = n2;
else
if (n2 > n3)
max = n2;
else
max = n3;
printf("最大值是%d。\n", max);//打印结果为:最大值是83。
return 0;
}
这种写法使用了嵌套if,比上面使用两个if语句的逻辑明显复杂许多,想要更简单的表达,直接使用一个条件运算符即可。
-
条件运算符:
使用条件运算符? :可以大大简化代码量,提高程序的可读性。
//使用条件运算符求两个整数的较大值
#include<stdio.h>
int main()
{
int n1 = 0, n2 = 0, max = 0;
puts("请输入两个整数。");
printf("整数n1:");
scanf("%d", &n1);//键盘输入83
printf("整数n2:");
scanf("%d", &n2);//键盘输入45
printf("较大的数是%d。\n", ((n1 > n2) ? (max = n1) : (max = n2)));//打印结果为:较大的数是83。
return 0;
}
条件运算符的执行逻辑是先判断?前面的表达式,如果成立,则执行?后面的表达式,否则执行:后面的表达式。
条件运算符不仅可以求两个数的较大值,还可以求三个数的最大值,代码如下:
//使用条件运算符求三个数的最大值
#include<stdio.h>
int main()
{
int n1 = 0, n2 = 0, n3 = 0, max = 0;
puts("请输入三个整数。");
printf("整数n1:");
scanf("%d", &n1);//键盘输入45
printf("整数n2:");
scanf("%d", &n2);//键盘输入83
printf("整数n3:");
scanf("%d", &n3);//键盘输入62
//判断
max = n1;
(n2 > max) ? (max = n2) : (max);//如果n2大于最大值,则最大值是n2,否则最大值不变
(n3 > max) ? (max = n3) : (max);//如果n3大于最大值,则最大值是n3,否则最大值不变
printf("最大值是%d。\n", max);//打印结果为:最大值是83。
return 0;
}
-
差值计算:
运用条件运算符还可以计算两个整数的差值,代码如下:
//运用条件运算符计算两个整数的差值
#include<stdio.h>
int main()
{
int n1 = 0, n2 = 0;
puts("请输入两个整数。");
printf("整数n1:");
scanf("%d", &n1);//键盘输入15
printf("整数n2:");
scanf("%d", &n2);//键盘输入32
printf("它们的差是%d。\n", ((n1 > n2) ? (n1 - n2) : (n2 - n1)));//打印结果为:它们的差是17。
return 0;
}
-
复合语句(程序块):
复合语句就是使用{}包裹起来的语句,也被称为程序块。如果if语句没有被{}包裹,则只能写一条语句,被{}包裹后可以写多条语句,比如:
if(判断条件)
语句1;
语句2; //语句1是if语句中的内容,语句2不是
if(判断条件)
{
语句3;
语句4;
语句5;
}
语句6; //语句3、4、5是if语句中的内容,语句6不是
同样,else if语句和else语句都可以被{}包裹起来形成程序块而写多条语句,否则只能写一条语句。下面通过求两个整数的较大值和较小值来感受程序块:
//求两个整数的较大值和较小值
#include<stdio.h>
int main()
{
int n1 = 0, n2 = 0, max = 0, min = 0;
puts("请输入两个整数。");
printf("整数n1:");
scanf("%d", &n1);//键盘输入83
printf("整数n2:");
scanf("%d", &n2);//键盘输入45
//比较
if (n1 > n2)
{
max = n1;
min = n2;
}
else
{
max = n2;
min = n1;
}
printf("较大的数是%d。\n", max);//打印结果为:较大的数是83。
printf("较小的数是%d。\n", min);//打印结果为:较小的数是45。
return 0;
}
如果if判断结构中,写一条语句就可以了,但还是尽量写{},这是标准的结构,提高了代码的可读性。
-
逻辑运算符:
如果控制表达式不只是一个表达式,而是由多个表达式的结果组成的条件呢?比如要求表达式的结果既要大于5,又要小于10,这就需要使用逻辑运算符,逻辑运算符有两个,一个是&&(逻辑与运算),另一个是||(逻辑或运算)。
逻辑与是左右两个操作数都为真,结果才为真,有一个为假,结果就是假。逻辑或是左右两个操作数都为假,结果才为假,有一个为真,结果就是真。下面是使用逻辑运算符判断月份所处的季节,代码如下:
//判断月份所处的季节
#include<stdio.h>
int main()
{
int month = 0;
printf("请输入月份:");
scanf("%d", &month);//键盘输入8
if (month >= 3 && month <= 5)
printf("%d月是春季。\n", month);
else if (month >= 6 && month <= 8)
printf("%d月是夏季。\n", month);//打印结果为:8月是夏季。
else if (month >= 9 && month <= 11)
printf("%d月是秋季。\n", month);
else if (month >= 12 && month <= 2)
printf("%d月是冬季。\n", month);
else
printf("%d月不存在。\n", month);
return 0;
}
探究为什么不直接写3 <= month <= 5,而是使用逻辑运算符:
表达式3 <= month <= 5的执行顺序是从左向右执行,也就是先判断month是否大于等于3,如果成立,则表达式变成1 <= 5,不成立就变成0 <= 5,所以说不管month是否大于3,结果都为真,这显然是错误的。
上述代码还有其他写法,比如使用||运算符,具体如下:
//判断月份所处的季节
#include<stdio.h>
int main()
{
int month = 0;
printf("请输入月份:");
scanf("%d", &month);//键盘输入8
if (month <= 0 || month >= 13)
printf("%d月不存在。\n", month);
else if (month <= 2 || month >= 12)
printf("%d月是冬季。\n", month);//打印结果为:8月是夏季。
else if (month >= 9)
printf("%d月是秋季。\n", month);
else if (month >= 6)
printf("%d月是夏季。\n", month);
else
printf("%d月是春季。\n", month);
return 0;
}
我们看到上面代码中,else if语句的判断条件似乎不完整,比如如果是month >= 9就都列为秋季,写似乎有些不合适,如果month是12、13或14呢?但这却是正确的写法,之所以这样写是因为if条件结构是从上到下依次执行的,所以如果month不在区间[1, 12]中,就会输出该月份不存在,之后如果是小于等于2,大于等于12,就直接输出改月份是冬季,所以执行到这里,month只能是区间[3, 11]之间的数了,如果大于等于9就是秋季。继续向下执行,month是区间[3, 8]之间的数,大于等于6就是夏季,之后month是区间[3, 5]之间的数,就只能是春季了。
-
短路求值:
在进行短路求值时,要先弄清一件事就是短路指的是什么。短路是使用逻辑运算符时发生的一种现象:当&&左操作数为假时,程序不再向下进行(因为结果一定为假);当||左操作数为真时,程序不再向下进行(因为结果一定为真),这就是短路现象。
//短路求值
#include<stdio.h>
int main()
{
int a = 3, b = 5, c = 10, d = 0;
a = (a - 3) || ((c - 2) && d);
b = (c + d) && (b - a) || (c * 2);
c = (a - 1) || d && (c - a / 2);
d = (b - 1) && ((c * d) || (a + 1));
printf("a = %d, b = %d, c = %d, d = %d\n", a, b, c, d);//打印结果为:a = 0, b = 1, c = 1, d = 0
//第一个表达式:
//a - 3为假,c - 2为真,d为假,所以表达式(c - 2) && d为假,所以整体为假,结果a = 0
//第二个表达式:
//c + d为真,b - a为真,所以表达式(c + d) && (b - a)结果为真,整体为真,b = 1
//第三个表达式:
//a - 1为真,d为假,所以表达式(a - 1) || d为真,c - a / 2为真,所以整体为真,c = 1
//第四个表达式:
//b - 1为假,c * d为假,a + 1为真,所以表达式(c * d) || (a + 1)为真,整体为假,d = 0
a = a && (b - 1) && (d + 1);
b = (a + 1) || (c - 1) || d;
c = ((a + b) && (d) && (b - 1)) && a;
d = (c + 1) || (b - 1) || (c + d);
printf("a = %d, b = %d, c = %d, d = %d\n", a, b, c, d);//打印结果为:a = 0, b = 1, c = 0, d = 1
//计算结果之前,a = 0, b = 1, c = 1, d = 0
//第一个表达式:
//a为假,所以整体为假,a = 0
//第二个表达式:
//a + 1为真,所以整体为真,b = 1
//第三个表达式:
//a + b为真,d为假,所以表达式(a + b) && (d)的结果为假,整体为假,c = 0
//第四个表达式:
//c + 1为真,所以整体为真,d = 1
return 0;
}
所以我们可以得出结论,如果一个逻辑表达式中全都是||或&&运算符时,才可以利用短路现象求值,两种运算符都存在时不可以利用。
📝课后习题
-
练习3-1:
编写一段程序,像下边这样输入两个整数值,如果后者是前者的约数,则显示“B是A的约数”。如果不是,则显示“B不是A的约数”。
请输入两个整数。
整数A:17
整数B:5
B不是A的约数。
✏️解答:
//练习3-1
#include<stdio.h>
int main()
{
int a = 0, b = 0;
printf("请输入两个整数。\n");
printf("整数A:");
scanf("%d", &a);//键盘输入17
printf("整数B:");
scanf("%d", &b);//键盘输入5
if (a % b == 0)
printf("B是A的约数。\n");
else
printf("B不是A的约数。\n");//打印结果为:B不是A的约数
return 0;
}
是不是约数只要看A能否整除B即可。
-
练习3-2:
请考虑一下,如果把代码清单3-9最后的else变为else if(no < 0),结果会怎样呢?
//代码清单3-9
//判断输入的整数的符号
#include<stdio.h>
int main()
{
int no = 0;
printf("请输入一个整数:");
scanf("%d", &no);
if (no == 0)
puts("该整数为0。");
else if (no > 0)
puts("该整数为正数。");
else
puts("该整数为负数。");
return 0;
}
✏️解答:
如果将else变成else if(no < 0)的话,运行结果依然正确。
if条件判断中,if语句必须存在,但是else if语句和else语句可有可无,即使有else if语句,else语句也可以没有。
-
练习3-3:
编写一段程序,像下边那样输入一个整数值,显示出它的绝对值。
请输入一个整数:-8
绝对值是8。
✏️解答:
//练习3-3
#include<stdio.h>
int main()
{
int num = 0;
printf("请输入一个整数:");
scanf("%d", &num);//键盘输入-8
//方法一:使用-运算符对结果取反
printf("绝对值是%d。\n", -num);//打印结果为:绝对值是8。
//方法二:使用if判断
if (num >= 0)
printf("绝对值是%d。\n", num);
else
//直接打印一个负号
printf("绝对值是%d。\n", -num);//打印结果为:绝对值是8。
//方法三:使用条件运算符
printf("绝对值是%d。\n", (num >= 0) ? num : -num);//打印结果为:绝对值是8。
return 0;
}
-
练习3-4:
编写一段程序,像下边这样输入两个整数,如果两数值相等,则显示“A和B相等。”。如果A大于B,则显示“A大于B。”。如果A小于B,则显示“A小于B。”。
请输入两个整数。
整数A:54
整数B:12
A大于B。
✏️解答:
//练习3-4
#include<stdio.h>
int main()
{
int a = 0, b = 0;
printf("请输入两个整数。\n");
printf("整数A:");
scanf("%d", &a);//键盘输入54
printf("整数B:");
scanf("%d", &b);//键盘输入12
//判断
if (a > b)
{
printf("A大于B。\n");//打印结果为:A大于B。
}
else if(a < b)
{
printf("A小于B。\n");
}
else
{
printf("A和B相等。\n");
}
return 0;
}
-
练习3-5:
编写一段程序,确认相等运算符和关系运算符的运算结果是1和0。
✏️解答:
//练习3-5
#include<stdio.h>
int main()
{
int a = 1, b = 2;
printf("a == b:%d\n", a == b);//打印结果为:a == b:0
printf("a != b:%d\n", a != b);//打印结果为:a != b:1
printf("a < b:%d\n", a < b);//打印结果为:a < b:1
printf("a > b:%d\n", a > b);//打印结果为:a > b:0
printf("a <= b:%d\n", a <= b);//打印结果为:a <= b:1
printf("a >= b:%d\n", a >= b);//打印结果为:a >= b:0
return 0;
}
-
练习3-6:
编写一段程序,计算出输入的三个整数中的最小值并显示,注意使用if语句。
✏️解答:
//练习3-6
#include<stdio.h>
int main()
{
int a = 0, b = 0, c = 0, min = 0;
printf("请输入三个整数:");
scanf("%d %d %d", &a, &b, &c);//键盘输入1 2 3
//判断
min = a;
if (b < min)
{
min = b;
}
if (c < min)
{
min = c;
}
printf("三个数中的最小值是%d\n", min);//打印结果为:三个数中的最小值是1
return 0;
}
-
练习3-7:
编写一段程序,计算出输入的四个整数中的最大值并显示,注意使用if语句。
✏️解答:
//练习3-7
#include<stdio.h>
int main()
{
int a = 0, b = 0, c = 0, d = 0, max = 0;
printf("请输入四个整数:");
scanf("%d %d %d %d", &a, &b, &c, &d);//键盘输入3 1 4 2
//判断
max = a;
if (b > max)
max = b;
if (c > max)
max = c;
if (d > max)
max = d;
printf("四个数中的最大值是%d\n", max);//打印结果为:四个数中的最大值是4
return 0;
}
-
练习3-8:
使用if语句替换代码清单3-15程序中的条件运算符,实现同样的功能。
//代码清单3-15
//计算输入的两个整数的差并显示(条件运算符)
#include<stdio.h>
int main()
{
int n1 = 0, n2 = 0;
puts("请输入两个整数。");
printf("整数n1:");
scanf("%d", &n1);//键盘输入15
printf("整数n2:");
scanf("%d", &n2);//键盘输入32
printf("它们的差是%d。\n", ((n1 > n2) ? (n1 - n2) : (n2 - n1)));//打印结果为:它们的差是17。
return 0;
}
✏️解答:
//练习3-8
#include<stdio.h>
int main()
{
int n1 = 0, n2 = 0;
puts("请输入两个整数。");
printf("整数n1:");
scanf("%d", &n1);//键盘输入15
printf("整数n2:");
scanf("%d", &n2);//键盘输入32
if (n1 > n2)
printf("它们的差是%d。\n", n1 - n2);
else if(n1 < n2)
printf("它们的差是%d。\n", n2 - n1);//打印结果为:它们的差是17。
else
printf("它们的差是0。\n");
return 0;
}
-
练习3-9:
使用条件运算符替换练习3-6的程序中的if语句,实现同样的功能。
✏️解答:
//练习3-9
#include<stdio.h>
int main()
{
int a = 0, b = 0, c = 0, min = 0;
printf("请输入三个整数:");
scanf("%d %d %d", &a, &b, &c);//键盘输入1 2 3
min = a;
(b < min) ? (min = b) : min;
(c < min) ? (min = c) : min;
printf("三个数中的最小值是%d\n", min);//打印结果为:三个数中的最小值是1
return 0;
}
-
练习3-10:
编写一段程序,像下边这样输入三个整数,如果三个数都相等,则显示“三个数都相等。”。如果其中任意两个值相等,则显示“有两个值相等。”。如果上述两种情况都不满足,则显示“三个值各不相同。”。
请输入三个整数。
整数A:12
整数B:35
整数C:12
有两个值相等。
✏️解答:
//练习3-10
#include<stdio.h>
int main()
{
int a = 0, b = 0, c = 0, n1 = 0, n2 = 0;
printf("请输入三个整数。\n");
printf("整数A:");
scanf("%d", &a);//键盘输入12
printf("整数B:");
scanf("%d", &b);//键盘输入35
printf("整数C:");
scanf("%d", &c);//键盘输入12
//判断
n1 = (a == b) && (a == c) && (b == c);//n1为真,三个整数都相等
if (n1 == 1)
{
printf("三个值都相等。\n");
return 0;
}
n2 = (a == b) || (a == c) || (b == c);//n2为真,有两个整数相等
if (n2 == 1)
{
printf("有两个值相等。\n");//打印结果为:有两个值相等。
return 0;
}
//如果n1和n2都为假,三个整数都不相同
printf("三个值各不相同。\n");
return 0;
}
-
练习3-11:
编写一段程序,像下边这样输入两个整数,如果它们的差值小于等于10,则显示“它们的差小于等于10。”。否则,显示“它们的差大于等于11。”,请使用逻辑或运算符。
请输入两个整数。
整数A:12
整数B:7
它们的差小于等于10。
✏️解答:
//练习3-11
#include<stdio.h>
int main()
{
int a = 0, b = 0, n1 = 0, n2 = 0;
printf("请输入两个整数。\n");
printf("整数A:");
scanf("%d", &a);//键盘输入12
printf("整数B:");
scanf("%d", &b);//键盘输入7
//判断
n1 = n1 || (a - b <= 10);//如果n1为真,说明a - b <= 10成立
if (n1 == 1)
{
printf("它们的差值小于等于10。\n");//打印结果为:它们的差值小于等于10。
return 0;
}
n2 = n2 || (a - b >= 11);//如果n2为真,说明a - b >= 11成立
if (n2 == 1)
{
printf("它们的差值大于等于11。\n");
return 0;
}
}
第二节:switch语句
📖读书笔记
-
switch语句和break语句:
switch语句是另一种条件判断结构,在switch语句中,包含了case语句、break语句和default语句。case语句类似于if语句中的每一个分支,如果switch语句括号中的表达式结果等于cast语句中常量表达式的结果,就执行case语句中的内容。
注意cast语句后只能写常量表达式。
如果判断一个数除以3是能整除还是有余数,使用if语句和switch语句都可以判断,下面是使用switch语句的代码:
//判断一个数除以3的余数
#include<stdio.h>
int main()
{
int no = 0;
printf("请输入一个整数:");
scanf("%d", &no);//键盘输入37
switch (no % 3)
{
case 0:
puts("该整数能被3整除。");
break;
case 1:
puts("该整数除以3的余数是1。");//打印结果为:该整数除以3的余数是1。
break;
case 2:
puts("该整数除以3的余数是2。");
break;
}
return 0;
}
执行switch语句时,先执行表达式no % 3,如果结果为0,则执行case 0中的代码,之后break语句直接跳出switch。如果没有break语句,则程序会找到对应的case语句后继续向下执行,直到遇到break语句或者程序结束才会停止执行switch语句。
-
复杂的switch语句:
switch语句中还可以存在default语句,该语句的作用相当于if语句中的else,当所有case语句都不满足条件时,才会执行default语句。
-
switch语句和if语句:
switch语句和if语句都是条件判断结构,二者并没有优劣之分,只是在不同的场景使用不同的语句而已,二者所编写的代码也可以相互转换,也就是使用if语句编写的结构,使用switch语句也同样可以编写,但通常还是if语句使用的更多一些,在通过单一表达式来控制程序流程分支时,switch语句更好一些。
-
选择语句:
switch语句和if语句都被称为选择语句。
📝课后习题
-
练习3-12:
对代码清单3-4中的程序进行修改,不使用if语句,而改用switch语句来实现。
//代码清单3-4
//输入的整数值是奇数还是偶数
#include<stdio.h>
int main()
{
int no = 0;
printf("请输入一个整数:");
scanf("%d", &no);
if (no % 2)
puts("输入的整数是奇数。");
else
puts("输入的整数是偶数。");
return 0;
}
✏️解答:
//练习3-12
#include<stdio.h>
int main()
{
int no = 0;
printf("请输入一个整数:");
scanf("%d", &no);//键盘输入17
switch (no % 2)
{
case 1:
puts("输入的整数是奇数。");//打印结果为:输入的整数是奇数。
break;
case 0:
puts("输入的整数是偶数。");
break;
}
return 0;
}
-
练习3-13:
对代码清单3-17中的程序程序进行修改,不使用if语句,而是改用switch语句来实现。
//代码清单3-17
//显示所输入的月份所处的季节
#include<stdio.h>
int main()
{
int month = 0;
printf("请输入月份:");
scanf("%d", &month);
if (month >= 3 && month <= 5)
printf("%d月是春季。\n", month);
else if (month >= 6 && month <= 8)
printf("%d月是夏季。\n", month);
else if (month >= 9 && month <= 11)
printf("%d月是秋季。\n", month);
else if (month >= 12 && month <= 2)
printf("%d月是冬季。\n", month);
else
printf("%d月不存在。\n", month);
return 0;
}
✏️解答:
//练习3-13
#include<stdio.h>
int main()
{
int month = 0;
printf("请输入月份:");
scanf("%d", &month);//键盘输入8
switch (month)
{
case 3:
case 4:
case 5:
printf("%d月是春季。\n", month);
break;
case 6:
case 7:
case 8:
printf("%d月是夏季。\n", month);//打印结果为:8月是夏季。
break;
case 9:
case 10:
case 11:
printf("%d月是秋季。\n", month);
break;
case 12:
case 1:
case 2:
printf("%d月是冬季。\n", month);
break;
default:
printf("%d月不存在。\n", month);
break;
}
return 0;
}
以上就是我这次分享的内容啦!写的不好,请多担待!