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