标题:c语言编程问题,大家好,新手上路,还请多多指教
只看楼主
a18170710423
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2018-8-29
 问题点数:0 回复次数:7 
c语言编程问题,大家好,新手上路,还请多多指教
输入一个不多于8位的二进制数,判断是否输入有误,错误提示重新输入,若正确输出十进制,十六进制,八进制。    麻烦提供一下思路,有代码最好,谢谢

这是我写的转化十进制的一部分,有错
#include<stdio.h>
#include <string.h>
int main()
{
    int i,chan=0,n,s,k;
    char c[100],x;
    printf("请输入一个不超过8位数的二进制:\n");
    n=strlen(c);
    gets(c);
    for(i=0;x=c[i]!='\0';i++)
    {
        if(n>8||x!='0'||x!='1')
        {
            printf("二进制不符合要求,请重新输入:\n");
        }
        else
        {
            k=x*2^(n-i);   
            s=s+k;            //字符转换成十进制数
        }   
    }
    printf("十进制为:%d\n",s);
    return 0;
}


输出如下
请输入一个不超过8位数的二进制:
11111
二进制不符合要求,请重新输入:
二进制不符合要求,请重新输入:
二进制不符合要求,请重新输入:
二进制不符合要求,请重新输入:
二进制不符合要求,请重新输入:
十进制为:-858993460
Press any key to continue

[此贴子已经被作者于2018-8-29 23:02编辑过]

搜索更多相关主题的帖子: 输入 二进制 重新 十进制 要求 
2018-08-29 22:28
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
//n=strlen(c);
//gets(c);
gets(c);
n=strlen(c);
2018-08-30 07:41
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
#include<stdio.h>
#include <string.h>
int main()
{
    int i,chan=0,n,s,k;
    char c[100],x;
    printf("请输入一个不超过8位数的二进制:\n");
    gets(c);
    n=strlen(c);
    if(n>8)
    {
        printf("二进制不符合要求,请重新输入:\n");
        return -1;
    }
    for(i=0; i<n; i++)
    {
        if(c[i]!='0'&&c[i]!='1')
        {
            printf("二进制不符合要求,请重新输入:\n");
            return -1;
        }
    }
    s = 0;
    for(i=0; i<n; i++)
    {
        if(c[i]=='1')
        {
            s=s+(1<<(n-i-1));            //字符转换成十进制数
        }
    }
    printf("十进制为:%d\n",s);
    return 0;
}
2018-08-30 07:57
a18170710423
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2018-8-29
得分:0 
回复 3楼 吹水佬
大哥,你这个输入错误后不能够重新输入呢
2018-08-30 08:33
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用a18170710423在2018-8-30 08:33:46的发言:

大哥,你这个输入错误后不能够重新输入呢

异常处理不是重点,我就不多说了。
要相信自己。
2018-08-30 09:45
a18170710423
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2018-8-29
得分:0 
回复 5楼 吹水佬
嗯嗯,好的,谢谢大哥了,但是那个二进制转换成十进制的那里我看不懂,可以解释一下么
2018-08-30 11:38
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用a18170710423在2018-8-30 11:38:45的发言:

嗯嗯,好的,谢谢大哥了,但是那个二进制转换成十进制的那里我看不懂,可以解释一下么

如:(二进制)10101 => (二进制)10000+100+1 => (1<<4)+(1<<2)+(1<<0)
2018-08-30 14:17
a18170710423
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2018-8-29
得分:0 
回复 7楼 吹水佬
好的,谢谢了,大哥,再帮忙看一题呗谢谢了
题目:
用调用自己编写的函数实现小球自由落体的路程和时间计算,假设小球落地后反弹的高度为下落高度的一半,,调用float zylt(float h)函数,(参数 h为下落高度,return 下落的时间 t),计算小球从高度H 到反弹高度小于1厘米(cm)时,所经过得位移和时间
 功能:输入初始下落高度H ,单位为厘米(cm);
输出小球的路程x,单位厘米(cm);经过的时间t,单位毫秒(ms)。      感觉好难,希望可以帮忙解决这个问题,O(∩_∩)O谢谢!!

结果是这样:
 后面做了一下,我把路程算出来,时间一直输出是0.00,调试那些都没有错,不知道哪里有问题了

 结果输出:
 请输入初始高度H,以回车结束(单位:cm ):
 5213
经过的时间t为: 0.00 毫秒
 路程共经过: 15628.82 厘米
Press any key to continue

程序:
 #include<stdio.h>
 #include<math.h>
 int main()
 {     
     float zylt(float h);
     float H=0.0,s=0.0;
     float h,l,x,c,b;   
     printf("请输入初始高度H,以回车结束(单位:cm ):\n");
     scanf("%f",&H);
     b=H/100;
     s=b;
     while(b>0.1)
     {
         b/=2.0;
         s+=b*2;
     }
     c= zylt (h);
     l=c*1000;
     x=s*100;
     printf("经过的时间t为: %.2f 毫秒\n",l);
     printf("路程共经过: %.2f 厘米\n",x);
     return 0;  
 }

 float zylt(float h)
 {
     float t=0.0,g=10,H=0.0,m,n,j,v;
         h=H/100;
     m=2*h/g;
     n=sqrt(m);
     t=n;
     while(h>0.1)
     {
         h/=2.0;
         j=2*h/g;
         v=sqrt(j);
         t+=2*v;
     }
     return (t);   
 }



2018-08-30 16:40



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-489512-1-1.html




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

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