C语言:写一函数,输入一个十六进制数,输出相应的十进制数。

2024-11-14 01:32:11
推荐回答(5个)
回答1:

#include<stdio.h>

#include<math.h>

#include<string.h>

int main()

{

char a[10];

void convert(char a[]);

printf("请输入十六进制数:");

gets(a);//输入十六进制数

convert(a);

return 0;

}

void convert(char a[])

{

int n,i,num=0;

n=strlen(a);

for(i=n-1;i>=0;i--)

{

if(a>='0'&&a<='9')

num+=(a-'0')*pow(16,n-1-i);

else if(a>='A'&&a<='Z')

num+=(10+(a-'A'))*pow(16,n-1-i);

else if(a>='a'&&a<='z')

num+=(10+(a-'a'))*pow(16,n-1-i);

}

printf("转换十进制为:");

printf("%d",num);

}

扩展资料:

gets()的用法:

gets()函数用来从标准输入设备(键盘)读取字符串直到回车结束;但回车符不属于这个字符串。其调用格式为:gets(s);其中s为字符串变量(字符串数组名或字符串指针)。

gets(s)函数与scanf("%s",s)相似,但不完全相同,使用scanf("%s",s)函数输入字符串时存在一个问题,就是如果输入了空格会认为输入字符串结束,空格后的字符将作为下一个输入项处理,但gets()函数将接收输入的整个字符串直到回车为止。

示例:

#include<stdio.h>

int main()

{

char s[20];

printf("What's your name?\n");

gets(s);

printf("%s\n",s);

return 0;

}

当输入a bde回车的时候,会输出a bde。

回答2:

#include
#include 
#define N 100
void main()
{
   char array[N];
   int fun(char*);
   gets(array);
   printf("%d\n", fun(array));
}
int fun(char *array)
{
 int i, sum = 0;
 for(i = strlen(array)-1; i>=0; i--)
 {
  if(array[i] >= '0' && array[i] <= '9')
   sum = sum * 16 + array[i] - '0';
  else if(array[i] >= 'a' && array[i] <= 'f')
   sum = sum * 16 + array[i] - 'a' + 10;
  else if(array[i] >= 'A' && array[i] <= 'F')
   sum = sum * 16 + array[i] - 'A' + 10;
  else
   break;
 }
 return sum;
}

运行结果

回答3:

有几个问题
一个是函数声明不对
函数调用有问题
判断数值临界不准,没有包含==的情况
算法可以写的简单一点
最终优化如下
#include
#include
void main()
{
char array[100];
void fun(char*);
gets(array);
fun(array);
}

void fun(char array[100])
{
int sum=0,i;
for(i=0;i {
sum*=16;
if('0'<=array[i]&&array[i]<='9')
sum+=array[i]-'0';
if('a'<=array[i]&&array[i]<='z')
sum+=array[i]-'a'+10;
if('A'<=array[i]&&array[i]<='Z')
sum+=array[i]-'A'+10;
}
printf("%d",sum);
}

回答4:

#include
#include
void main()
{
       char array[100];
       void fun(char array[100]);
       gets(array);
       fun(array);//这里改改
}
void fun(char array[100])
{
       int sum=0,i;
       for(i=0;i       {
   if('0'    sum=sum*16+array[i]-'0';
   if('a'    sum=sum*16+array[i]-'a'+10;
   if('A'    sum=sum*16+array[i]-'A'+10;
       }
   printf("%d",sum);
}

回答5:

double fun(U8 *array)
{
 int i;
 double sum = 0.0;
 for(i = strlen(array)-1; i>=0; i--)
 {
  if(array[i] >= '0' && array[i] <= '9')
   sum += pow(16.0,(double)(strlen(array)-i-1))*(array[i] - '0');
  else if((array[i] >= 'a') && (array[i] <= 'f'))
   sum += pow(16.0,(double)(strlen(array)-i-1))*(array[i] - 'a' + 10);
  else if((array[i] >= 'A')&&(array[i] <= 'F'))
sum += pow(16.0,(double)(strlen(array)-i-1))*(array[i] - 'A' + 10);
  else
   break;
 }
 return sum;
}