🎯 石头剪刀布大作战

课后小测 · 共15题

趣味C++课后练习
⚠️ 本次练习已提交,答案已锁定。如需重新练习请联系老师。
🎉 答题完成!
0
第1题 单选题 随机数
代码 rand() % 3 + 1 得到的数字范围是?
正确答案:B
rand()%3 的余数只有0、1、2三种,再加1就变成1、2、3,正好对应石头、剪刀、布。记住口诀:要几就模几,从1开始就加1。
第2题 单选题 随机数
srand(time(0)) 的作用是什么?
正确答案:B
time(0)取当前系统时间,每秒都在变,用它做随机种子,电脑每次运行就会吐出不同的随机序列。不写srand时,电脑每次开机后第一次运行rand()结果都一样。
第3题 单选题(中) 综合应用
石头(1)剪刀(2)布(3),玩家出1,电脑出2,结果是?
正确答案:A
石头(1)赢剪刀(2),因为石头能砸坏剪刀。这正是赢法条件之一:(player==1 && computer==2)。
第4题 单选题(中) 条件判断
下面哪个是"玩家赢"的正确条件?
正确答案:A
玩家赢有三种情况:石头(1)赢剪刀(2)、剪刀(2)赢布(3)、布(3)赢石头(1),三种用||连起来。B是平局,C是玩家输(剪刀碰石头),D也是平局。
第5题 单选题(难) 概率与统计
计算胜率时为什么要写 win * 100.0 / total,而不是 win / total * 100?
正确答案:B
win和total都是整数int。如果先算win/total,比如2/5,整数除法结果是0(小数部分被扔掉),再乘100还是0!写成win*100.0/total,100.0是小数,会触发小数除法,才能得到40.0这样的正确结果。
第6题 单选题 循环结构
while(true) 是无限循环,用什么语句可以跳出循环?
正确答案:B
break的作用是"打破"当前循环,直接跳到循环后面的代码。continue是跳过本次循环剩余部分进入下一次循环(不会跳出)。return是结束整个函数,exit是退出整个程序,都不是我们要的。
第7题 单选题 综合应用
玩家出3(布),电脑出1(石头),结果是?
正确答案:A
布(3)能包住石头(1),所以玩家赢!这是三种赢法之一:(player==3 && computer==1)。记住口诀:石头砸剪刀、剪刀剪布、布包石头。
第8题 单选题(中) 变量与计数
下面哪个变量名是不合法的?
正确答案:B
变量名不能以数字开头!2player以数字2开头,编译器会报错。变量名只能由字母、数字、下划线组成,且必须以字母或下划线开头。win_count、maxStreak、tieCount都是合法的变量名。
第9题 单选题(中) 条件判断
if-else if 多分支判断胜率等级时,条件应该按什么顺序排列?
正确答案:B
必须从高到低排列!如果先判>=40%,那么胜率70%的人也满足>=40%,会直接进入"常胜将军"分支,永远到不了"拳皇大神"。先判严格的条件(>=60%),不满足再判宽松的(>=40%),才是正确的。
第10题 单选题(难) 变量与计数
计数器变量(如win、lose)的初始值应该设为?
正确答案:B
计数器从0开始!因为还没玩的时候胜场是0,每赢一次++就变成1、2、3...如果初始化为1,第一次赢了就变成2,统计就多算了1局。变量一定要初始化,不初始化的变量值是不确定的(垃圾值)。
第11题 判断题 随机数
不写 srand(time(0)),每次运行程序电脑出的拳都一样。
正确答案:✅ 正确
正确!rand()是伪随机数,不播种子时电脑每次都从同一个"起点"开始算,所以出拳序列完全相同。加上srand(time(0))用变化的时间做种子,每次才不同。
第12题 判断题(中) 随机数
rand() % 3 直接就能得到 1、2、3 三个数。
正确答案:❌ 错误
错误!rand()%3的余数只有0、1、2三种,会出现0。必须再加1写成rand()%3+1,才能得到1、2、3。这是最常见的错误之一。
第13题 判断题(中) 随机数
电脑完全随机出拳时,玩非常多局后,胜率会越来越接近33.3%。
正确答案:✅ 正确
正确!胜、平、负三种情况概率相等,各约占1/3。玩得少时胜率波动很大(可能0%也可能100%),但玩得越多就越接近33.3%,这就是大数定律。
第14题 判断题 循环结构
while(true) 是无限循环,必须配合 break 才能正常结束。
正确答案:✅ 正确
正确!while(true)的条件永远为真,会一直循环下去。必须在循环内部用if判断某个条件,满足时执行break跳出循环,否则程序会卡死在循环里永远不结束。
第15题 判断题(难) 概率与统计
计算胜率时,写 win / total * 100 可以得到正确的百分比。
正确答案:❌ 错误
错误!win和total都是整数,先算win/total会做整数除法(小数部分被扔掉),比如2/5=0,再乘100还是0!正确写法是win*100.0/total,用100.0触发小数除法。