帮忙检查一个c语言程序:将一个十六进制整数转化成十进制整数的程序。
#include<stdio.h>#include<string.h>#include<math.h>voidmain(){voidfunc(chars[],int);c...
#include<stdio.h>
#include<string.h>
#include<math.h>
void main(){
void func(char s[],int );
char a[20];
int n;
printf("请输入一串十六进制数:");
scanf("%s",a);
n=strlen(a);
func(a,n);
printf("%s",a);
}
void func(char s[],int x){
int i;
for(i=x-1;i>=0;i--){
if(s[i]>='0'&&s[i]<='9'){
s[i]=(s[i]-'0')*pow(16,i-x-1);
}
if(s[i]>='a'&&s[i]<='f'){
s[i]=(s[i]-'a'+10)*pow(16,i-x-1);
}
if(s[i]>='A'&&s[i]<='F'){
s[i]=(s[i]-'A'+10)*pow(16,i-x-1);
}
}
}
我觉得在赋值给s[i]出了问题,但是不会改了。。。 展开
#include<string.h>
#include<math.h>
void main(){
void func(char s[],int );
char a[20];
int n;
printf("请输入一串十六进制数:");
scanf("%s",a);
n=strlen(a);
func(a,n);
printf("%s",a);
}
void func(char s[],int x){
int i;
for(i=x-1;i>=0;i--){
if(s[i]>='0'&&s[i]<='9'){
s[i]=(s[i]-'0')*pow(16,i-x-1);
}
if(s[i]>='a'&&s[i]<='f'){
s[i]=(s[i]-'a'+10)*pow(16,i-x-1);
}
if(s[i]>='A'&&s[i]<='F'){
s[i]=(s[i]-'A'+10)*pow(16,i-x-1);
}
}
}
我觉得在赋值给s[i]出了问题,但是不会改了。。。 展开
2个回答
展开全部
程序有以下两个问题:
1、func函数中所有的i-x-1都应该改成x-i-1。楼主的意思就是乘以16的对应的位数次方呗,你仔细看看就知道应该是x-i-1
2、我们假设十位上是的数字是1,那么这个数代表了16,这时候用一个字符是无法表示的
也就是说,不能简单的用s[i]去存放原16进制的某位转换成10进制对应的数
一个简单的修改方法是,让func函数返回一个int型的数值,这个返回值就是对应的十进制数
具体代码见下
#include<stdio.h>
#include<string.h>
#include<math.h>
int func(char s[],int x);
void main()
{
char a[20];
int n;
int num;
printf("请输入一串十六进制数:");
scanf("%s",a);
n=strlen(a);
num=func(a,n);
printf("%s=%d",a,num);
}
int func(char s[],int x)
{
int i;
int num=0;
for(i=x-1;i>=0;i--)
{
if(s[i]>='0'&&s[i]<='9')
{
num+=(int)((s[i]-'0')*pow(16,x-i-1));
}
if(s[i]>='a'&&s[i]<='f'){
num+=(int)((s[i]-'a'+10)*pow(16,x-i-1));
}
if(s[i]>='A'&&s[i]<='F'){
num+=(int)((s[i]-'A'+10)*pow(16,x-i-1));
}
}
return num;
}
1、func函数中所有的i-x-1都应该改成x-i-1。楼主的意思就是乘以16的对应的位数次方呗,你仔细看看就知道应该是x-i-1
2、我们假设十位上是的数字是1,那么这个数代表了16,这时候用一个字符是无法表示的
也就是说,不能简单的用s[i]去存放原16进制的某位转换成10进制对应的数
一个简单的修改方法是,让func函数返回一个int型的数值,这个返回值就是对应的十进制数
具体代码见下
#include<stdio.h>
#include<string.h>
#include<math.h>
int func(char s[],int x);
void main()
{
char a[20];
int n;
int num;
printf("请输入一串十六进制数:");
scanf("%s",a);
n=strlen(a);
num=func(a,n);
printf("%s=%d",a,num);
}
int func(char s[],int x)
{
int i;
int num=0;
for(i=x-1;i>=0;i--)
{
if(s[i]>='0'&&s[i]<='9')
{
num+=(int)((s[i]-'0')*pow(16,x-i-1));
}
if(s[i]>='a'&&s[i]<='f'){
num+=(int)((s[i]-'a'+10)*pow(16,x-i-1));
}
if(s[i]>='A'&&s[i]<='F'){
num+=(int)((s[i]-'A'+10)*pow(16,x-i-1));
}
}
return num;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询