【时时三省】(C语言基础)选择结构程序设计习题1
山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省
1.什么是算术运算?什么是关系运算?什么是逻辑运算?
算术运算
对数值进行加、减、乘、除、取余等基本数学计算的操作 ,用于处理数值间数量关系。
关系运算
比较两个值的大小、是否相等关系,结果为真或假,辅助条件判断。
逻辑运算
对布尔值进行与、或、非操作,组合条件表达式,得出新的真假判断结果。
2.C语言中如何表示“真”和“假”?系统如何判断一个量的“真”和“假”?
在C语言中,早期用0表示“假”,非0表示“真”;C99标准引入 stdbool.h 头文件后,可用 false 表示“假”, true 表示“真”。
系统判断时,以0为“假”,非0为“真”,用于条件判断等场景。
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
解答:
(1)a + b > c && b == c
- 先计算 a + b > c : a + b = 3 + 4 = 7 , 7 > 5 为真,值是 1 。
- 再计算 b == c : 4 == 5 为假,值是 0 。
- 最后计算逻辑与 && : 1 && 0 为假,值是 0 。
(2)a || b + c && b - c
- 先计算 b + c 和 b - c : b + c = 4 + 5 = 9 , b - c = 4 - 5 = -1 。
- 逻辑与 && 优先级高于逻辑或 || ,先算 b + c && b - c , 9 非零为真(值为 1 ), -1 非零为真(值为 1 ) , 1 && 1 结果为 1 。
- 再算 a || (b + c && b - c) , a = 3 非零为真(值为 1 ) , 1 || 1 结果为 1 (真)。
(3)!(a > b) &&!c || 1
- 先算 a > b : 3 > 4 为假(值为 0 ), !(a > b) 为真(值为 1 )。
- 再算 !c : c = 5 非零为真, !c 为假(值为 0 )。
- 然后算 !(a > b) &&!c : 1 && 0 为假(值为 0 )。
- 最后算 !(a > b) &&!c || 1 : 0 || 1 为真(值为 1 )。
(4)!(x = a) && (y = b) && 0
- 先算 !(x=a) : a = 3 非零为真, !(a) 为假(值为 0 )。
- 逻辑与 && 只要有一个为假则结果为假,所以 !(a) && (b) && 0 结果为 0 (假)。
!(a + b) + c - 1 && b + c / 2
- 先算 a + b : a + b = 3 + 4 = 7 , !(a + b) 为假(值为 0 )。
- 再算 !(a + b) + c - 1 : 0 + 5 - 1 = 4 ,非零为真(值为 1 )。
- 接着算 b + c / 2 : c / 2 因为都是整数 , 5 / 2 = 2 , b + c / 2 = 4 + 2 = 6 ,非零为真(值为 1 )。
- 最后算逻辑与 && : 1 && 1 为真(值为 1 )。
4 .有3个整数a,b,c,由键盘输入,输出其中最大的数。
编写程序:
代码说明:
先定义变量用于存储输入的三个整数和最大值,通过 scanf 接收用户输入。先假设 a 是最大值,然后通过两个 if 语句分别比较 b 和 c 与当前最大值的大小,若更大则更新最大值,最后输出最大值。
5 .从键盘输入一个小于1000的正数,要求输出它的平方根(如平方根不是整数,则输出其整数部分)。要求在输入数据后先对其进行检查是否为小于1000的正数。若不是,则要求重新输入。
编写程序:
代码说明:
定义变量 num 存储输入值,接收用户输入后,先通过 if 语句判断输入是否符合要求(大于0且小于1000 )。若符合,调用 sqrt 函数计算平方根,再判断平方根是否为整数,分别进行输出;若不符合,提示输入错误。
6 .有一个函数:
写程序,输入x的值,输出y相应的值。
编写程序:
代码解释:
先定义变量 x 和 y 用于存储输入值和计算结果。通过 scanf 获取用户输入的 x 值,然后利用 if - else if - else 语句进行条件判断,根据 x 所在区间,按照对应的函数表达式计算 y 值,最后输出 y 。
7 .有一函数:
有人编写了以下两个程序,请分析它们是否能实现题目要求。
程序(1)
程序(2)
程序(1)分析
代码逻辑
- 首先提示用户输入 x 的值,然后将 y 初始化为 -1 。
- 接着判断 x 是否不等于 0 ,如果 x != 0 ,再进一步判断 x 是否大于 0 。若 x > 0 ,将 y 赋值为 1 ;否则(即 x 不等于 0 但小于 0 ),将 y 赋值为 0 。最后输出 x 和 y 的值。
能否实现题目要求
- 不能实现题目要求。对于 x < 0 的情况,根据题目函数要求, y 应该为 -1 ,但此程序中当 x < 0 (满足 x != 0 且不满足 x > 0 )时, y 被赋值为 0 ,不符合函数定义。
程序(2)分析
代码逻辑
- 提示用户输入 x 的值后,将 y 初始化为 0 。
- 然后判断 x 是否大于等于 0 ,若 x >= 0 ,再进一步判断 x 是否大于 0 。若 x > 0 ,将 y 赋值为 1 ;否则(即 x = 0 ), y 保持为 0 。若 x < 0 (不满足 x >= 0 ),将 y 赋值为 -1 。最后输出 x 和 y 的值。
能否实现题目要求
- 能实现题目要求。它按照题目中函数对于 x < 0 、 x = 0 、 x > 0 三种情况的定义,正确地给 y 赋了相应的值。
8 .给出一百分制成绩,要求输出成绩等级‘A '、' B '、' C '、' D '、' E '。90分以上为' A ',80 ~ 89分为' B ',70 ~ 79分为' C ',60 ~ 69分为D ',60分以下为' E '。
编写程序:
代码解释:
先定义存储成绩的 int 型变量 score 和存储等级的 char 型变量 grade 。获取用户输入成绩后,通过 if - else if 语句判断成绩所在区间,为 grade 赋予对应等级字符,最后输出等级。