二级 · 程序设计:结构体数组里的最高分学生
学生的记录由学号和成绩组成。请编写函数 fun:把 a 中 n 名学生里分数最高的学生数据放进 b 所指的数组(最高分可能不止一个人,按原顺序放),返回最高分的人数。 例如四名学生 GA01 85、GA02 91、GA03 91、GA04
二级 · 选择:删除 p 后面的结点
指针 p 指向链表中的某个结点(不是最后一个),q 是同类型的指针。要删除 p 后面的那个结点并释放它,正确的语句是【0】。
作品:宿舍围圈数数,谁去倒垃圾
宿舍 n 个人围成一圈,从第一个人开始报数,报到 m 的人出圈,下一个人重新从 1 报……最后剩下的那个人去倒垃圾。 程序先用尾插法建好链表,再让最后一个结点的 next 指回第一个——这样的链表叫循环链表,走到尾巴会自动回到开头。 p 指
十进制、二进制与按位与或异或
按位与:两个数右对齐,一列一列算,同一列都是 1 才得 1 a = 6 b = 3 a & b 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 计算机里的整数都是用二进制存的:只有 0
取反之后为什么是负数
~ 把每一位都翻过来。可 int 有 32 位:5 是 0000…0000 0101,取反后是 1111…1111 1010,最高位变成了 1。 int 用补码存负数:最高位是 1 就表示负数,而且正好 ~x == -x - 1。所以 ~5
母题:十进制转 8 位二进制
输入一个 0~255 的整数 n,输出它的 8 位二进制(不足 8 位前面补 0)。例如输入 13,输出: 00001101 程序用「除 2 取余」把每一位存进了数组 bits(bits[0] 是最低位),可输出的顺序反了。
变式 1:二进制串转十进制
输入一串只含 0 和 1 的二进制数(不超过 16 位),输出它的十进制值。例如输入 101101,输出: 45 从左往右读,每读一位,前面的值「进一位」再加上这一位。程序照着读十进制数的办法写了。
变式 2:两人都有空的时段
一周有 8 个自习时段,用一个 0~255 的数记录:第 i 位是 1 表示第 i 个时段有空。输入你和室友的两个数 a、b,输出两人都有空的时段(8 位二进制)。例如输入 12 10,输出: 00001000 转二进制的部分和母题一样,已
变式 3:两张卡号有几位不同
两张门禁卡的卡号低 8 位分别是 a、b(0~255)。输入 a b,输出它们的二进制有几位不一样。例如输入 5 3(101 和 011),输出: 2 思路:先把两个数合成一个 x,让「不一样」的位是 1、「一样」的位是 0,再数 x 里有
变式 4:宿舍灯全部反转
宿舍 8 盏灯的开关状态存成一个 0~255 的数 n(第 i 位是 1 表示第 i 盏亮)。按下「全部反转」:亮的灭、灭的亮。输入 n,输出反转后状态的十进制和 8 位二进制。例如输入 5,输出: 250 11111010 二进制那一半是