进制转换程序说明及源程序
程序说明: 首先用switch生成一个菜单,然后通过menu_select()选择菜单项,三个函数的功能分别是:Hextodec十六进制转换成十进制的函数;Octtodec是八进制转换成十进制的函数;Bintodec是二进制转换成十进制的函数。 此程序仅供参考,可能编写中有错误或许多方面没有考虑周全。如有其他程序可代替本程序。
源程序: #include "stdio.h" #include "stdlib.h" int menu_select(); void main() { long int Hextodec(char s[]); long int Octtodec(char s[]); long int Bintodec(char s[]); int c,flag,i,flag1; flag=0; flag1=1; i=0; char t[100]; { switch (menu_select()){ case 1: printf("input a HEXTODEC umber:"); while((c=getchar())!='\0' && i<100 && flag1) {if(c>='0' && c<='9'|| c>='a' && c<='f' || c>='A' && c<='F') { flag=1; t[i++]=c; } else if(flag) { t[i]='\0'; printf("%d",Hextodec(t)); printf("\ngo on (Y/N)?"); c=getchar(); if (c=='n' || c=='N') flag1=0; else { flag=0; i=0; } } } break; case 2: printf("input a OCTTODEC umber:"); while((c=getchar())!='\0'&& i<100 && flag1) {if(c>='0' && c<='7') { flag=1; t[i++]=c; } else if(flag) { t[i]='\0'; printf("%d",Octtodec(t)); printf("\ngo on (Y/N)?"); c=getchar(); if (c=='n' || c=='N') flag1=0; else { flag=0; i=0; } } } break; case 3: printf("input a BINTODEC number:"); while((c=getchar())!='\0' && i<100 && flag1 ) {if(c>='0' && c<='1') { flag=1; t[i++]=c; } else if(flag) { t[i]='\0'; printf("%d",Bintodec(t)); printf("\ngo on (Y/N)?"); c=getchar(); if (c=='n' || c=='N') flag1=0; else { flag=0; i=0; } } } break; case 4: printf("Goodbye!\n"); exit(0); } } } int menu_select() { char s; int cn; printf(" 1.HEXTODEC\n"); printf(" 2.OCTTODEC\n"); printf(" 3.BINTODEC\n"); printf(" 4.Goodbye\n"); do { s=getchar(); cn=(int)s-48; }while (cn<0||cn>4); return cn; } long int Hextodec(char s[]) {long int i,n; n=0; for(i=0;s[i]!='\0';i++) {if (s[i]>='0' && s[i]<='9') n=n*16+s[i]-'0'; if (s[i]>='a' && s[i] <='f') n=n*16+s[i]-'a'+10; if (s[i]>='A' && s[i]<='F') n=n*16+s[i]-'A'+10; } return(n); } long int Octtodec(char s[]) {long int i,n; n=0; for(i=0;s[i]!='\0';i++) n=n*8+s[i]-'0'; return(n); } long int Bintodec(char s[]) {long int i,n; n=0; for(i=0;s[i]!='\0';i++) n=n*2+s[i]-'0'; return(n); }
|