C语言求题解:把输入的十进制数以十六进制数输出
#include #define N 8 void tran(int num,int k) {int arr[N],i;for (i=0;i =0;i--)switch (arr[i]){case 10: printf("A");break;case 11: printf("B");break;case 12: printf("C");break;case 13: printf("D");break;case 14: printf("E");break;case 15: printf("F");break;default: printf("%d",arr[i]);}printf("
"); } int main() {int num,choo; loop: printf("请选择功能:0.退出 1.十进制转二进制 2.十进制转八进制 3.十进制转十六进制
");scanf("%d",&choo);switch (choo){case 1:printf("请输入要转换的十进制数:");scanf("%d",&num);tran (num,2);goto loop;case 2:printf("请输入要转换的十进制数:");scanf("%d",&num);tran (num,8);goto loop;case 3:printf("请输入要转换的十进制数:");scanf("%d",&num);tran (num,16);goto loop;case 0:break;
default :printf("输入有误!请重新输入!
");goto loop;}}
拓展资料
C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制定了一套完整的美国国家标准语法,称为ANSI C,作为C语言最初的标准。 目前2011年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC)发布的C11标准是C语言的第三个官方标准,也是C语言的最新标准,该标准更好的支持了汉字函数名和汉字标识符,一定程度上实现了汉字编程。
C语言是一门面向过程的计算机编程语言,与C++,Java等面向对象的编程语言有所不同。
其编译器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等。
(参考资料 百度百科 C语言)
最简单的,不涉及算法的作法就是用printf的输出格式 %x 输出16进制
%x 输出小写的a、b、c、d、e、f %X输出大写的A、B、C、D、E、F
#include int main(){ int a; printf("请输入一个10进制整数:" ); scanf( "%d", &a); printf("该数转换为16进制数为: %X
",a); return 0;}
main()
{
char b[17]={"0123456789ABCDEF"}; /*十六进制位值表示,相当于十进制的0—9;*/
int c[64],d,i=0,base=16;
long n;
printf("Enter a number:\n");
scanf("%ld",&n);
do
{
c[i]=n%16; /*得到16进制的各个位,放进c【i】,如58,等于3余10,*/
i++; /*记录转化后有几位 */
n=n/16; /* 你自己拿一个数按它的方法过程除10得到结果比较下,你就基本能理解了只不过一个除16,一个除10,几进制就除几*/
/**/
}while(n!=0);
printf("Transmite new base:\n"); /*新转化的数是:(屏幕输出提示而已)*/
for(--i;i>=0;--i) /*输出转化换的结果啊,前面说了i记录的是转换后的位数,从高位开始输出对应b[17]里的位值表示*/
{ /*如果只有一位例如13转化后应该是C,i=1;i减1后为零,符合条件i>=0可以进乳循环,对应的是c[0]=13,*/
d=c[i]; /*d=13*/
printf("%c",b[d]); /*输出的为b[13]=C*/
} /*同样如果多位结果继续循环如:20转化后i=26;c[1]=1,c[0]=A;d先等于1,后为10(A),输出1A*/
printf("\n");
}
#include <stdio.h>
main()
{
char b[17]={"0123456789ABCDEF"};
int c[64],d,i=0,base=16;
long n;
printf("Enter a number:\n");
scanf("%ld",&n);
do //这个循环是要把十进制分离成十六机制数
{
c[i]=n%16; //对16求余之后,c[i]存的就是数就是十六进制数的‘个’,‘十六’,‘二百五十六’位了
i++;
n=n/16; //分离一位之后弃掉一位
}while(n!=0);
/*举例来说你输进去一个数是257
第一个循环n=257
C[0]就是257对十六求余得1,此时n=257
之后 n对16求模,也就是求n中共有多少个16,此时n=16,也就是说n=n/16一句完全可以换为n=(n-n%16)/16 其实n%16就是被抛弃的部分
第二个循环n=16
c[1]=0,n=1
第三个循环n=1
c[2]=1,n=0
n=0退出循环
这样就将257转换为101H可以计算101H=16^2+0*16+1=257结果没有问题
*/
printf("Transmite new base:\n");/*该句在逻辑上是没有用的,就是提示用户输出的数据时转换过的了*/
/*这个循环有什么用?我就知道如果输入个小于16的数能用上吧?
是这样的在出do-while循环后i的值是要大于c里面有效地数据的,所以这个循环要先减一
可以改成这样
i--;
for(i;i>=0;i--)
{
d=c[i];
printf("%c",b[d]);
}
*/
for(--i;i>=0;--i)
{
d=c[i];
printf("%c",b[d]);
}
printf("\n");//该处最好改成 printf("H\n"); 原因:H是十六进制的标志,不改也没有影响,仅是一个建议
}
他那个好麻烦的转换。大体思路是这样的,就拿一个十进制数如26,不停地对16求余,得到的余数大于9,则按A(10)B(11)C(12)D(13)E(14)F(15)这样排列存储,小于10就是123456789这样,他们都被存储在字数数组中如我的n16[],最后倒着输出就是转换后的16进制字符串了。
#include <stdio.h>
#include <string.h>
main()
{
int n10,t,i=0;
char n16[64];
printf("输入10进制数:");
scanf("%d",&n10);
while(n10>0)
{
t=n10%16;n10/=16;
if(t>9)
n16[i++]=t-10+'A';
else
n16[i++]=t+'0';
}
n16[i]='\0';
printf("转换为十六进制数:%s\n",strrev(n16));
return 0;
}
C语言求题解:把输入的十进制数以十六进制数输出
long n;printf("Enter a number:\\n");scanf("%ld",&n);do { c[i]=n%16; \/*得到16进制的各个位,放进c【i】,如58,等于3余10,*\/ i++; \/*记录转化后有几位 *\/ n=n\/16; \/* 你自己拿一个数按它的方法过程除10得到结果比较下,你就基本能理解了只不过一个除16,一...
汇编语言问题 已知计数器CX内存放的数值是20 求:将CX中的数值以10...
最简单的办法是用栈。因为这种算二进制、十六进制、十进制转换的,在数据结构里就是典型的栈操作。sseg segment stack dw 512 dup(?)sseg ends cseg segment assume cs:cseg, ss:sseg start:mov cx, 20012 ;为了更能看出效果,这里改成了一个较大的数。你直接改成20就行了。mov bx, 10 ...
C语言:这题怎么解:"输入16进制数,最后输出10进制数,用函数调用"
include<stdio.h> main(){ int i;int change(int);scanf("%x",&i);printf("%d\\n",change(i));getch();} int change(int n){ int i=0,j,k,s,a[1000];while(n){ a[i++]=n%16;n\/=16;} for(s=0,k=1,j=0;j
简单C语言编程,求解答
scanf("%lf,%lf,%lf",&a,&b,&c);} s=(a+b+c)\/2;S=sqrt(s*(s-a)*(s-b)*(s-c))+0.0005;printf("\\n三角形的面积为:%10.3lf",S);getch();} (附加题)6.编程将用户输入的十进制数转换成十六进制数和八进制数,并输出,要求界面友好。include "stdio.h"main(){ int ...
c语言,求将一个十进制的数转化为一个任意进制的数。求解决我的程序的...
struct node { int data;struct node*link;};struct node*top=NULL;void jinzhizuanhuan(int,int);void display();void main(){ int a,b;printf("请输入你想要转换的数(十进制):");scanf("%d",&a);for(;;){ printf("要转换的进制(大于1的整数):");scanf("%d",&b);if(b>1)\/\/...
C语言问题,十进制转换任何进制数,请问错在哪?无限循环了好像_百度知 ...
C语言问题,十进制转换任何进制数,请问错在哪?无限循环了好像 #include"stdio.h"main(){longinta[99999],b,i,c=0,e=1,j=0;printf("输入十进制数:");scanf("%ld",&b);for(i=0;b!=0;i++){a[i]=b%2;b=b\/2;c++;}for(i=c;i!=0;i--){while(i!=0){a[i]=a... #include "...
C语言问题,如下,如果输入10的话,为什么最后的number会是0,这个题是要...
\/\/这里不对,比如输入number=10,number-number%dividend2,就是10-10=0了啊。add=add+number*x;dividend2=dividend2*10;\/ add=add+(dividend2%10)*pow(2.0,i);;dividend2=dividend2\/10;} printf("输入的二进制数是:%d\\n",number);printf("计算出十进制数是:%d\\n",add);} ...
在C语言中 语句 printf("%d%d%%d%d",1+2,5\/2,-2*4,11%3)是怎样...
最后 11%3=2(11\/3取余数) 关于取余计算.我想说一下,就是只有整型数才能进行取余计算. 特殊情况,如果M小于N,M%N=M.输出框输出的是32-82(没有空格)还想说一下关于printf的问题.就以本题为例.如果%d的个数少于输出项的个数,则多余的项不输出.如果%d的个数多于输出项的个数.则多项的...
用c语言,输入一个十进制数,将其转换为二进制数并输出
include <stdio.h>void bin( int n ){if ( n\/2 ) bin(n\/2) ; \/\/先输出高位的二进制数printf( "%d", n%2 );}void main(){int n;scanf("%d", &n);bin(n);printf("\\n");}
二级C语言改错题,题目:将输入的十进制正整数转换为十六进制数,且用字...
已经添加注释:#include <math.h>#include <string.h>#include <stdio.h>题目:将输入的十进制正整数转换为十六进制数,且用字符串存放该十六进制数void main(){int x,b,i,j;char s[5];printf("Input a number(Dec): ");scanf("%d",&x);\/**\/ i=1; \/**\/ i=0 \/\/数组一般从...