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