错题汇总04-1

1、以下哪个选项一定可以将flag的第二个bit置0

  • flag&=~2
  • flag|=2
  • flag^=2
  • flag>>=2

|:只要有一个1即为1

&:同为1时才为1

^:两个数相同时为1,不同为0

~:取反

>>:右移

2转化为二进制:0010,第二位为1

分析选择A

2、请声明一个指针,其所指向的内存地址不能改变,但内存中的值可以被改变。

  • const int const *x = &y;
  • int * const x = &y;
  • const int *x = &y;
  • int const *x = &y;
  • const int * const x = &y;

const在*前,指针指向空间的值不能修改

const在*后,指针的指向不能修改

3、在上下文和头文件正常的情况下,以下C语言指令:

int a[5] = {1,3,5,7,9};
int *p = (int *)(&a+1);
printf("%d,%d",*(a+1),*(p-1));

运行结果是什么?

数组名只有在&与sizeof的后面,表示的是数组本身,指针p指向的是9之后

4、 以下程序的输出结果是:

#include <iostream>
using namespace std;
void func(char **m){
    ++m;
    cout<<*m<<endl;
}
int main(){
    static char *a[]={"morning", "afternoon", "evening"};
    char **p;
    p=a;
    func(p);
    return 0;
}

 m指向的是morning

向后偏移一个元素大小,即为afternoon

 5、求函数返回值,输入x=9999

int func(int x){
	int count = 0;
	while (x){
		count++;
		x = x&(x - 1);//与运算
	}
	return count;
}

该函数功能实际上就是求一个数转化为二进制后之中1的个数,所以为8

6 、下列程序执行后,输出的结果为()

#include <stdio.h>
int cnt = 0;
int fib(int n) {
    cnt++;
    if (n == 0)
        return 1;
    else if (n == 1)
        return 2;
    else
        return fib(n - 1) + fib(n - 2);
}
void main() {
    fib(8);
    printf("%d", cnt);
}
  • 41
  • 67
  • 109
  • 177 

cnt实际在统计斐波那契数列递归的次数

F0:1次 

F1:1次

F2:F0+F1=3次

F3:F2+F1=1+1+3=5次

F4:F3+F2=1+5+3=9次

F5:F4+F3=1+9+5=15次

F6:F5+F4=1+15+9=25次

F7:F6+F5=1+25+15=41次

F8:F7+F6=1+41+25=67次 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值