c语言的问题?
main()
{ int x,y,i,a[8],j,u,v;
scanf(“%d”,&x);
y=x; i=0;
do
{ u=y/2;
a[i]=y%2;
i++; y=u;
} while(y>=1);
for(j=i-1;j>=0;j--)
printf(“%d”,a[j]);
} 展开
这个代码的作用就是利用do while将数组算出来,然后利用for循环遍历,倒序输出数组。
我感觉很奇怪,devc++出来的结果是10010。
我算出来的结果应该是00010,因为强转int类型应该是取0的,而不是取1.
然后我用c++试了多个数字,发现所有的结果都是以1开头,至于为什么我也不知道,希望题主得到答案后能够分享给我,万分感谢。
没有解释明白,不必采纳。
1.当x输入为18
y=18;i=0
u=9;a[0]=0;i=1;y=9;
while(9>=1);
再执行do语句
2.第二个do循环
u=9/2;a[1]= 1 ;i=2;y=9/2;
while(9/2>=1);
3.第三个do循环
u=9/4;a[2]= 9/2 %2=1/2 ;i=3;y=9/4;
while(9/4>=1)
4.第四个for循环
u=9/8;a[3]= 9/4 %2=1/4 ; i=4; y=9/8;
while(9/8>=1);
5.第五个for循环
u=9/16;a[4] = 9/8 %2 = 9/16; i=5; y=9/16;
while(9/16>=1)[不成立,因此不再执行上面的do语句,而执行下面的for循环]
for(j=4;j>=0;j--) [成立]
输出a[4]
for(j=3;j>=0;j--)[成立]
输出a[3]
for(j=2;j>=0;j--)[成立]
输出a[2]
for(j=1;j>=0;j--)[成立]
输出a[1]
for(j=0;j>=0;j--)[成立]
输出a[0]
则,当输入18时,输出a[4]a[3]a[2]a[1]a[0]
9/8 %2 = 9/16 这是1吧,不是0
哦哦哦 对对对哈哈哈哈
是取余,只有0和1 不是除
不好意思哈哈哈
a=1,*q=&a,**p=&q;p就是指向指针的指针,它的值只能是指针的地址,这样的话*p就是q,而q就是&a,所以**p就是*q,也就是a,这样讲明白了吧LZ,望采纳
不过
那书我都看了
内容没什么大变化
属于换汤不换药的
随便买一本
但是一定要认真看才好