c语言123输出112233,c语言练习 - 噫_的个人空间 - OSCHINA - 中文开源技术交流社区...

1. 写一个函数打印arr数组的内容,不使用数组下标,使用指针。

#include

void print(int* arr[],int length)

{

int* p = 0;

p = arr;

for (int i = 0; i < length; i++)

{

printf("%d ", *p);

p++;

}

}

int main()

{

int arr[] = { 1,2,3,4,5,6,7,8,9,10 };

int length = sizeof(arr) / sizeof(arr[0]);

print(arr,length);

return 0;

}

2. 下面代码输出的结果是:(     )

#include

int main()

{

int a = 0x11223344;

char *pc = (char*)&a;

*pc = 0;

printf("%x\n", a);

return 0;

}

A. 00223344

B. 0

C. 11223300

D. 112233

ps:此题应该选C。每个字节都有自己的地址,一个变量如果有多个字节,在把地址取出时是只取出首地址,因此在传递给指针变量地址时只传首地址。而指针变量的类型规定了在解引用时,根据首地址读取的字节数,此题本来是int 型变量,因此有四个字节,因为大部分电脑是小端字节序,因此首地址是"44"这个字节,而char类型指针只读取一个字节,因此0只赋值给了"44",结果就成了11223300。

3. 下面代码的结果是:(      )

#include

int main()

{

int arr[] = {1,2,3,4,5};

short *p = (short*)arr;

int i = 0;

for(i=0; i<4; i++)

{

*(p+i) = 0;

}

for(i=0; i<5; i++)

{

printf("%d ", arr[i]);

}

return 0;

}

A. 1 2 3 4 5

B. 0 0 3 4 5

C. 0 0 0 0 5

D. 1 0 0 0 0

ps:此题选C,原理同2。

3.不允许创建临时变量,交换两个整数的内容

#include

#include

int main()

{

int a = 1;

int b = 2;

a = a ^ b;

b = a ^ b;

a = a ^ b;

printf("a=%d b=%d", a, b);

return 0;

}

4.写一个函数返回参数二进制中 1 的个数

#include

#include

int main()

{

int a = 10;

int count = 0;

while (a > 0)

{

if ((a & 1) == 1)

{

count++;

}

a=a >> 1;

}

printf("%d", count);

return 0;

}

5.获取一个整数二进制序列中所有的偶数位和奇数位。

要求:分别打印出二进制序列。

#include

#include

int main()

{

int a = 110;

int count = 1;

int Num[32] = { 0 };

while (count<33)

{

if (count % 2 == 1)

{

Num[count] = a & 1;

a = a >> 1;

count++;

}

else

{

Num[count] = a & 1;

a = a >> 1;

count++;

}

}

printf("奇数列二进制序列为:");

for (int i = count-2; i >0; i -= 2)

{

printf("%d", Num[i]);

}

printf("\n");

printf("偶数列二进制序列为:");

for (int i = count-1; i >0; i -= 2)

{

printf("%d", Num[i]);

}

return 0;

}

6.编程实现:

两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?

输入例子:

1999 2299

输出例子:7

#define _CRT_SECURE_NO_WARNINGS

#include

#include

int main()

{

int a = 1999;

int b = 2299;

int c = a ^ b;

int count = 0;

while (c > 0)

{

if ((c & 1) == 1)

{

count++;

}

c = c >> 1;

}

printf("这两个数字不同的位数总共有:%d", count);

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值