1. 注意表达式中整数与整数除法,可能需要添加小数点。
eg: 一个物体从100米的高空自由落下。编写程序,求它在前3秒内下落的垂直距离。设重力加速度为10米/秒2。
//错误代码:
#include
int main()
{
printf("height = %.2f", 1/2*10*3*3 );
return 0;
}
//由于1/2的结果是0,所以这道题目的答案总是0。即使前面使用了%.2f这样的控制输出浮点数的操作,然而根据从左向右的计算顺序,答案变成了0。
//正确代码:
#include
int main()
{
printf("height = %.2f", 1/2.0*10*3*3 );
return 0;
}
//同类题型:1/i其中i是整型,要强制类型转换
#include
int main(){
int N,i=1;
double sum=0;
scanf("%d", &N);
while(i<=N){
sum+=(double)1/ i;
i+=1;
}
printf("sum = %.6f", sum);
return 0;
}
2.忽视\n的使用,输出格式是重要依据。
本题要求编写程序,计算2个正整数的和、差、积、商并输出。题目保证输入和输出全部在整型范围内。
3 + 2 = 5
3 - 2 = 1
3 * 2 = 6
3 / 2 = 1
//正确代码
#include
int main()
{
int A,B;
scanf("%d %d", &A, &B);
printf("%d + %d = %d\n", A, B, A + B );
printf("%d - %d = %d\n", A, B, A - B );
printf("%d * %d = %d\n", A, B, A * B );
printf("%d / %d = %d\n", A, B, A / B );
return 0;
}
3.sancf输入double是%lf,但是printf输出浮点数是%f或者%lf。
//正确代码
#include
int main()
{
double x;
scanf("%lf", &x);
if(x!=0)
printf("f(%.1f) = %.1f", x, 1/x);
else
printf("f(0.0) = 0.0");
return 0;
}
eg:示例:double x;scanf(“%f”,&x);输入“12.5”,输出x的值结果为0,没有接收输入的数据,再输入别的数据,结果都为0。
4.如果只是求几个固定值就可以自己设定一个阶乘函数。但是一旦涉及阶乘n!的前n项和,不要利用阶乘函数,会很耗时。
//求阶乘的前n项和。
eg:本题要求编写程序,计算序列 1!+2!+3!+⋯ 的前N项之和。
#include
int fact(int n);
int main(){
int i=1,N,sum=0,n;
scanf("%d", &N);
while(i<=N){
if (i==1){
n=1;
sum=1;
}
else
sum+=n;
i++;
n=n*i;
}
printf("%d", sum);
return 0;
}
5.如果有变量在除数的位置一定要注意是否可能为0。
#include
#include
int main(){
int n;
scanf("%d", &n);
if( n==0 ){
printf("sign(0) = 0");
}else
printf("sign(%d) = %d", n, n/abs(n));
return 0;
}
6.正确四舍五入的方法,当时题目要求是将最后得到的数四舍五入,笔者利用int直接截取了整数位,但是正确的方法应该是:%.0f。四舍五入的正确打开方式:%.nf,其中n是字面常量,功能是输到小数点后面的第n位,第n + 1位“四舍五入”,
本题要求根据某城市普通出租车收费标准编写程序进行车费计算。具体标准如下:
- 起步里程为3公里,起步费10元;
- 超起步里程后10公里内,每公里2元;
- 超过10公里以上的部分加收50%的回空补贴费,即每公里3元;
营运过程中,因路阻及乘客要求临时停车的,按每5分钟2元计收(不足5分钟则不收费)。
在一行中输出乘客应支付的车费(单位为元),结果四舍五入,保留到元。
//正确代码
#include
int main(){
//计入已知时间和路程
int t;
float l;
scanf("%f %d", &l, &t);
//计算第一部分费用
double cost1;
if( l<= 3)
cost1=10.0;
else if( l <= 10)
cost1=4+l*2;
else
cost1=l*3-6;
//计算第二部分费用
int cost2;
t/=5;
cost2=t*2;
double tc= cost1+cost2;
printf("%.0f", tc);
return 0;
}
7.变量的范围如果越来越大的话,记得定义成double型!
自然常数 e 可以用级数 1+1/1!+1/2!+⋯+1/n!+⋯ 来近似计算。本题要求对给定的非负整数 n,求该级数的前 n+1 项和。
#include
int main(){
int n;
scanf("%d", &n);
double sum=1.0;
double fact=1;
int i=1;
while( i<=n){
fact*=i;
sum+=(double)1.0/fact;
i++;
}
printf("%.8f", sum);
return 0;
}