| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 499 人关注过本帖
标题:去掉printf函数,程序运行出问题。
只看楼主 加入收藏
水淡淡
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2014-12-13
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:9 
去掉printf函数,程序运行出问题。
/*啤酒每罐2.3元,饮料每罐1.9元。买了若干啤酒和饮料,一共花了92.4元。
    买的啤酒比饮料的数量少,请计算买了几罐啤酒。注意:答案是一个整数。*/

根据上面要求写了个程序,平台CODE:BLOCKS

# include <stdio.h>
# include <conio.h>
# include <stdlib.h>

int main()
{
    float pj=2.3;
    float yl=1.9;
    float fy=92.4;
    float total=0;
    int i=0,j=0;

    for(i=50; i>=1; i--)
    {
        for(j=50; j>=1; j--)
        {
            if(i<j)
            {
                total=i*pj+j*yl;
                printf(" ");    /*去掉这个printf,程序运行就有问题。非要输出点东西*/
                if(total==fy)
                {
                    printf("啤酒数量:%d\n",i);
                    printf("饮料数量:%d\n",j);
                    printf("合计费用:%0.2f\n",total);
                    return 0;
                }
            }
        }
    }
    getchar();
    return 0;
}

救教:为什么把第一个printf去掉了,程序就不行了,非要在那加个printf输出点东西,这是什么原理.
搜索更多相关主题的帖子: include 啤酒 饮料 
2014-12-15 10:57
我只是个学生
Rank: 3Rank: 3
来 自:中石大
等 级:论坛游侠
威 望:1
帖 子:57
专家分:190
注 册:2014-12-14
收藏
得分:5 
图片附件: 游客没有浏览图片的权限,请 登录注册

我可以正常运行呀!

我们的善良将助长一个孩子不劳而获的懒惰心理
2014-12-15 11:03
水淡淡
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2014-12-13
收藏
得分:0 
谢谢,我测试过,在debug下,不管有没有那个printf,程序运行没有问题.但是在release下,不加上printf输出点东西,程序运行就有问题,是我的编译设置问题还是什么,搞不懂。
2014-12-15 13:28
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:5 
这是蓝桥杯上的题吧

一片落叶掉进了回忆的流年。
2014-12-15 13:41
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:0 
程序代码:
#include<stdio.h>
int main()
{
    int x,y;
    for(x=0;x<=82.3/2.3;x++)
    {
        for(y=0;y<=82.3/1.9;y++)
            if((2.3*x+1.9*y)==82.3&&(x<y))
                printf("%d,%d",x,y);
    }
    return 0;
}

一片落叶掉进了回忆的流年。
2014-12-15 13:45
水淡淡
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2014-12-13
收藏
得分:0 
蓝桥不清楚,看到网上有这样一个题,就写一下,debug下没有什么问题,但在release下,如果不加上那个printf输出点东西就运行不出来。
2014-12-15 13:47
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:5 
if(total==fy)  这里用==来判断浮点数的相等 是错误的

DO IT YOURSELF !
2014-12-15 13:52
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:5 
程序代码:
# include <stdio.h>

int main() {
    int maxyl, maxpj, i = 0, j = 0, pj = 23, yl = 19, fy = 924, total = 0;
    maxyl = (fy - pj) / yl;
    maxpj = (fy - yl) / pj;

    for(i = maxpj; i >= 1; i--) {
        for(j = maxyl; j >= 1; j--) {
            total = i * pj + j * yl;

            if(total == fy && i < j) {
                printf("啤酒数量: %d\n", i);
                printf("饮料数量: %d\n", j);
                printf("合计费用: %0.2f\n", total / 10.0);
            }
        }
    }

    return 0;
}

Only the Code Tells the Truth             K.I.S.S
2014-12-15 14:39
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9008
专家分:53957
注 册:2011-1-18
收藏
得分:0 
路过,因为数据小,所以用8楼的暴力遍历法是最佳选择。
但假如数据量大,有另一种非暴力的方法,代码就不贴出了,我手工演示一下

23a + 19b = 924
4a + 19(a+b) = 924
4[a+4(a+b)] + 3(a+b) = 924
3[a+4(a+b)+(a+b)] + 1[a+4(a+b)] = 924
以上步骤很熟悉吧,类似于辗转相除法求最大公约数。事实上,1[a+4(a+b)]前的系数1就是23和19的最大公约数

令 [a+4(a+b)]=0,则 [a+4(a+b)+(a+b)]=924/3
即求方程组
5a + 4b = 0
6a + 5b = 308
解得 a=-1232
即 a = -1232 + 19i
亦即 a = 3 + 19i
2014-12-15 15:29
zhaoxu1990
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2014-7-9
收藏
得分:0 
你那个是IF 的逻辑不对  我用你的方法就运行出来了  不过得把第一个if 那个{ }去掉  你试试
2014-12-16 18:02
快速回复:去掉printf函数,程序运行出问题。
数据加载中...
 
   



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

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