| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 410 人关注过本帖
标题:关于程序调试的问题!!初学者希望大家指点一下!!!
只看楼主 加入收藏
nicezhangfan
Rank: 2
等 级:论坛游民
帖 子:23
专家分:10
注 册:2012-9-27
结帖率:40%
收藏
 问题点数:0 回复次数:3 
关于程序调试的问题!!初学者希望大家指点一下!!!
编写了一个根据利润求解奖金的函数!!在做测试的时候出现问题!输入100等大于零的数字的时候可以得到正确结果!但是当输入的数字小于0的时候结果不正确!调试的时候第一次输入负数的时候profit变量的值正确,但是第二次输入负数的时候变量profit的值为-NaN(0x.....)这点我就不懂了!!为什么呢??求大家帮忙看看!!
程序代码:
/*
  程:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高
        于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提
        成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于
        40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于
        100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?
1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型 
*/

#include <stdio.h>
void main()
{
    float profit=0.0,bonus=0.0;//定义变量利润和奖金方便使用
    
    printf("请输入您在这一年里面为企业赚的的利润,以万为单位\n");
    scanf("%f",&profit);//得到我们的利润
    
    while(profit<=0.0)
    {
     printf("你输入了一个小于零的数字,请你从新输入\n");
     scanf("%d",&profit);
    }
    /*判断用户输入的合法性*/
    
    int level=0;//定义我们的利润段变量 
    
    if(profit<=10)      {level=1;}
    else if(profit<=20) {level=2;}
    else if(profit<=40) {level=3;}
    else if(profit<=60) {level=4;}
    else if(profit<=100){level=5;}
    else                {level=6;}
    
    /*定义我们的区间段*/
    
    switch(level)
    {
        case 1:
              bonus=profit*0.1;
        break;
        
        case 2:
              bonus=1+(profit-10)*0.075;
        break;
        
        case 3:
             bonus=1+0.75+(profit-20)*0.05;
        break;
        
        case 4:
             bonus=1+0.75+1+(profit-40)*0.03;
        break;
        
        case 5:
             bonus=1+0.75+1+0.6+(profit-60)*0.015;
        break;
        
        case 6:
             bonus=1+0.75+1+0.6+0.6+(profit-100)*0.01;
        break;
        
    }  
       /*根据不同的利润计算我们的奖金数额*/
       
       printf("您可以获得的奖金为:%f万\n",bonus); 
    
    
}

 
搜索更多相关主题的帖子: 利润高 profit 
2012-10-19 16:39
浅唱我的Time
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:98
专家分:562
注 册:2012-9-24
收藏
得分:0 
{
     printf("你输入了一个小于零的数字,请你从新输入\n");
     scanf("%d",&profit);
    }

把scanf("%d",&profit);  改成scanf("%f",&profit);  就可以了
2012-10-19 17:31
nicezhangfan
Rank: 2
等 级:论坛游民
帖 子:23
专家分:10
注 册:2012-9-27
收藏
得分:0 
回复 2楼 浅唱我的Time
谢谢啊!问题解决了,但是出现这个问题的原因是什么呢??为啥会这样呢!!
2012-10-19 19:27
天剑山
Rank: 4
等 级:业余侠客
威 望:3
帖 子:119
专家分:266
注 册:2012-8-3
收藏
得分:0 
把scanf("%d",&profit);  改成scanf("%f",&profit);  
scanf中里面的"f"并非没有意义,f代表单精度的浮点数,d表示整数,如果你用scanf("%d",&dd);的话,你一旦输入小数就会照成数据被截取成整数,照成数据被改了,也就不会得到正确答案
2012-10-20 14:43
快速回复:关于程序调试的问题!!初学者希望大家指点一下!!!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015925 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved