c语言的问题 谢谢
来源:百度知道 编辑:UC知道 时间:2024/05/31 06:53:54
1.已知float y;int x=-3;,执行语句y=x%2;后,变量y的值为 。
答案是0,但我觉得是1。
2.
union myun
{
struct
{ int x,y,z;}u;
int k;
}a;
则sizeof(a)的值为 。里面那个共用体是算2还是6呢?
3.下程序片段的输出结果是多少?
int x=1;
printf("%d\n",~x); 答案是-2,但怎么算出来的?
5.下面程序的输出结果
#include <stdio.h>
main()
{int x=0
sub(&x,8,1);
printf("%d\n",x);
}
sub(int *a,int n,int k)
{if(k<=n) sub(a,n/2,2*k);
*a+=k;
}
参考答案是7 ,帮忙说说理由把
答案是0,但我觉得是1。
2.
union myun
{
struct
{ int x,y,z;}u;
int k;
}a;
则sizeof(a)的值为 。里面那个共用体是算2还是6呢?
3.下程序片段的输出结果是多少?
int x=1;
printf("%d\n",~x); 答案是-2,但怎么算出来的?
5.下面程序的输出结果
#include <stdio.h>
main()
{int x=0
sub(&x,8,1);
printf("%d\n",x);
}
sub(int *a,int n,int k)
{if(k<=n) sub(a,n/2,2*k);
*a+=k;
}
参考答案是7 ,帮忙说说理由把
1、x%2应该等于-1,非0,亦非1
3、~是按位求反操作符,
1的二进制位表示形式为:
00000000 00000000 00000000 00000001
按位求反之后的值是
11111111 11111111 11111111 11111110
而这个结果正是-2的补码,所以~1的值是-2
5.这是个递归函数的调用问题,
第一次调用,k==1,n==8,k<n所以继续调用sub()
第二次调用,k==2,n==4,k<n所以继续调用sub()
第三次调用, k==4,n==2,k>n,所以执行*a+=k,
之后a==4,返回到上一次调用sub处,即第二次调用中,此时,继续执行*a+=k,由于k==2,而且*a此时值为4,所以执行之后 *a==6,返回到上一次调用sub处,即第一次调用中,继续执行*a+=k,此时k==1,*a==6,所以执行*a+=k之后,*a=7,返回到主函数中,即x==7
******************************************
2.在两字节的机器上,答案是6,在四字节的机器上,答案是12
1. 我的答案也是-1
2. sizeof(a)是不是应该等于6 啊,我不记得联合体怎么算了。
里面的结构体应该是算6.
联合体占的字节数是成员中所占字节数的最大直,故应为6