2013-05-05 134 views
-1

该程序计算折扣。如果我将变量priceperitem更改为int并对代码(格式说明符等)进行必要的更改,则计算折扣的语句会完全给出不同的答案。任何人都可以解释此背后的逻辑。我努力尝试但不能明白什么是错误的? ..它可以与运营商的关联性有关吗?还是仅仅是分裂的事情......?计算混乱

#include<stdio.h> 

main() 
{ 
    int quantity; 
    float priceperitem,expense,discount; 

    printf("Price Per Item ="); 
    scanf("%f",&priceperitem); 

    printf("How much quantity do you want ="); 
    scanf("%d",&quantity); 

    if(quantity>1000) 
    { 
     discount=quantity*priceperitem*10/100; 
     printf("The discount is %f\n",discount); 
     expense=quantity*priceperitem - discount; 
     printf("The discounted price is %f",expense); 
    } 

} 
+1

你有一个给定输入的例子,它输出什么? – j883376 2013-05-05 15:49:16

+2

您正在看[整数除法](http://en.wikipedia.org/wiki/Division_%28mathematics%29#Of_integers) – Shahbaz 2013-05-05 15:51:15

+0

'10/100'评估为'0' – typ1232 2013-05-05 15:51:59

回答

2

改变priceperitemint会给由于整数除法不同的结果。

变化discount=quantity*priceperitem*10/100;

discount=quantity*priceperitem*10/100f;

+0

或者只是改变'10/100'到'0.1'。 – Kninnug 2013-05-05 15:52:16

+0

好吧,如果我将0.1换成10/100并将priceperitem更改为int,该怎么办? ...它仍然显示我错误的答案......在概念上,在表达式评估中,如果存在实际值,那么所有整数值必须更改为实数... – Scorpio 2013-05-05 16:50:40

0

如果它的变化和int的浮动也不会考虑到小数位,这或许是由于整数除法改变你的回答变化

+0

好的,如果我将取代10/100乘以0.1,并将priceperitem更改为int ??? ...它仍然显示我错误的答案......在概念上,在表达式评估中,如果存在实际值,则所有整数值必须更改为实数... – Scorpio 2013-05-05 16:51:33