前言
今天我们公司举行了一次 C 语言考试,发哥在我们内部群里公然对我发起挑战,结果,我被摩擦了,记录一下。
题目
题目描述
针对等额本金还款模式的客户,写一个程序按顺序输入贷款总额(单位为万元)、月利率、贷款总月数,输出第一个月客户还款金额(单位为元,取整数)。
等额本金计算公式如下:
每月还款金额 = (贷款本金 / 还款总月数) + (本金 - 已归还本金累计额) × 每月利率
输入
依次输入贷款总额(整数,单位:万元)、月利率(浮点数)、贷款总月数(整数)
输出
月还款金额(取整数,单位:元)
前面几个题目就不说了,实在太简单,这个题目也很简单,但是我被摩擦就是没有看好题目,我刚开始是拿笔在纸上这样写的。完全没注意题目 输出第一个月客户还款金额
而且,没写出来,最后上了个厕所后才写出来。
我刚开始的答案是
#include
int main ()
{
int a,b;
float i = ;
int s;
scanf( "%d %f %d" , & a, & i, & b);
printf( "%d\n" ,i * 10000 * a + a * 10000 / b);
return ;
}
结果输出
后面我改成(是对手交了答案从我旁边走过去,我上完厕所后才先起来改一下)
#include
int main ()
{
int a,b;
float i = ;
int s;
scanf( "%d %f %d" , & a, & i, & b);
s = i * 10000 * a + a * 10000 / b;
printf( "%d\n" ,s);
return ;
}
到这里,我就不明白了,为什么我一定要用一个变量接收数据才可以呢 ? 看着同事一个个交卷,自己被摩擦的感觉非常不好,那时候,唉,默默的去上个厕所,他们写完还在旁边讨论,我更加紧张了,这点点,那点点,时间就过去了。
后来结束后,我相信,这样也可以
#include
int main ()
{
int a,b;
float i = ;
int s;
scanf( "%d %f %d" , & a, & i, & b);
s = i * 10000 * a + a * 10000 / b;
printf( "%f\n" ,i * 10000 * a + a * 10000 / b);
return ;
}
但这样后面有很多小数点是不符合要求的,随便改成下面的
#include
int main ()
{
int a,b;
float i = ;
int s;
scanf( "%d %f %d" , & a, & i, & b);
s = i * 10000 * a + a * 10000 / b;
printf( "%3.2f\n" ,i * 10000 * a + a * 10000 / b);
return ;
}
再改一下
#include
int main ()
{
int a,b;
float i = ;
int s;
scanf( "%d %f %d" , & a, & i, & b);
printf( "%3.0f\n" ,i * 10000 * a + a * 10000 / b);
return ;
}
输出
这样就正确了,但是前面为什么这样呢?
看文章
嵌入式 Linux : C 语言 printf 详解
zhuanlan.zhihu.com
所以如果改成这样
#include
int main ()
{
int a,b;
float i = ;
int s;
scanf( "%d %f %d" , & a, & i, & b);
printf( "%7.0f\n" ,i * 10000 * a + a * 10000 / b);
return ;
}
输出
完
补充
我后面一直想不明白,为什么强制类型不生效,所以现在都睡不着,肯定是紧张哪里写错了,没有及时改正,我想了下,这样写也是可以的
#include
int main ()
{
int a,b;
float i = ;
int s;
scanf( "%d %f %d" , & a, & i, & b);
printf( "%d\n" ,( int )(i * 10000 * a + a * 10000 / b));
return ;
}
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31561984/viewspace-2221188/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/31561984/viewspace-2221188/