我无法根据给定的输入获得预期的输出。请帮助我理解这段代码的逻辑部分。我需要把所有的价格和每张账单的金额加起来,不需要打折,打印出账单
输入:

3 2 150 3 65 1 1550.

预期产量:
Bill amount 2045, discount 102, result 1943

我的输出:
bill amount 10590, discount 9531, amount to be paid 0

代码:
#include<stdio.h>

int main()
{
  int n, a[10],i,j,b[10], r=0,p=0,q=0;
    printf("Enter the no of items\n");
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        {
            printf("Enter the no of units for item %d\n",i);
            scanf("%d",&a[i-1]);
            printf("Enter the price for item %d\n",i);
            scanf("%d",&b[i-1]);
        }
    for(i=1;i<=n;i++)
        {
            for(j=1;j<=n;j++)
                {
                    r+= (a[i-1]*(b[j-1]));
                }
        }
    if(r>5000)
        {
            p=(r-(0.1*r));
        }
    else if(r>2500 && r<5000)
        {
            p= (r-(0.08*r));
        }
    else if(r<2500)
        {
            p=r-(r*0.05);
        }
    printf("Bill Amount Rs.%d\nTotal Discount Amount Rs.%d\nTotal Amount to be \
    paid Rs.%d\n\nThank you for shopping with us.",r,p,q);
}

最佳答案

不需要嵌套循环。这两个数组并行工作,所以只有一个循环可以完成。你将数量乘以所有产品的价格,而不仅仅是对应于数量的产品。
如果您在0而不是1开始循环,那么您的代码将大大简化,因为数组索引就是从这里开始的。

for (i = 0; i < n; i++) {
    r += a[i] * b[i];
}

如果使用单个结构数组而不是多个数组,则会更加明显:
struct item {
    int quantity;
    int price;
} items[10];

很明显,你只需要一个循环:
for (i = 0; i < n; i++) {
    r += items[i].quantity * items[i].price;
}

另一个问题是,您将p设置为总金额减去折扣,而不是折扣。所以
p = r - (r * 0.05);

应该是:
p = r * 0.05;

稍后打印r - p时执行减法。这样做的结果是您显示了要为折扣支付的总金额,以及要为总金额支付的折扣。
DEMO

关于c - 一维数组乘法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44727615/

10-11 23:06
查看更多