点击上方蓝字关注我,我们一起学编程
欢迎小伙伴们分享、转载、私信、赞赏
微信搜索:编程笔记本
微信搜索:编程笔记本
微信搜索:编程笔记本
一、填空题
执行以下语句:
int a = 5;
a += (a++) + (++a);
此时 a 的值为( )。
解析:
将原问题转化为:
a = a + (a++) + (++a);
根据运算符的优先级,()
优先级最高,所以先计算括号中的部分。
图1
所以最终的答案是 19 。
微信搜索:编程笔记本
微信搜索:编程笔记本
微信搜索:编程笔记本
二、程序改错题
请问一下代码有什么问题?
void test_function()
{
unsigned short loop = 500;
unsigned short a = 0;
while (true) {
a += loop;
loop--;
if (loop < 0) {
break;
}
}
}
解析:
unsigned short
类型的loop
永远不会小于 0 ,所以程序是一个死循环。- 用于存储和的变量
a
长度不够,会造成溢出,应使用long
或long long
。
三、简答编程题
编程实现输入 unsigned int
型变量 a, a != 0
,输出 i
,要求 2^i <= a < 2^(i+1)
。
解析:
原问题等价于:找出 a
的二进制表示中,最左侧的 1
所在的位置(从 0 开始)。
int get_i(unsigned int a)
{
int pos = 0;
while ((a >>= 1) != 0) {
++pos;
}
return pos;
}
微信搜索:编程笔记本
微信搜索:编程笔记本
微信搜索:编程笔记本
四、应用编程题
给定 NODE & STACK 结构体,在此基础上编程实现动态链表模拟栈的操作,补充完整以下五个函数。
typedef struct node {
char c;
struct node* next;
} NODE;
typedef struct stack {
NODE* top;
} STACK;
/* 题目有错,这五个函数的返回值应该都为 void ,返回 char 没意义 */
void push(STACK* stack, char c)
{
NODE* nd = new NODE;
nd->c = c;
nd->next = stack->top;
stack->top = nd;
}
void pop(STACK* stack, char* c)
{
*c = stack->top->c;
stack->top = stack->top->next;
}
void init_stack(STACK* stack)
{
stack->top = nullptr;
}
void clear_stack(STACK* stack)
{
NODE* nd;
while (stack->top != nullptr) {
nd = stack->top;
stack->top = stack->top->next;
delete nd;
}
}
void display_stack(STACK* stack)
{
NODE* nd = stack->top;
while (nd != nullptr) {
cout << nd->c << endl;
nd = nd->next;
}
}
五、逻辑思维题
五个洞排成一排,其中一个洞里藏有一只狐狸。每个夜晚狐狸都会跳到一个相邻的洞里。每个白天你都只允许检查其中一个洞。怎样才能保证狐狸最终会被抓住?
图2
解析:
先给出答案:依次检查 2、3、4、2、3、4 。
可行性分析:
- 第一次检查 2 时:若不在,则它只可能在 1、3、4、5 ,那么跳动后,只可能在 2、3、4、5;
- 第一次检查 3 时;若不在,则它只可能在 1、4、5 ,那么跳动后,只可能在 1、3、4、5;
- 第一次检查 4 时;若不在,则它只可能在 1、3、5 ,那么跳动后,只可能在 2、4;
- 第二次检查 2 时;若不在,则它只可能在 4 ,那么跳动后,只可能在 3、5;
- 第二次检查 3 时;若不在,则它只可能在 5 ,那么跳动后,只可能在 4;
- 第二次检查 4 时;狐狸必然在 4 中。
微信搜索:编程笔记本
微信搜索:编程笔记本
微信搜索:编程笔记本