c程序设计第五版谭浩强习题答案
第四章 选择结构程序设计
1. 什么是算术运算?什么是关系运算?什么是逻辑运算?
【答案解析】
算熟运算:
算术运算即“四则运算”,是加法、减法、乘法、除法、乘方、开方等几种运算的统称。
其中加减为一级运算,乘除为二级运算,乘方、开方为三级运算。在一道算式中,如果有多级运算存在,则应先进行高级运算,再进行低一级的运算。
C语言中的算熟运算符包括:+
、-
、*
、/
、++
、--
、%
等种类。
如果只存在同级运算;则从左至右的顺序进行;如果算式中有括号,则应先算括号里边,再按上述规则进行计算。
示例:$ (1 + 1)^{2} * 4+5 * 3$
解析:
- 先进行括号内运算
1+1
,然后进行乘方运算得到结果4. - 接下来与4相乘,得到结果16
- 因为乘法优先级大于加法,因此先进行5*3,得到结果15
- 最终相加得到结果31
结果:31
关系运算:
关系的基本运算有两类:一类是传统的集合运算(并、差、交等),另一类是专门的关系运算(选择、投影、连接、除法、外连接等),而在C语言中,关系运算通常被认为是比较运算,将两个数值进行比较,判断比较结果是否符合给定的条件。
常见的关系运算符包括:<
、<=
、>
、>=
、==
、!=
等种类。
其中,前4种关系运算符(<、<=、>、>= )的优先级别相同,后2种(==、!=)也相同。而前4种高于后2种。
例如, >
优先于 ==
。而 >
与 <
优先级相同。
并且,关系运算符的优先级低于算术运算符,关系运算符的优先级高于赋值运算符(=)。
逻辑运算:
在逻辑代数中,有与、或、非三种基本逻辑运算。表示逻辑运算的方法有多种,如语句描述、逻辑代数式、真值表、卡诺图等。而在C语言中,逻辑运算通常用于使用逻辑运算符将关系表达式或其它逻辑量连接起来组成逻辑表达式用来测试真假值。
常见的逻辑运算符包括:&&
、||
、!
等种类
&&
: 与是双目运算符,要求有两个运算对象,表示两个运算对象都成立,则结果为真,否则结果为假。
例如:(a<b) && (x>y),表示(a<b)和(x>y)同时成立则为真。
**||
:**是双目运算符,要求有两个运算对象,表示两个运算对象只要任意一个成立,则结果为真,否则结果为假。
例如:(a<b) && (x>y),表示(a<b)和(x>y)两个对象中任意一个成立则结果为真。
**!
:**是单目运算符,只要求有一个运算对象,表示取运算对象反义,运算对象为真则结果为假,运算对象结果为假则结果为真。
例如:!(a>b),表示(a>b)成立时结果为假,不成立时结果为真。
若在一个逻辑表达式中包含多个逻辑运算符,则优先次序为: !
> &&
> ||
。当然若一个逻辑表达式中包含括号括起来的子逻辑,则优先括号内的子逻辑判断。
示例:
(1>2)||(2>3)&&(4>3) 结果为0
!(1>2)||(2>3)&&(4>3)结果为1
注:&&
优先级大于||
,((2>3)&&(4>3))无法同时成立,则结果为假,然后与(1>2)结果进行逻辑或运算,两者都为假因此第一次结果为假。 而第二次!
优先级最高,先对(1>2)的结果取逻辑非,得到结果为真,因此结果为真。
2. C语言中如何表示“真”和“假”?系统如何判断一个量的“真”和“假”?
答案:
在C语言中逻辑常量只有两个,即0和1,用来表示两个对立的逻辑状态,其中0
表示假,1
表示真。
逻辑变量与普通代数一样,也可以用字母、符号、数字及其组合成为的逻辑表达式表示。
对于系统来说,判断一个逻辑量的值时,系统会以0
作为假,以非0
作为真。例如3&&5
的值为真,系统给出3&&5
的值为1
。
3. 写出下面各逻辑表达式的值。设a=3,b=4,c=5。
(1)a + b > c && b == c
(2)a || b + c && b - c
(3)!(a > b) && !c || 1
(4)!(x = a) && (y = b) && 0
(5)!(a + b) + c - 1 && b + c / 2
解题思路:
- 关系运算符的优先级高于赋值运算符,但是低于算术运算符;
- &&表示两边条件同为真则成立,||表示两边条件任意一个为真则成立,!取条件反义。
- 逻辑运算符优先级: ! > && > ||
- 有括号优先括号。
3.1 题目:a + b > c && b == c -> 3+4>5&&4==5
解析: 3+4>5 优先3+4得到结果7,因此7>5结果为真; 4==5为假,一真一假逻辑与最终结果为假。
答案: 0
#include <stdio.h>
int main()
{
int a = 3, b = 4, c = 5;
printf("%d\n", a || b + c && b - c);
system("pause");//这一句是为了让控制台不退出
return 0;
}
3.2 题目:a || b + c && b - c -> 3||4 + 5 && 4-5
解析: 优先算术运算4+5得到7,非0则为真,4-5得到-1,非0则为真,接下来逻辑与判断,最终逻辑或判断
答案: 1
#include <stdio.h>
int main()
{
int a = 3, b = 4, c = 5;
printf("%d\n", a || b + c && b - c);
system("pause");//这一句是为了让控制台不退出
return 0;
}
3.3 题目:!(a > b) && !c || 1 -> !(3>4) && !5 || 1
**解析: ** !优先级最高,!(3>4)最终结果为真,!5为假; 其次 &&,真&&假得到假,最终||,1为真,假或真为真
答案: 1
#include <stdio.h>
int main()
{
int a = 3, b = 4, c = 5;
printf("%d\n", !(a > b) && !c || 1);
system("pause");//这一句是为了让控制台不退出
return 0;
}
3.4 题目:!(x = a) && (y = b) && 0 -> !(x=3) && (y=4)&&0
解析: 这里&&优先级最低是最后一个逻辑运算,因此不管如何,最终&&0,则肯定为假
答案: 假-0
#include <stdio.h>
int main()
{
int a = 3, b = 4, c = 5;
int x