导航:网站首页 >
一道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
问题推荐