暑假第四天之每天一些题系列
Posted 小赵小赵福星高照~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了暑假第四天之每天一些题系列相关的知识,希望对你有一定的参考价值。
暑假第四天之每天一些题系列
一、选择题
-
下列程序执行后, n 的值等于
char a[20]; char *p1 = (char *)a; char *p2 = (char*)(a+5); int n = p2-p1;
A. 4 B. 5 C. 10 D. 20
答案解析:
数组名是首元素地址,p1存的是数组a的首元素地址,a+5是数组a第六个元素的地址,即p2指向数组a第六个元素的地址,n等于p2-p1,指针-指针是指针直接的元素个数,一共是5个,故n等于5
-
下列程序运行后的输出结果是
#define F(X,Y) ((X)+(Y)) int main() { int a = 3,b = 4; printf("%d\\n",F(a++, b++)); }
A. 7 B. 8 C. 9 D. 10
答案解析:
在预处理阶段,F(a++, b++)被替换为:((a++)+(b++)),a和b都是后置加加,先使用后加加,即答案是3+4=7
-
执行 x=5>1+2&&2||2*4<4-!0 后, x 的值为
A. -1 B. 0 C. 1 D. 5
答案解析:
先看5>1+2,+号的优先级大于>号,故该表达式的结果为1,然后再看后面的2||2*4<4-!0 ,该表达式的结果为1,因为||左边为真,编译器都不会运算||右边的表达式了,1&&1,故答案为1。
- 对于语句 int *px[10] ,以下说法正确的是
A. px 是一个指针,指向一个数组,数组的元素是整数型
B. px 是一个数组,其数组的每一个元素是指向整数的指针
C. A和B均错,但它是C语言的正确语句
D. C语言不允许这样的语句
答案解析:
px是一个数组,它的元素类型为int*,即px是一个指针数组。
-
以下程序的运行情况是
int main() { int i = 1,sum = 0; while(i < 10) { sum = sum+1; i++; } printf("i=%d,sum=%d",i,sum); }
A. i=10, sum=9 B. i=9,sum=9 C. i=2, sum=1 D. 以上结果都不对
答案解析:
i被初始化为1,while的循环条件是i<10,一共进行9次循环,sum被加了9个1,while循环出来时i=10,故i=10,sum=9。
二、填空题
如下代码的输出结果是___
#pragma pack(4)/*编译选项,表示4字节对齐 平台:VS2013。语言:C语言*/
int main(int argc, char* argv[])
{
struct tagTest1
{
short a;
char d;
long b;
long c;
};
struct tagTest2
{
long b;
short c;
char d;
long a;
};
struct tagTest3
{
short c;
long b;
char d;
long a;
};
struct tagTest1 stT1;
struct tagTest2 stT2;
struct tagTest3 stT3;
printf("%d %d %d", sizeof(stT1), sizeof(stT2), sizeof(stT3));
return 0;
}
答案解析:
三、算法题
题目描述:
写一个函数求,求 unsigned int 型变量 x 在内存中二进制 1 的个数
思路:
a&a-1,每进行一次这样的操作将a的二进制中的1去掉一个,比如:a=10
a的二进制为:00000000000000000000000000001010
a-1的二进制:00000000000000000000000000001001
按位与得到:00000000000000000000000000001000
我们发现去掉了最右边的1
代码如下:
int count_one(int a)
{
int count = 0;
//a&a-1 - 每进行一次将a中的1去掉一个
while (a)
{
a = a & a - 1;
count++;
}
return count;
}
int main()
{
unsigned int a = 15;
int ret = count_one(a);
printf("%d\\n", ret);
return 0;
}
以上是关于暑假第四天之每天一些题系列的主要内容,如果未能解决你的问题,请参考以下文章