1 D阵列乘法

时间:2017-06-23 18:11:46

标签: c

我无法按照给定的输入获得预期的输出。帮助我解释这段代码的逻辑部分。我需要加上所有价格和每个账单金额,需要打折和打印结果账单

输入:

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);
}

1 个答案:

答案 0 :(得分:2)

您不需要嵌套循环。两个数组并行工作,因此只需一个循环即可。您将数量乘以所有产品的价格,而不仅仅是与该数量相对应的产品。

如果您在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