| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1197 人关注过本帖, 1 人收藏
标题:任意转进制的程序(现在没goto)评价评价
只看楼主 加入收藏
rexzheng
Rank: 2
等 级:论坛游民
帖 子:32
专家分:13
注 册:2009-10-26
结帖率:25%
收藏(1)
已结贴  问题点数:20 回复次数:9 
任意转进制的程序(现在没goto)评价评价
#include<stdio.h>
main()
{
    int a,b,x,c[50];
    char y;
   
    do{
        printf("要有几进制转换成几进制?用空格隔开,如10 2\n");
        scanf("%d\040%d%c",&a,&b,&y);
        do{
            printf("\n输入需要转换的整数");
             x=0;
             y=0;
            do{
                scanf("%c",&y);
                if(y>='0'&&y<='9') x=(y-'0')+x*a;
                else if(y>='A'&&y<='z') x=(y-'0'-7)+x*a;
            }while(y!=10);//转成10进制
            a=-1;
            do{
                c[++a]=x%b;
                x=x/b;
            }while(x!=0);
            for(;a>=0;a--)
            {
                printf("%c",c[a]<10?c[a]+'0':c[a]+'0'+7);
            }
      
            printf("\n输入新的数按y,重头开始按a,退出按任意键\n");
            y= getch();
        }while(y=='y');
        
    }while(y=='a');

}
现在没有用goto了。。。原来那个在https://bbs.bccn.net/viewthread.php?tid=291008&page=1#pid1696269
不用goto真的看上去结构很多。。
大家评价评价。。。
搜索更多相关主题的帖子: 评价 进制 goto 
2009-11-25 13:05
rexzheng
Rank: 2
等 级:论坛游民
帖 子:32
专家分:13
注 册:2009-10-26
收藏
得分:0 
这个可以输入 16 10(16进制转成10进制)
输入1ABC
然后程序输出"6844"
2009-11-25 13:15
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:10 
#include <stdlib.h>

char a[100];

char * convert(int n, int base)
{
   
    int i, flag;
   
    i = 99;
    a[i--] = '\0';
    if (n < 0)
    {
        flag = 1;
        n = -n;
    }
    else
        flag = 0;

    if (n == 0)
        a[i--] = '0';

    for (; n; n = n/base)
        a[i--] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n % base];

    if (flag)
        a[i--] = '-';

    return &a[i+1];
}


int main(void)
{
    int a = 8;

    puts (convert(a,2));
    puts (convert(a,8));
    puts (convert(a,10));
    puts (convert(a,16));

    return 0;
}


我就是真命天子,顺我者生,逆我者死!
2009-11-25 13:36
hnliji1107
Rank: 4
等 级:业余侠客
帖 子:53
专家分:216
注 册:2009-10-23
收藏
得分:0 
这个程序警惕了我,常用do...while();
2009-11-25 13:39
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
收藏
得分:10 
首先还是没有考虑到负数···
然后输入的时候混入其它字符没有影响··如1!1@1...
多次的时候 ····
2009-11-25 14:07
rexzheng
Rank: 2
等 级:论坛游民
帖 子:32
专家分:13
注 册:2009-10-26
收藏
得分:0 
回复 5楼 lijm1989
关于第一个问题,其实很复杂,不能以为将负数的符号加在数字钱就可以了,其实是不对的,
例如:10进制的-1,转成8进制不是-1,而是1777777777777777777777;(用计算器算的)
关于第二个问题:其实这个想到了,但是我只想到用goto来解决,没有想到别的语句来解决,尝试用过break,但是导致程序混乱了;如果您有什么好的解决方法指导一下

[ 本帖最后由 rexzheng 于 2009-11-25 16:37 编辑 ]
2009-11-25 16:02
rexzheng
Rank: 2
等 级:论坛游民
帖 子:32
专家分:13
注 册:2009-10-26
收藏
得分:0 
回复 5楼 lijm1989
关于第3个问题  的确是我错了。。我居然用a来当循环变量。。。当时肯定是晕了。。哈哈 谢谢指导。。。我刚学C没多久。。一共加起来就十几个小时吧。。。

[ 本帖最后由 rexzheng 于 2009-11-25 16:37 编辑 ]
2009-11-25 16:09
jig
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
帖 子:530
专家分:242
注 册:2005-12-27
收藏
得分:0 
其实用goto也无所谓的,只要能写出高质量的代码。

其实很多高手,精通到一定程度, goto用的是出神入化的

个人网站 -  http://.h001.
2009-11-25 18:30
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
收藏
得分:0 
汗~~~学了十几个小时··我没话说了···
负数的确很麻烦··要回到二进制··又涉及到反码、补码。。。你只学了十几个小时就能这样··估计这些你也知道··不过也不会太麻烦。。再学十几个小时试试··。。

读需要转换的数的时候为什么不读字符串呢??  
2009-11-25 18:35
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
以下是引用BlueGuy在2009-11-25 13:36:10的发言:

for (; n; n = n/base)
        a[i--] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n % base];
这句真不错,值得学一下~
2009-11-25 18:38
快速回复:任意转进制的程序(现在没goto)评价评价
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021478 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved