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;
}