精讲)
一、判断题第1题cin和scanf是干什么的题目说C程序执行cin或scanf语句时通常是使用键盘等输入设备来给某个变量的值。答案✅ 正确①cin是什么我们经常写int a; cin a;它的意思是“请从输入设备读取一个整数放进变量a里面。”比如我们运行程序请输入一个数字 25那么a 25②scanf呢在 C 中也经常能看到int a; scanf(%d, a);它同样可以从键盘输入数据。所以cin scanf都可以完成输入数据。 记忆点把变量想象成一个小盒子键盘 → 输入数字 → 小盒子所以cin a;就像“把键盘输入的东西放进a盒子。”因此✅ 第1题正确二、判断题第2题n % 100能得到三位数的最高位吗题目说如果n为3位的正整数则 C 表达式n % 100能得到最高位。如n123则表达式值为1。答案❌ 错误这是一道非常经典的“数字拆分”陷阱。①%到底是什么n % 100表示n除以100以后剩下的余数。例如123 ÷ 100 1 …… 23所以123 % 100得到23不是1② 那么三位数的最高位怎么求例如123想得到百位1应该123 / 100因为整数除法123 / 100 1所以/100→ 得到最高位%100→ 得到后两位♂️ 数字拆分魔法对于12345%10抓个位12345 % 10 5/10砍掉个位12345 / 10 1234%100抓最后两位12345 % 100 45/100砍掉最后两位12345 / 100 123所以一定要记住%负责“留下右边”/负责“砍掉右边”因此第2题❌ 错误三、判断题第3题这个循环会输出20吗代码int i; for (i 0; i 20; i 3) if (i % 3 ! 0) continue; cout i;题目说执行后输出20。答案❌ 错误第一步看i怎么变化循环for (i 0; i 20; i 3)所以i 0 i 3 i 6 i 9 i 12 i 15 i 18 i 21什么时候停止当i 21检查21 20❌所以循环结束。第二步continue有没有影响看看if (i % 3 ! 0) continue;但是0 % 3 0 3 % 3 0 6 % 3 0 9 % 3 0 …… 18 % 3 0它们全部都是3的倍数。所以i % 3 ! 0始终是false因此continue一次都没有真正触发。第三步循环结束最终i 21所以cout i;输出21不是20。⭐ 这里有一个考试秘诀看到for (i 0; i 20; i 3)不要想“最大应该是18所以输出18。”因为循环结束后还有i 3;所以18 → 21然后发现21 20不成立。最终i 21因此❌ 第3题错误四、判断题第4题10和10谁大代码int N, M; cin N M; if (N M) printf(%d大于%d, N, M); else printf(%d小于%d, N, M);题目说如果输入10和10则输出“10小于10”。答案✅ 正确我们代入N 10 M 10先判断N M也就是10 10显然❌ 不成立。所以程序进入else输出10小于10 但是这里有一个很有意思的问题现实数学中10 10既不是10 10也不是10 10程序却输出10小于10为什么因为程序写的是if (N M) ... else ...它只判断“N是不是大于M”如果不是就全部扔进else。也就是说N M → 大于 其他情况 → 小于而“其他情况”其实包括N M N M 这是非常重要的编程思想程序员写代码的时候程序怎么写就怎么执行。不能用我们脑袋里的“常识”替代程序真正的逻辑。所以这句话✅ 正确五、判断题第5题这个程序能计算1到N的和吗代码int N, tot; cin N; tot 0; while (N 0) { tot N; N - 1; } cout tot;题目说如果输入大于0的整数可以求出1到N之和。答案✅ 正确我们来玩“倒计时游戏”假设N 5开始tot 0第1轮tot N就是tot 0 5 5然后N - 1变成N 4第2轮tot 5 4 9然后N 3第3轮tot 9 3 12第4轮tot 12 2 14第5轮tot 14 1 15然后N 0循环结束。最终tot 15而1 2 3 4 5 15完全正确。 这里的两个变量很好理解可以把N想成倒计时牌而tot想成存钱罐每轮拿当前的N放进存钱罐 N再减1于是5 → 4 → 3 → 2 → 1全部加起来。所以✅ 第5题正确六、判断题第6题正负数的%会不会不一样题目说在 C 中表达式2 % 2与(-2) % 2的值相同。答案✅ 正确我们分别算。第一个2 % 22除以22 ÷ 2 1 …… 0所以2 % 2 0第二个(-2) % 2也是整除-2 ÷ 2余数0所以(-2) % 2 0两者0 0因此✅ 正确⭐ 小提醒负数%的题目确实容易让人紧张。但是这里很简单只要能够整除余数就是0。例如10 % 5 0 -10 % 5 0所以这一题不用害怕负号。七、判断题第7题z到底输出增加前还是增加后的值代码float z 12.0; z z / 4; z--; cout z;题目说执行后输出2。答案✅ 正确这道题非常适合讲清楚后置第一步开始z 12.0第二步除以4z z / 4;所以z 3.0第三步z--z--;意思z减1。所以z 2.0第四步最关键cout z;z叫后置自增它的特点是先使用再加1。所以输出的时候先输出 2然后z 3因此屏幕上看到2所以题目说输出2。是✅ 正确有两个兄弟z先加1再使用z先使用再加1可以记成z先长大再做事。z先做事再长大。八、判断题第8题变量名里有几个下划线会不会出问题题目说在 C 代码中如果两个变量名都包含下划线_但数目不同可能会导致编译器无法识别而报错。答案❌ 错误举个例子下面这些变量名int a_b; int a__b; int a___b;都是不同的变量名。C允许在变量名中使用下划线。所以a_b a__b a___b并不会因为“下划线数量不同”就让编译器糊涂。编译器完全可以区分它们。♂️ 想象成三间不同的房间a_b是一间房。a__b是另一间房。a___b又是另一间房。虽然名字很像但是名字不同就是不同的变量。⚠️ 真正需要注意的是C变量名不能随便写。例如int 123abc;这种就不行。但是int abc_123; int a_b; int a__b;都可以。所以第8题❌ 错误九、判断题第9题double x 27 % 12结果不可预测题目说C变量x是double类型则表达式x 27 % 12的结果是不可预测的。答案❌ 错误这道题看起来有点吓人其实非常简单。第一步先算%27 % 12意思27 ÷ 12 2 …… 3所以27 % 12 3第二步再放进double题目是double x; x 27 % 12;右边27 % 12 3于是相当于x 3;因为x是double实际保存时可以理解为x 3.0结果非常确定。⭐ 一个非常重要的知识点%要求参与运算的是整数类型。这里27 12都是整数。所以27 % 12完全合法。算完得到3然后再把这个结果放进double x没有问题。所以❌ 第9题错误十、判断题第10题这个程序最后真的输出3吗代码int ans 0; for (int idx 1; idx 7; idx 2) { if (idx 5) continue; if (idx*idx 30) break; ans idx; } cout ans;题目说执行后输出3。答案❌ 错误 这道题是“continue大挑战”先看for (int idx 1; idx 7; idx 2)所以idx 1 3 5 7我们一轮一轮看。第1轮idx 1判断if (idx 5)也就是1 5❌继续往下。再看if (idx 30)1 30❌所以ans idx;即ans 0 1得到ans 1第2轮idx 33 5❌3 30❌所以ans 1 3得到ans 4第3轮idx 5来了if (idx 5) continue;条件成立5 5所以continue;出现这一轮直接跳过也就是说ans idx;根本不会执行。所以ans 还是4第4轮idx 77 5❌然后7 * 7 30正确循环结束所以ans 4因此❌ 第10题错误 第二部分10道判断题答案汇总根据这份试卷的题面逐题分析题号判断核心知识1✅ 对cin、scanf输入2❌ 错/与%拆数字3❌ 错for循环结束值4✅ 对if-else逻辑5✅ 对while求1N的和6✅ 对%与负数7✅ 对后置z8❌ 错变量名与下划线9❌ 错%与double10❌ 错continue、循环模拟 给大家的“判断题破案法”做 C 判断题千万不要凭“感觉”。可以固定使用这套四步破案法第一步圈出关键词例如% / -- break continue这些都是“危险机关”。第二步给变量写初值比如int ans 0;就在草稿纸写ans 0第三步一轮一轮模拟尤其看到for while就画第1轮 第2轮 第3轮 ……第四步最后再判断“对还是错”千万不要“看起来应该是对的。”而应该“我已经把程序跑完了所以我知道它到底输出什么。” 最后送大家一张“C判断题魔法表”看到马上想到cin a从输入读数据a % 10取个位a / 10去掉个位ii加1i--i减1i先加再用i先用再加continue跳过本轮break结束整个循环for初始化→条件→循环体→更新while先判断条件再决定进不进入%取余数double可以保存小数其中最值得同学们记住的一句话是做程序题不要“猜程序”要“跑程序”。哪怕是拿草稿纸自己用手把变量一步一步走一遍程序就像小火车一样最后一定能找到答案。