C语言水平测试题 过关斩将(1)C语言的那些坑题,你可知道❓
我的个人主页:光之梦的博客_云社区-华为云 (huaweicloud.com)
欢迎各位 👍点赞 ⭐收藏 📝评论,如有错误请留言指正,我会第一时间改正。非常感谢!
初学者推荐用的刷题网站:
特别标注:本博主将会长期更新c语言的语法知识,初学c语言的朋友们,可以收藏订阅一下我的<C语言基础语法>专栏。关注博主,学习不迷路哦
下列是:C语言水平测试题(1)
大家冲鸭!
一、交换两个变量的值
核心代码:
t = a;
a = b;
b = t;
二、C语言细节考察题(坑题❗)
注:前方有坑,不要见坑就跳噢
坑货(1)❗❗❗
写出以下代码执行后,t1和t2的值,以空格隔开:
int a=14;
int t1 = a++;
int t2 = ++a;
怎么样?算完了吗?你应该没有跳进这个坑吧(希望你没跳进去,如果掉坑了,肯定就是你算的太快了)?
来吧,接下来
让我们揭晓答案
答案:14 16
答案解析:
正如我们所知,a一开始的值是14
执行完第一个表达式:int t1 = a++; 这时 t1的值是14
相信这一步,大家应该都知道(这么简单,你当我是三岁小孩啊)
但接下来,才是重头戏(毕竟主角往往是最后出场的嘛)
这里注意哦 这时a的值是15,不是14噢
接着我们执行第二个表达式:int t2 = ++a
这时 t2 的值是 16 a的值也是16
坑在哪呢?如果我们在执行完第一条语句 int t1 = a++; 时
把a 和t1 一样当成 14
这样我们就很容易把 t2 算成 15
就容易出错啦(不过这个坑比较小,如果你细心一点,你慢一点,不要算太快就不太会掉坑)
所以正确的答案是:14 16
坑货(2)❗❗❗
写出以下表达式的结果,结果之间间隔一个空格:
6 + 5 / 4 - 2
2 + 2 * (2 * 2 - 2) % 2 / 3
10 + 9 * ((8 + 7) % 6) + 5 * 4 % 3 * 2 + 3
1 + 2 + (3 + 4) * ((5 * 6 % 7 / 8) - 9) * 10
小提示:先括号,再从左到右乘除,最后加减
不要看这道题觉得很简单,就大意噢
轻敌的话,它可是会让你后悔的❗
答案:5 2 44 -627
答案解析:
这道题做错了,一看就是你轻敌了,大意了吧
做太快了吧,不好好检查一遍就交卷吧
6 + 5 / 4 - 2 从左到右 7 - 2
2 + 2 * (2 * 2 - 2) % 2 / 3 先括号 2+2*2%2/3 再从左到右 2+0/3 2
10 + 9 * ((8 + 7) % 6) + 5 * 4 % 3 * 2 + 3 10 + 27 + 4 + 3
1 + 2 + (3 + 4) * ((5 * 6 % 7 / 8) - 9) * 10 3 + 7 * (2/8-9)* 10 3 + 7 * (0-9)* 10 3-630
三、逆序的三位数(难题)
逆序的三位数
程序每次读入一个正三位数,然后输出逆序的数字。注意,当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7
提示:用%10可以得到个位数,用/100可以得到百位数...。将这样得到的三个数字合起来:百位100+十位10+个位,就得到了结果。
代码示例:
注:
关系运算符的结果只有0和1
所有的关系运算符的优先级比算术运算的低,但是比赋值运算的高
四、两个数比较大小(常考)
【方案1】
【方案2】
tips:
测试数据(测试所编写的代码或者方法有没有问题)
测试程序常使用边界数据,如
有效范围两端的数据
特殊的倍数等个位数;
10
0
负数
五、计算阶乘
n!=1×2×3×4×..×n 写一个程序,让用户输入,然后计算输出 n!
变量:
显然读用户的输入需要一个 int 的 n,然后计算的结果需要用一个变量保存,可以是 int 的 factor,在计算中需要有一个变量不断地从 I 递增到 n,那可以是 int 的
【方案1】
【方案2】
算法小套路
做求和的程序时,记录结果的变量应该初始化为 0,而做求积的变量时,记录结果的变量应该初始化为
六、计算平均数
需求:让用户输入一系列的正整数,最后输入-1表示输入结束,然后程序计算出这些数字的平均数,输出输入的数字的个数和平均数
实现思路:
只需要每读到一个数,就把它加到一个累加的变量里,到全部数据读完,再拿它去除读到的数的个数就可以了
一个变量记录累加的结果,一个变量记录读到的数的个数
算法
初始化变量 sum 和 count 为 0;
读入 number;
如果 number 不是 -l,则将 number 加入 sum,并将 count.加 l,回到2;
如果 number 是 -l,则计算和打印出 sum/count (注意换成浮点来计算)
代码实现:
七、猜数游戏(经典)
猜数游戏
需求:让计算机来想一个数,然后让用户来猜用户每输入一个数,就告诉它是大了还是小了,直到用户猜中为止,最后还要告诉用户它猜了多少次。 因为需要不断重复让用户猜,所以需要用到循环
核心重点是循环的条件
人们往往会考虑循环终止的条件
步骤
计算机随机想一个数,记在变量 number 里;
一个负责计次数的变量 count 初始化为 0;
让用户输入一个数字 a;
counti 递增(加一);
判断 a 和 number 的大小关系,如果 a 大,就输出“大”;如果 a 小就输出“小”;
如果 a 和 number:是不相等的(无论大还是小),程序转回到第 3 步;
否则,程序输出“猜中”和次数,然后结束。
需要掌握的知识点
随机数 每次召唤 rand( ) 就得到一个随机的整数
随机产生一个100以内的数:rand( )%10
注:玩这个小游戏,只要你认真玩,那么最多你猜7次就能猜中
代码实现:
为什么100以内的数猜7次就够了?
2的7次方为128,使用二分法完全可以取到100内的任意整数
用二分法,例如第一次:100中猜50第二次:若大了,1~50中猜25第三次:若小了,26~50中猜38第四次:若小了,39~50中猜45第五次:若大了,39~45中猜42第六次:若大了,39~41中猜40第七次:若大了就是39,若小了就是41。
八、数的逆序输出(本文最难)
输入一个正整数,输出逆序的数
如:
【情况1】
输入:700 输出:7
输入:007 输出:7
【情况2】
输入:700 输出:007
注:想做出这题需要先掌握下列知识(否则就是鸡蛋碰石头哦)
需要掌握的知识点
整数的分解
整数的分解 一个整数是由 1 至多位数字组成的,如何分解出整数的各个位上的数字,然后加以计算
对一个整数做%10 的操作,就得到它的个位数;
对一个整数做/10 的操作,就去掉了它的个位数;
依此类推。
当 x > n 时
1234 % 10 保留末尾一位数 4
1234 % 100 保留末尾二位数 34
1234 / 10 去掉末尾一位数 123
1234 / 100 去掉末尾二位数 12
当 x < n
1 % 10 1 小取余大 余小本身
5 % 10 5 小取余大 余小本身
6 % 10 6 小取余大 余小本身
1 / 10 0 被除数比除数小 答案为0
5 / 10 0 被除数比除数小 答案为0
6 / 10 0 被除数比除数小 答案为0
方案1(700——7, 007——7)
代码示例:
方案2(700——007)
代码示例:
九、学习路上遇到的常见错误(坑❗)
(1)if 语句 忘了大括号
解决方法:永远在 if 和 else 后面加上大括号,即使当时后面只有一条语
(2)在 if 后面加分号
(3)错误使用==和=
(4)输入中文符号
(5)scanf()里面忘记加&
(6);老丢
(7)scanf()里面忘记加& printf()里面加了&
各位学习C语言的初学者,如果有问题随时都可以来问我,我会随时为您解答!欢迎大家与我一起学习,互相进步。
创作不易,👍 +⭐ +📝(一键三连) 是对博主最大的鼓励与支持哦。
- 点赞
- 收藏
- 关注作者
评论(0)