我无法按照给定的输入获得预期的输出。帮助我解释这段代码的逻辑部分。我需要加上所有价格和每个账单金额,需要打折和打印结果账单
输入:
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 :(得分: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
时进行减法。结果是您显示了折扣支付的总额,以及要支付的总额的折扣。