暑假第二天之每天一些题系列

Posted 小赵小赵福星高照~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了暑假第二天之每天一些题系列相关的知识,希望对你有一定的参考价值。

暑假第二天之每天一些题系列

一、选择题

  • 表达式 0x13&0x17,0x13|0x17 的值分别是多少
    A. 0x17 0x13 B. 0x13 0x17 C. 0xF8 0xE8 D. 0xec 0xC8

答案解析:

0x13的二进制为:00010011

0x17的二进制为:00010111

&是按位与,它们按位与的结果为:00010011,转化为16进制为:0x13

|是按位或,它们按位或的结果为:00010111,转化为16进制为:0x17

故答案选B

  • C 语言中,函数返回值类型的定义可以缺省,此时函数返回值的隐含类型是
    A. void B. int C. float D. double

答案解析:

函数的默认返回值为int

  • 以下不能正确定义二维数组的选项是
    A. int a[2][2]={{1},{2}};
    B. int a[][2]={1,2,3,4};
    C. int a[2][2]={{1}, 2,3};
    D. int a[2][] ={{1,2},{ 3,4}};

答案解析:

定义二维数组需要注意的是,二维数组不能省略列,但可以省略行,选项D省略了列,故它的定义是错误的

  • 在 VS2013 下,这个结构体所占的空间大小是字节
    A. 16 B. 9 C. 12 D. 8
typedef struct
{
    int a;
    char b;
    short c;
    short d;
}AA_t;

答案解析:

这道题考点是结构体大小的内存对齐,结构体内存对齐规则如下:

  • 第一个成员在与结构体变量偏移量为0的地址处。
  • 其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。
    对齐数 = 编译器默认的一个对齐数 与 该成员大小的较小值。
    VS中默认的值为8
    linux-没有默认对齐数的概念
  • 结构体总大小为最大对齐数(每个成员变量都有一个对齐数)的整数倍。
  • 如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是所
    有最大对齐数(含嵌套结构体的对齐数)的整数倍。

  • 不正确的赋值或赋初值的方式是
    A. char str[6]={‘\\0’};
    B. char str[7] = “string”;
    C. char str[10];str = “string”;
    D. char str[6] = “g”;

答案解析:

str为字符数组,首先看A,字符数组里是可以存放\\0字符的,再看B,字符数组也可以用字符串的方式初始化,再看C,str是数组名,数组名是首元素的地址,怎么能将字符串赋给一个地址呢?显然是错误的,这里需要使用strcpy函数,是不能使用=号赋值的,再看D,毫无疑问这样这样赋初值也是正确的。

二、填空题

  • 已知语句: const char *p = “Hello!” ,则语句 printf("%c\\n", *p) 输出的是___

答案解析:

p是字符指针,const char *p = "Hello!"实际上是将字符串首字符的地址存在p里面,所以这里打印的是H

  • 若 int a = 10 ,则执行表达式 a += a *= a -= a/3 后 a 的值为___

答案解析:

a += a *= a -= a/3 ,首先a/3等于3,a-=a/3,a此时为7,然后a*=a,a变为了49,最后a+=a,a变为了98,故最后a的值为98

  • 以下程序中while循环的循环次数是______
void main()
{
    int i=0;
    while(i < 10)
    {
    	if(i < 1) continue;
    	if(i == 5) break;
    	i++;
    }
}

答案解析:

需要注意的是,continue是跳过下面的语句,break是跳出循环,当i=0时,i<1,执行continue,i++被跳过了,所以i永远都小于10,并且i一致等于0。

三、算法题

题目描述:

要求写一个函数,将字符串中的空格替换为%20。样例: “abc defgx yz” 转换成 “abc%20defgx%20yz”

思路:

我们先算出空格数,然后从后往前依次挪动字符,遇到空格替换为%20

void ReplaceSpace(char *str,int length)
{
    //计算空格的个数
    int space_num=0;
    char *temp = str;
    while(*temp)
    {
        if(*temp==' ')
        {
        	space_num++;
        }
        temp++;
    }
    int i=0;
    for(i=length-1;i>=0;i--)
    {
        if(str[i]==' ')
        {
            space_num--;
            str[i+space_num*2]='%';
            str[i+space_num*2+1]='2';
            str[i+space_num*2+2]='0';
        }
        else
        {
            str[i+space_num*2] = str[i];
        }
    }
}

先遍历str,计算出空格的个数,然后从后往前依次挪动字符,遇到空格替换为%20

以上是关于暑假第二天之每天一些题系列的主要内容,如果未能解决你的问题,请参考以下文章

暑假第十天之每天一些题系列

暑假第四天之每天一些题系列

暑假第一天之每天一些题系列

暑假第九天之每天一些题系列

暑假第三天之每天一些题系列

暑假第十一天之每天一些题系列