我觉得没错,可是就是有错,输入21,输出204810101,后五项对。

void tentotwo(int a);
void main()
{
int a; 
scanf("%d",&a);
tentotwo(a); 

}
void tentotwo(int a)
{int s[20],i=0;
while(a!=0)

{s[i]=(a%2);a=a/2;i++;}
while(i>=0){printf("%d",s[i]);i--;}

}分别编写子函数完成--十进制整数转化为二进行与十六进制数的程序;主程序—将十进制数以二、16进制输出。

繁星点点滴滴
浏览 108回答 2
2回答

holdtom

少了个i--;&nbsp;i--;&nbsp;while(i>=0){printf("%d",s[i]);i--;}&nbsp;你多输出了一个数&nbsp;加上i--后结果对 了#include <stdio.h>void tentotwo(int a);&nbsp;int main()&nbsp;{&nbsp;int a;&nbsp;scanf("%d",&a);&nbsp;tentotwo(a);&nbsp;getchar();getchar();}&nbsp;void tentotwo(int a)&nbsp;{int s[20],i=0;&nbsp;while(a!=0)&nbsp;{s[i]=(a%2);a=a/2;i++;}&nbsp;i--;//这里!!!!!!!!!!!!!while(i>=0){printf("%d",s[i]);i--;}&nbsp;}&nbsp;

慕哥9229398

因为后边的数都对 也就是说前边多了很多 因为你是按整形输出的 所以应该是多输出了一个元素 而且这个元素有不稳定性&nbsp;&nbsp;说白了 你的第一个循环 运行完最后一环后 i++了 然而这个s[i]里边你是没有放东西的 然而 这个数组用之前没有初始化 所以这个s[i]里边是内存里边的一个无关的数 被你在第二个循环里输出了 所以 第一个循环结束之后 添一个i--;就是这样#include "stdio.h"void tentotwo(int a);&nbsp;void main()&nbsp;{&nbsp;int a;&nbsp;scanf("%d",&a);&nbsp;tentotwo(a);&nbsp;}&nbsp;void tentotwo(int a)&nbsp;{int s[20],i=0;&nbsp;while(a!=0)&nbsp;{s[i]=(a%2);a=a/2;i++;}&nbsp;i--;while(i>=0){printf("%d",s[i]);i--;}&nbsp;}或者先把数组初始化#include "stdio.h"void tentotwo(int a);&nbsp;void main()&nbsp;{&nbsp;int a;&nbsp;scanf("%d",&a);&nbsp;tentotwo(a);&nbsp;}&nbsp;void tentotwo(int a)&nbsp;{int s[20],i=0;&nbsp;for(;i<=20;i++)s[i]=0;i=0;while(a!=0)&nbsp;{s[i]=(a%2);a=a/2;i++;}&nbsp;while(i>=0){printf("%d",s[i]);i--;}&nbsp;}不过第二种结果前边多一个0;不过不影响理解
打开App,查看更多内容
随时随地看视频慕课网APP