黑马程序员技术交流社区
标题:
有各位大神讲解一下,程序里面第一个i--到底在整个程序中....
[打印本页]
作者:
CrazyMan
时间:
2014-12-6 23:18
标题:
有各位大神讲解一下,程序里面第一个i--到底在整个程序中....
//编程实现将任意的十进制整数转换成任意R进制数
#include <stdio.h>
int jinzhi (int numb, int flag); /*进制转换,flag为要转换的进制,最高16*/
int main()
{
int number, flag;
printf ("输入一个数和要转换的进制:");
scanf ("%d%d", &number, &flag);
printf ("十进制数%d转为%d进制是 ", number, flag);
jinzhi (number, flag);
return 0;
}
int jinzhi (int numb, int flag)
{
int nA[100], i;
for (i = 0; numb != 0; i ++)
{
nA[ i ] = numb % flag;//nA[0]=0;nA[1]=1;n[2]=0;nA[3]=1
if (nA[i ] >= 10)
switch (nA[i ])
{
case 10: nA[i ] = 'A'; break;
case 11: nA[i ] = 'B'; break;
case 12: nA[i ] = 'C'; break;
case 13: nA[i ] = 'D'; break;
case 14: nA[i ] = 'E'; break;
case 15: nA[i ] = 'F'; break;
}
numb = numb / flag;
}
i--;//我不知道这个i--有什么作用?没有它程序运行的结果就不是你想要的
//printf ("i1=%d\n",i );
while (i >= 0)
{
if (nA[i ] >= 'A' && nA[i ] <= 'F')
printf ("%c", nA[i ]);
else
printf ("%d", nA[i ]);
// printf ("i2=%d\n",i );
i--;
//printf ("i3=%d\n",i );
}
printf ("\n");
return 0;
}
作者:
枫煠
时间:
2014-12-7 01:03
int jinzhi (int numb, int flag)
{
//1.这个i,一开始没指定所以i=0
int nA[100], i;
//2-1.如果你代入的numb=0,不进入回圈,i还是0
//2-2.numb!=0,进入for回圈不管有没有达到sif (nA[i ] >= 10),i都会>0,因为i++
for (i = 0; numb != 0; i ++)
{
nA[ i ] = numb % flag;//nA[0]=0;nA[1]=1;n[2]=0;nA[3]=1
if (nA[i ] >= 10)
switch (nA[i ])
{
case 10: nA[i ] = 'A'; break;
case 11: nA[i ] = 'B'; break;
case 12: nA[i ] = 'C'; break;
case 13: nA[i ] = 'D'; break;
case 14: nA[i ] = 'E'; break;
case 15: nA[i ] = 'F'; break;
}
numb = numb / flag;
}
//3.执行到这里i已经是符合 >=0的条件了,所以一定会进入while回圈,不加i--,那就会一直在回圈里面不出来,陷入无穷回圈
while (i >= 0)
{
if (nA[i ] >= 'A' && nA[i ] <= 'F')
printf ("%c", nA[i ]);
else
printf ("%d", nA[i ]);
// printf ("i2=%d\n",i );
i--;
//printf ("i3=%d\n",i );
}
printf ("\n");
//4.结论:i++是i=i+1的意思,反之i--就是i=i-1,所以加上i--,i会慢慢递减变成负数,(i >= 0)才会等于false,才会离开回圈
return 0;
}
复制代码
不知道这样解释有没有为你解惑?
作者:
从今以后
时间:
2014-12-7 01:12
for (i = 0; numb != 0; i ++) 因为这里最后一次循环结束后执行i++后才判断的numb != 0,因为numb==0然后退出这个循环,但是这时的i已经不是循环结束当时那个i,也就是nA[i]取值其实是nA[i+1],所以减回来
作者:
米匠
时间:
2014-12-7 20:34
这是基础测试里的题吗
作者:
从今以后
时间:
2014-12-8 13:27
米匠 发表于 2014-12-7 20:34
这是基础测试里的题吗
是的。。
作者:
CrazyMan
时间:
2014-12-8 23:13
枫煠 发表于 2014-12-7 01:03
不知道这样解释有没有为你解惑?
有点感觉,谢谢啦
作者:
CrazyMan
时间:
2014-12-8 23:46
枫煠 发表于 2014-12-7 01:03
不知道这样解释有没有为你解惑?
我while循环里面有一个i--,可以让它减到负数跳出循环的呀
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2