序号与代码

来源:互联网 发布:苹果在线软件安卓版 编辑:程序博客网 时间:2024/05/21 19:28

扩展Excel表列序号为1,2,……的列代码依次为A,B,C,……,Y,Z;AA,AB,……,AZ;BA,BB,……,AZ;BA,BB,……,BZ;……;ZA,ZB,……,ZZ;AAA,……;

试进行列序号与列代码的相互转换;

输入列序号(不超过15位整数)或列代码(不超过10个大写字母),输出对应的列代码或对应的列序号;

例如,输入列序号28,输出对应的列代码AB;输入列代码BA,输出对应的列序号53;

1.说明:

设置3个数组:字符串数组b存储输入的列序号与列代码,整型数组a存储把b串中的每一个字符转换为整数,整型数组p存储把序号s通过“除26取余”的各位余数;

(1)、以字符串方式输入代码或序号,并把各字符转换为数字存储在a数组中,检测若输入的字符不是数字或大写字母时退出;

(2)、一个数字(如a[1])若非数字,则实施代码转换为代码;否则,实施序号转换为代码;

(3)、代码转换为序号: 应用a[k]-16把一个代码转换为数字(如A~1,B~2,……),然后在k循环中通过s=(s+a[k])*26转换,整数s即代码的序号;

(4)、序号转换为代码:首先把各数字a[k]应用s=(s+s[k])*10转换为十进制整数s;然后通过“除26取余”把s转换为26进制数,从低位开始为p[1],p[2],……(若p[m]=0,则p[m]=26;,相应的被除数x=x-1;),最后从高位到低位以字符方式输出p[k],即为所求的列代码;

2.程序设计:

#include<stdio.h>#include<math.h>int main(){   int k,m,a[20],p[20];   double s,x;   char b[20];   printf("请输入列序号或列代码:");   scanf("%s",b);         /*以字符串方式输入代码或序号*/   for(m=0,k=0;b[k]!='\0';k++)   {      m++;      if(b[k]>90 || b[k]<48 || b[k]>57 && b[k]<65)      return;      a[m]=b[m-1]-48;   }   if(a[1]>9)             /*代码转换为序号*/   {      for(s=0,k=1;k<m;k++)         s=(s+a[k]-16)*26;  /*大写字母转换为数字计算*/      s=s+a[m]-16;      printf("对应的序号为:%.0f\n",s);   }   else                    /*序号转换为代码*/   {      for(s=0,k=1;k<m;k++)         s=(s+a[k])*10;      s=s+a[m];            /*输入的整数由字符串转换为整数*/      x=s;      m=0;      while(x>0)      {         m++;              /*转换为26进制*/         p[m]=(int)fmod(x,26);         x=floor(x/26);         if(p[m]==0)         {            p[m]=26;            x=x-1;         }      }      printf("对应的代码为:");      for(k=m;k>=1;k++)         printf("%c",p[k]+64);      printf("\n");   }}

3.程序运行示例及其注意事项:

请输入列序号或列代码:123456789098765对应的代码为:VSDYLBQNTE请输入列序号或列代码:ABCDEFGHIJ对应的序号为:5872551179180

注意:程序设计了自动判别功能,即根据输入数据的类型进行判别并转换为另一类型数据

为了验证转换结果是否可靠,可运行程序实施相互转换:

  • 输入某一序号的转换的代码;然后输入该代码,即时验证输出的序号与上次输入的序号是否相同
1 0
原创粉丝点击