A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马IT男 初级黑马   /  2014-3-24 20:13  /  1260 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黑马IT男 于 2014-3-26 13:25 编辑

要从键盘输入两个数,打印(printf)这两个数的和、差、积、商、以及余数。
我像这样写的
#include <stdio.h>
int main()
{
        printf("请输入两个数a和b:\n");
        
        double a,b;
        
        scanf("%lf %lf",&a,&b);
        
        printf("两个数的和是=%lf\n",a+b);
        printf("两个数的差是=%lf\n",a-b);
        printf("两个数的积是=%lf\n",a*b);
        printf("两个数的商是=%lf\n",a/b);
        printf("两个数的余数是=%d\n",(int)a%(int)b);
        
        return 0;
}
程序执行没有问题,但当我这样写的时候
#include <stdio.h>
int main()
{
        printf("请输入两个数a和b:\n");
        
        double a,b;
        
        scanf("%lf %lf",&a,&b);
        
   /**  printf("两个数的和是=%lf\n",a+b);
        printf("两个数的差是=%lf\n",a-b);
        printf("两个数的积是=%lf\n",a*b);
        printf("两个数的商是=%lf\n",a/b);
        printf("两个数的余数是=%d\n",(int)a%(int)b);
   */        
        printf("%lf + %lf的和是=%lf\n",a,b,a+b);        
        printf("%lf - %lf的差是=%lf\n",a,b,a-b);
        printf("%lf * %lf的积是=%lf\n",a,b,a*b);
        printf("%lf / %lf的商是=%lf\n",a,b,a/b);
        printf("%d % %d的余数是=%d\n",(int)a,(int)b,(int)a % (int)b);
               
        return 0;
}


执行的结果取余数并不是自己想要的,大神求解。比如我输入13,1结果显示是
请输入两个数a和b:
13 12
13.000000 + 12.000000的和是=25.000000
13.000000 - 12.000000的差是=1.000000
13.000000 * 12.000000的积是=156.000000
13.000000 / 12.000000的商是=1.083333
13 %d的余数是=12

6 个回复

倒序浏览
本帖最后由 luoyilan222 于 2014-3-24 21:01 编辑

printf("%d % %d的商是=%d\n",(int)a,(int)b,(int)a/b);   当 int/double  会进行自动转换 最后就会变成double/double  所以结果当然就不对呀,就如你没有转换一样  你可以这样测试下  printf("%d % %d的商是=%d\n",(int)a,(int)b,a/b);  你看结果是否和上面一样就知道咯

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
printf("%d % %d的商是=%d\n",(int)a,(int)b,(int)a/b);改成
printf("%d %% %d的商是=%d\n",(int)a,(int)b,(int)a/b);
回复 使用道具 举报
复制了你的代码初略检查了
错误全在这条代码
  1. printf("%d % %d的商是=%d\n",(int)a,(int)b,(int)a/b);
复制代码

第一个错误:不能单独输出 % ,在c语言中 % 号有特殊含义,这是检验函数
  1. #include <stdio.h>
  2. int main()
  3. {
  4.     printf("%");
  5.     return 0;
  6. }
复制代码


第二个错误:你这里要求的是余数,你的最后给出的代码是(int)a/b,这明显求的是商。
第三个错误:模运算符,也就是取余运算符只能运用在整数之间,你这里是在a 和 b的doulb类小数之间取余,明显错误,应该修改为(int)a%(int)b.

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
printf("%d % %d的商是=%d\n",(int)a,(int)b,(int)a/b);
,(int)a/b主要是这个,将a变成了整型,那么b呢?还是double型的,int与double相除会自动提升为double的,而要输出整型当然是不对的!可以这样试试,(int)a/(int)b.

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
luoyilan222 发表于 2014-3-24 20:59
printf("%d % %d的商是=%d\n",(int)a,(int)b,(int)a/b);   当 int/double  会进行自动转换 最后就会变成dou ...

谢谢,不过还是不行的
回复 使用道具 举报
FlyTrem 发表于 2014-3-24 21:14
printf("%d % %d的商是=%d\n",(int)a,(int)b,(int)a/b);
,(int)a/b主要是这个,将a变成了整型,那么b呢? ...

刚才传代码的时候弄错了,现在改过来了,还是不行
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马