C语言编程练习题库

1. 题目:写一个程序,判断两个浮点数是否足够精确。

/*  File name:ApproximatelyEqual
	Function: ensure the accurcy of two numbers.|x-y|/min(|x|,|y|)
#include 
double Minfabsnum(double x,double y);	//Calculate the min of fabs(x),fabs(y)
void GiveInstruction(void);	//Give instruction and reference to users
#define e 0.0001	//The accurcy 

double main()
{
	 double x,y,c;
	 GiveInstruction();
	 printf("Please input 2 numers:");
	 scanf("%lf,%lf",&x,&y);
	 c=Minfabsnum(x,y);
	 if(fabs(x-y)/c

C语言编程练习题库_第1张图片

2. 题目:打印杨辉三角前八行

/*  File name:Pascal triangle or YangHui triangle
	Founction: display the 8 raws of YangHui triangle
	Time:2018.04.07
	edited by qjx
*/

#include 
#define N 8
int Factorial(int n);
int Combinations(int n,int k);
void GiveInstruction(void);

main()
{
	int raw,i,j,k;
	GiveInstruction();
	printf("Please input the raws of YangHui triangle:");
	scanf("%d",&raw);
	for(i=1;i<=raw;i++)
	{
		for(j=0;j

C语言编程练习题库_第2张图片

当用更大的数据去测试时,发现最多只能到13,到需要输出14行杨辉三角时就会出现错误。

C语言编程练习题库_第3张图片

本来以为是超出了int型的范围,但是手动计算之后并没有超出啊,而且如果超出的话,在计算12!时,就已经超出范围了。不解!

解决:还是int范围的问题

#include  
#include 
#define N 13
int Factorial(int n);

main()
{
	int a;
	a=Factorial(N);
	printf("%d",a);
	printf("The value of INT_MAX is %i\n", INT_MAX);	
	printf("The value of INT_MIN is %i\n", INT_MIN);	
	printf("An int takes %d bytes\n", sizeof(int));

}

int Factorial(int n)   //calculate n!  
{  
    int i,product=1;  
    for(i=1;i<=n;i++)  
    {  
        product*=i;  
    }  
    return product;   
}  

采用如上代码,改变N的值,可以清楚地看到溢出的时刻。

 

N N!
10 3628800
12 479001600
13 1932053504
int -2147483647~2147483647

显然,N!在12的时候还是对的,13的时候显然就不对了,从个位数字就可以看出来。所以上面杨辉三角出现的现象就能解释了。

 

你可能感兴趣的:(【C语言小项目练习集】,【C/C++】)