怎么利用c 语言编程进行进制计算,一道c语言编程题,关于实现不同进制数间转换 一道关于电脑方面的计算题:二进制数101100101001转......

导航:网站首页 >

一道c语言编程题,关于实现不同进制数间转换 一道关于电脑方面的计算题:二进制数101100101001转...

一道c语言编程题,关于实现不同进制数间转换 一道关于电脑方面的计算题:二进制数101100101001转...

相关问题:

匿名网友:

我已经好了,正在贴代码,你等等哈~~

先帮你改错吧,再帮你优化优化哈~

#include "stdio.h"

#include "string.h"

#include "math.h"

long transform(char string[]);

void Function(char str[]);

int nsystem=0,k=0;

int number[100];

void main()

{

char str[100],c;

int i=0;

printf("选择你要转换的进制:\n1:二进制 2:八进制 3:十六进制");

scanf("%d",&nsystem);

switch(nsystem)

{

case 1:nsystem=2;break;

case 2:nsystem=8;break;

case 3:nsystem=16;break;

default:break;

}

printf("请输入要转换的数:\n");

c=getchar();

gets(str);

Function(str);

for (i=0;i<=k;i++)

printf("%d ",number[i]);

}

void Function(char str[100])

{

int i=0,j;

char string[100];

while(1)

{

j=0;

for(;str[i]!='\0' && str[i]!=' ';i++) //循环条件很重要,不要忘了字符串结束标志是'\0'

{

string[j]=str[i];

j++;

}

string[j] = '\0';//复制字符串时不要忘了加上结束标志,这样strlen函数才能正确统计出其长度

number[k]=transform(string);

if(str[i]!='\0' && str[i+1]!=' ') {//如果到了字符串末尾,应退出循环。

i++;

k++; //k++ 应该放在这,因为如果是跳出循环的话k不该自增的,或者把你在main函数里最后的for循环中条件改为i

}

else

break;

}

}

long transform(char string[])

{

int i;

int len;

long num=0;

len=strlen(string);

for(i=0;i

{

if(string[i]>='0'&&string[i]<='9')

string[i]-=48;

else if(string[i]>='A'&&string[i]<='F')

string[i]-=55;

else if (string[i]>='a'&&string[i]<='f')

string[i]-=87;

num=num+pow(nsystem,len-i-1)*string[i];

}

return(num);

}

代码优化:(加了一些防错处理功能)

#include

#include

#include

#define MAX_STR_LEN 100 //定义字符串最大长度

#define SPACE ' ' //定义空格符

void transform(int nsystem,char str[]) { //将n进制转换为十进制

int i,num,length;

char *p,temp[MAX_STR_LEN];

p = temp;

while((*p = *str) != '\0') {

while((*p = *str++) == SPACE); //跳过前导空格,注意是分号结尾

*++p = *str++;

while((*p != SPACE) && (*p != '\0')) { //遇到空格或'\0'时,*p才停止读入

*++p = *str++;

} //while

*p = '\0';

str--; //如果上面*p是遇到'\0'而停止读入时,应让str退一步以指回向'\0',如果是遇到空格而停止读入的,则str自减一也只是退一步重新指向了空格符,对后续操作不影响

num = 0;

length = strlen(temp);

for(i = 0; i < length; i++) { //由于加了输入防错处理,所以temp[i]肯定是合法字符

if(temp[i] <= '9') temp[i] -= '0';

else if(temp[i] <= 'F') temp[i] = temp[i]-'A'+10;

else if(temp[i] <= 'f') temp[i] = temp[i]-'a'+10;

num += pow(nsystem,length-1-i) * temp[i];

} //for

printf("%d ",num);

p = temp;

} //while

} //transform

int main() {

int i,nsystem; //n进制

char str[MAX_STR_LEN];

printf("此为将二,八,十六进制转换为十进制程序!\n");

printf("请选择要转换的进制(输入2或8或16): ");

scanf("%d",&nsystem);

getchar(); //吃掉输入产生的回车符

while((nsystem != 2) && (nsystem != 8) && (nsystem != 16)) {

printf("您输入的进制错误,请重新输入: ");

scanf("%d",&nsystem);

getchar();

} //while

printf("请输入要转换的数(如有多个,请用空格分开,不超过%d个字符):\n",MAX_STR_LEN-1);

i = 0;

while((i < MAX_STR_LEN-2) && ((str[i] = getchar()) != '\n')) {

if((nsystem == 2) && ((str[i] >= '0') && (str[i] <= '1') || (str[i] == SPACE))) {

i++;

continue;

} //if

if((nsystem == 8) && ((str[i] >= '0') && (str[i] <= '8') || (str[i] == SPACE))) {

i++;

continue;

} //if

if((nsystem == 16) && ((str[i] >= '0') && (str[i] <= '9') || (str[i] >= 'a') && (str[i] <= 'z') || (str[i] >= 'A') && (str[i] <= 'Z') || (str[i] == SPACE))) { //这些为十六进制合法字符

i++;

continue;

} //if

printf("您输入的%d进制数不合法,请重新输入:\n",nsystem);

setbuf(stdin,NULL); //将输入缓冲区设置为空

i = 0;

} //while

str[i] = '\0';

printf("转换后为:\n");

transform(nsystem,str);

printf("\n");

return 0;

} //main

匿名网友:

1.一道c语言编程题,关于实现不同进制数间转换

问:程序调用同一个转换函数,但通过传入参数不同,使之既能对二进制数做转...

2.一道关于电脑方面的计算题:二进制数101100101001转...

答:1011 0010 1001 ↓ ↓ ↓ B 2 9 结果为B29

3.关于一道16进制转8进制的C语言题目

问:问题描述 给定n个十六进制正整数,输出它们对应的八进制数。 输入格式 ...

4.关于计算机基础的知识。 书上有一道题,说把十进制...

问:关于计算机基础的知识。 书上有一道题,说把十进制数转换为二进制(字长...

5.C语言编程:怎么把一个十进制数转换成为一个十六进...

答:第一种:用来糊弄老师的,输入一个数采用16进制格式输出 #include int main() { int num = 0; scanf(%d, &num); printf(%x, num); return 0; } 第二种: #include #include char oNumTable[6] = {'A', 'B', 'C', 'D', 'E', 'F'}; void dToO(...

6.一道c语言编程题,将十进制转换为二进制

问:/*2、编程实现将任意的十进制整数转换成R进制数(R在2-16之间)。*/ #in...

7.如何把一个10进制数转换成16进制数

答:一种是采用除16求余法,还有就是先把十进制转二进制再转十六进制。分别举个例子: 1.除16求余 115转十六进制 115/16 商是7 余数是3.用7再除16,商是0,余数是7 故结果是73 2.先转二进制再转十六进制 115的二进制是1110011,整数部份从最低有效位...

8.怎么把一个10 进制数转化为8进制啊!

问:怎么把一个10 进制数转化为8进制啊!求高手说下公式什么的 谢谢啊

9.怎样将一个数转换成二进制数?

问:例如123,怎样将123转换成二进制数,是怎样转换的?过程是怎样,请详细...

10.关于一个二进制数转为八进制数的C语言编程

问:我看到了这样一个程序,有些问题: #include #include

问题推荐

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值