急求,哪位高手能给小弟我找出小弟我编的c错在那了。先多谢了

急求,谁能给我找出我编的c错在那了。先谢谢了
以下是我编写的一个程序。目的是把a到z的26个字母先让他们返回1到26个数字,然后经过以下运算:
    b     k     o     w
    2     11   15   23
    \     /\   /\/\/
        3     2     7   5
          \/   \/   \/
            5     9     2
              \/   \/
              4       1
能看的懂吗?以下是我编写的程序,但怎么也运算不对。请高手指教:
#include <stdio.h>
main()
{
    char   a[20],*b,*p,*q;
    printf( "Please   enter   your   name   :\n ");
    gets(a);
    number(a);
    puts(a);
    if(a[0]!= '\0 ')
    do
    {
      for(n=0,p=a,q=p+1;*q!= '\0 ';n++,p++,q++)
            if((*p+*q- '0 ')> '9 ')   *p=*p+*q- '0 '-10;
            else   *p=*p+*q- '0 ';
      *p= '\0 ';
      printf( "your   probability   are:   %s%\n ",a);

}
number(char   a[20])
{     char   *p,*q,b[20];
      int   i;
      p=a;q=b;
      for(;*p!= '\0 ';p++,q++)
          {   if( 'j '> *p   &&   *p> = 'a ')
                      *q=*p-48;
              else   if( 't '> *p   &&   *p> = 'j ')
                  {   *q=49;
                      q++;
                      *q=*p-58;
                  }
              else{   *q=50;
                          q++;
          *q=*p-68;
      }
          }
      for(i=0;b[i]!= '\0 ';i++)
            a[i]=b[i];
      return(a[20]);
}

------解决方案--------------------
#include <stdio.h>
main()
{
char a[20];
printf( "Please enter your name :\n ");
gets(a);
number(a);
puts(a);
if(a[0]!= '\0 '){
cal(a);
printf( "your probability are: %s%\n ",a);
}

}
void number(char a[20])
{ char *p,*q,b[20];
int i;
p=a;q=b;
for(;*p!= '\0 ';p++,q++){
if(*p> 'A '&&*p < 'Z '){
*q=*p-16;
}
else
if(*p> = 'a ' &&*p < 'z '){
*q=*p-48;
}
}
for(i=0;b[i]!= '\0 ';i++)
a[i]=b[i];
}

int cal(char a[20])
{
int result,i,j,len=0,b[20];