C语言错题本

你犯错了吗?–C语言篇

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。

本题目要求计算下列分段函数f(x)的值:
在这里插入图片描述

//正确代码

#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。

对于任一整数n,符号函数sign(n)的定义如下:
在这里插入图片描述
请编写程序计算该函数对任一输入整数的值。
//正确代码

#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;
}	

你可能感兴趣的:(错题本,c语言)