我是C语言编程的初学者。需要帮助

时间:2016-10-19 21:46:26

标签: c

我被要求编写一个C程序,用户必须输入一个4位二进制数(int)。 我们必须显示用户输入的二进制数的十进制等值。  而且我们必须在没有循环或任何其他的情况下执行此操作。 我写了代码,但它不起作用。请检查并运行以下代码并指导我。非常感谢帮助。

#include<stdio.h>
#include<math.h>
    void main()

    #include<stdio.h>
    void main()
    {
        int a=0,b=0,c=0,d=0,e=0,ans=0,num1=0,num2=0,num3=0;
        printf("enter a 4 digit binary number:\n\n\t");
        scanf_s("%d%",a);
        b=(a%10)*1;
        num1=a/10;
        c=(num1%10)*2;
        num2=num1/10;
        d=(num2%10)*8;
        num3=num2/10;
        e=num3/10;
        ans=b+c+d+e;
        printf("Decimal value is : %d",ans);

    }

2 个答案:

答案 0 :(得分:1)

嗨,欢迎来到StackOverflow。

由于您是初学者,并且因为这很可能是一项功课,所以我会尽力帮助您了解代码中的问题,而无需为您提供可以复制和粘贴的完整工作代码。

以下是代码的副本,包含行号。

1    #include<stdio.h>
2    #include<math.h>
3    void main()
4
5    #include<stdio.h>
6    void main()
7    {
8        int a=0,b=0,c=0,d=0,e=0,ans=0,num1=0,num2=0,num3=0;
9        printf("enter a 4 digit binary number:\n\n\t");
10       scanf_s("%d%",a);
11       b=(a%10)*1;
12       num1=a/10;
13       c=(num1%10)*2;
14       num2=num1/10;
15       d=(num2%10)*8;
16       num3=num2/10;
17       e=num3/10;
18       ans=b+c+d+e;
19       printf("Decimal value is : %d",ans);
20
21   }

让我们一个一个地看问题。

3    void main()

这显然是重复的。删除此行。

6    void main()

在C中,它是在main函数()而不是void上返回int的标准。将main()函数的返回类型从void更改为int

10   scanf_s("%d%",a);

这里有两个问题。一,你正在使用scanf_sscanf更可靠,因为它是在C99标准中定义的。二,不必传递变量a,你必须将引用传递给变量a(使用&),这样C编译器就可以安全地放入输入到变量a的值。将这两者结合在一起,我们得到:

10   scanf("%d%", &a);
15   d=(num2%10)*8;

你跳过4.这应该是右边的第三个二进制数字,所以你应该将它乘以4而不是8。

16   num3=num2/10;

最后,这应该是二进制序列的最左边的数字,所以你应该将它乘以8.此外,你需要将这个操作改为模数而不是像第11,13和15行那样的除法。

修复所有这些问题后,你应该有一个二进制到小数计算器。

答案 1 :(得分:-1)

这是我的代码:

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int main(){
int a[4],dec;
printf("first digit\t: ");scanf("%d",&a[0]);
printf("second digit\t: ");scanf("%d",&a[1]);
printf("third digit\t: ");scanf("%d",&a[2]);
printf("last digit\t: ");scanf("%d",&a[3]);
dec=(a[0]*pow(2,3))+(a[1]*pow(2,2))+(a[2]*pow(2,1))+(a[3]*pow(2,0));
printf("%d",dec);
return 0;
}