第二次博客园作业

一 运行截图

 

三,函数介绍

         此程序运用了三个函数,mian函数负责数据输入,suh函数负责数据检测,numbers函数负责数据运算及结果输出.

suh函数:int suh(char x[],int count,int sign)
{
  int i,flag;
  flag=count;
  if(sign!=0)
  return 0;
 for(i=0;i<count;i++){
  if(x[i]>='a'&&x[i]<='f')
  flag--;
  if(x[i]>='A'&&x[i]<='F')
  flag--;
  if(x[i]>='0'&&x[i]<='9')
  flag--; 
 }
 if(flag==0)
 return 0;
 return 1;
}

numbers函数:

void numbers_(int t,int n,char b[],int m,int count)

 int i,j,k=0,number,sum=0,d;
 char c[1001];
 
 for(i=0;b[i]!='\0';i++)
 {
  if(b[i]>='0'&&b[i]<='9')
   number=b[i]-'0';
  else
   number=b[i]-'a'+10;
  sum=sum*n+number;
 }
 while(sum)
 {
  d=sum%m;
  c[k++]="0123456789abcdef"[d];
  sum/=m;
 }
 i=0;
 for(i=k-1;i>=0;i--)
 {
  if(c[i]>='0'&&c[i]<='9')
   printf("%d",c[i]-'0');
  else
   printf("%d",c[i]);
 }
 printf("\n");
}

四,mian函数展示

#include<stdio.h>
#include<time.h>
#include<stdlib.h>

int main(void){

       int m, i, count =0, among,n,flag=0,joy;

       srand((unsigned) (time(NULL)));

       joy=rand()%3;

       int t,s;

       int sign=0;

       static char x[1000],ch,b[1001];

       printf("             欢迎使用进制转换器\n本进制转换器支持二,八,十,十六进制之间的相互转化 \n");

       C:do{

       printf("请输入需要转化的数字(敲击回车结束输入):");

       for (i = 0; i < 1000; i++){

                     scanf("%c",&x[i]);

                     if (x[i]=='\n')

                     {

                            break;

                     }

                     count++;

              }

       }while (count == 0);

       t=i;

       for(i=0;i<count;i++){

              if(x[i]>='A'&&x[i]<='F'){

                     x[i]=x[i]+32;

              }

       }

    for(i=0;i<count;i++){

              if(suh(x,count,sign)){

                     sign++;

                     printf("Error输入错误,请重新输入\n");

                     goto C;

              }

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

              b[i]=x[i];

              b[i]='\0';

    }

       printf("请输入数字的原进制(轻敲回车结束输入):");

       scanf("%d", &n);

       ch=getchar();

              if(n!=2&&n!=8&&n!=10&&n!=16){

              printf("Error:输入错误,请重新输入(本进制转化器仅支持二,八,十,十六进制直接的转化\n");

              flag=1;

              }

              sign=0;

       printf("请输入数字需转化成的进制(轻敲回车结束输入):");

       scanf("%d",&m);

       if(m!=2&&m!=8&&m!=10&&m!=16){

           printf("Error:输入错误,请重新输入(本进制转化器仅支持二,八,十,十六进制直接的转化\n");

       }

       printf("正在转换,请稍后\n");

       t=x[t];

       printf("%d(%d)的%d进制数为:  ",t,n,m);

      numbers_(t,n,b,m,count);

五,思维导图

 

 

 六,代码互评

 

此同学通过菜单选择的方式来进行数据输入,可以使用户更为直观

而我在mian函数中通过scanf函数进行数据输入,使用户可以自由选择,并将进制作为参数加入运算中,不仅可以减少代码量,且在细微修改后可以做到16进制以内任意进制间的相互转化.

 

posted @ 2019-11-10 21:29  NiPShady  阅读(105)  评论(0编辑  收藏  举报