10.19复习


前言


一.选择题

1.第一题

#include<stdio.h>
int main(){
unsigned char i = 7;
int j = 0;
for(;i > 0;i -= 3){
++j;
}
printf("%d\n", j);
return 0;
}

请问程序输出多少?
A 2
B 死循环
C 173
D 172

解析 c
首先i是无符号数取值范围是0-255
经过两次循环,i的值为1,再减3,i的值为254…
255刚好是3的85倍
在这里插入图片描述
1的位置经过85次循环会变到2的位置,再经过85次变到3的位置
再经过一次就会变为0,所以总共经过85+85+1+2=173

2.第二题

下面两个结构体

struct One{
double d;
char c;
int i;
}
struct Two{
char c;
double d;
int i;

在#pragma pack(4)和#pragma pack(8)的情况下,结构体的大小分别是()
A 16 24,16 24
B 16 20,16 20
C 16 16,16 24
D 16 16,24 24

解析 c
默认对齐数为4时
one 8+1=9 不是4的整数倍所以12+4=16
two 1不是4的整数倍· 所以4+8+4=16
默认对齐数为8时
one 12+4=16
two 8+8+4=20 不是8的整数倍所以应该是24

3.第三题

3.下列C程序执行后c输出结果为()(32位)

#include<stdio.h>
#include<stdlib.h>
void main()
{
int a = -3;
//10000000 00000000 00000000 00000011
//11111111 11111111 11111111 11111100
//11111111 11111111 11111111 11111101
unsigned int b = 2;
//00000000 00000000 00000000 00000010
long c = a + b;
//11111111 11111111 11111111 11111111
printf("%ld\n", c);
}

解析 c
考察数据存储

4第四题

int p[][4] = {{1}, {3, 2}, {4, 5, 6}, {0}};中,p[1][2]的值是()
A 1
B 0
C 6
D 2

解析
1 0 0 0
3 2 0 0
4 5 6 0
由此可见为0

5.第五题

int fun(int a){
a^=(1<<5)-1;
return a;
}

fun(21)运行结果是()
A 10
B 5
C 3
D 8

解析 A
1<<5的值为
00000000 00000000 00000000 00100000
再减1
00000000 00000000 00000000 00011111
21 16+4+1
00000000 00000000 00000000 00010101
相同为0 相异为一
00000000 00000000 00000000 00001010
8+2=10

二.编程题

1.第一题

在这里插入图片描述

class Solution {
public:
	void replaceSpace(char *str,int length) 
    {
        char*p=str;
        int spacecount=0;
        while(*p)
        {
            if(*p==' ')
            {
                spacecount++;
                
            }
            p++;
        }
        char* end1=str+length-1;
        char* end2=str+length+2*spacecount-1;
        while(end1!=end2)
        {
            if(*end1!=' ')
            {
                *end2--=*end1--;
                
            }
            else
            {
               * end2--='0';
               * end2--='2';
               * end2--='%';
                end1--;
            }
        }

	}
};
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值