关于C语言的问题!!!急急急急!!!!

来源:百度知道 编辑:UC知道 时间:2024/06/06 00:38:25
题目是这样的:
输入一个最多 5 位的无符号正整数,以十、二、八、十六进制形式输出。
以下是程序:
main( )
{ unsigned num, n, t;
printf(”\nPlease input a data(1-65535):”);
scanf(”%u”, &num);
printf(”\n\t10:%u\n\t 2:  ”, num);
n=num;
do { t=n%2; n=n/2; /*除2取余法*/
printf(“%d\b\b”, t); }
while(n!=0 );
printf(”\n\t 8:%o\n\t16:%x\n”, num, num);
}
#include "math.h"
main( )
{ unsigned num, n, t; int i;
printf("\nPlease input a data(1-65535):");
scanf("%u", &num);
printf("\n\t10:%u\n\t 2:", num);
n=num; i=15;
do { t=pow(2, i); /*降幂法*/
if(n>=t) { printf("1"); n=n-t; }
else printf("0");
i--;
} while(n!=0 );
printf("\n

printf("\n\t10:%u\n\t2:____", num); //_代表空格

这句话的意思就是:换行(\n)后先输出8个空格(\t),然后输出"10:"(10:)和num的值(%u),然后换行(\n),再空8格(\t),再输出"2:"(2:) ,再输出四个空格(____)

printf("%d\b\b", t);

除2取余法举个例子来说比如求10转换成2进制是多少
那么
10 / 2 = 5 .. 0
5 / 2 = 2 .. 1
2 / 2 = 1 .. 0
1 / 2 = 0 .. 1

那么(10)2 = (1010)2
2进制值即从下往上取余数

第一次执行
do
{
t=n%2;
n=n/2; /*除2取余法*/
printf("%d\b\b", t);
}
while(n!=0 );
的时候,t = 0, n = 5
然后输出 0 然后光标退2格(\b\b)(即屏幕上光标到了0前面的位置上)
第二次执行的时候,t = 1, n = 2
然后输出 1 (此时屏幕上显示的就是10,光标位置在0上)然后光标再退2格(光标即到了1前面一个位置上)
依次类推,输出0光标退2格
输出1光标退2格
所以最后屏幕上显示的就是1010了
注意此时光标是在第一个1前面的,输出完要像
printf("\n\t 8:%o\n\t16:%x\n", num, num);
一样先用\n让光标到下一行开头再输出其它的东西,不然屏幕上显示的东西就乱了

其实这样做有个弊端,就是当这个二进制