2021-11-17 C语言课后作业

243 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

6.2

  1. 先读取一元二次方程一般式的三个系数
  2. 计算出根的判别式 delta
  3. 根据 delta 的三种情况进行计算
  4. 由于浮点数在计算机的存储方式的原因,判断一个浮点数是否等于0,只能去判断他的绝对值是否是小于一个很小的数,不能直接使用 == 符号判断,这个仅做了解即可
  5. 当 delta 小于0的时候,一元二次方程式是有复数解的,只是在实数范围内无解,数学知识不足仅做了解即可
#include <stdio.h>
#include <math.h>

void big(float a,float b,float c,float delta);
void equal(float a,float b,float c,float delta);
void small();

int main()
{
	float a = 0,b = 0,c = 0;
	float delta = 0;
	printf("Please input 3 coefficient of the equation ");
	scanf("%f %f %f",&a,&b,&c);
	delta = pow(b,2) - 4 * a * c;
	if (delta > 0)
	{
		big(a,b,c,delta);
	}
	else if (fabs(delta) < 1e-6)
	{
		equal(a,b,c,delta);
	}
	else
	{
		small();
	}
	return 0;
}

void big(float a,float b,float c,float delta)
{
	printf("x1 = %f  x2 = %f",(-b + sqrt(delta)) / 2 * a , (-b - sqrt(delta)) / 2 * a);
}
void equal(float a,float b,float c,float delta)
{
	printf("x1 = x2 = %f",(-b + sqrt(delta)) / 2 * a);
}
void small()
{
	printf("This equation didn't have realnumber solution\n");
}

6.3

  1. 素数定义:除了 1 和本身,不能被其他数整除的数
  2. 偶数一定会有 2 作为质因子,所以不需要判断偶数是否是质数,但 2 是质数,因为质因子只有本身和 1
  3. 判断方法:从 2 这个最小的质数开始,循环到开平方得到的结果,若都没有因子,即可认为是质数,数学证明可不做了解,仅需知道这个方法即可
  4. bool 类型的数值,只要不是 0 都是真(true)
#include <stdio.h>
#include <math.h>

bool judge(int a)
{
	for (int i = 2;i <= sqrt(a); i = i + 2)
	{
		if (a % i == 0)
		{
			return false;
		}
	}
	return true;
}

int main()
{
	int a;
	printf("Please input a number: ");
	scanf("%d",&a);
	if (judge(a))
	{
		printf("Yes!\n");
	}
	else
	{
		printf("NO!\n");
	}
	return 0;
}

课件上的 1/1! + 1/2! +…… 1/n! 这道题

普通迭代法:

  1. 计算的值涉及到小数,float 和 double 都可以,double 的精度更高我就用了double
  2. long long 属于 C99标准,是目前最长的整数类型
  3. 两层循环,内层用于计算 n!,外层控制 1 到 n
  4. %.30lf 表示输出保留三十位小数 ,double 的 输出必须用 %lf ,同理 , long long 这种长整数类型,输出的时候必须用 %ld
#include <stdio.h>

double calculate(int n)
{
	double c = 0;
	long long b = 1;
	for (int i = 1; i <= n; ++i)
	{
		b = 1;
		for (int j = 1; j <= i; ++j)
		{
			b *= j;		
	    }
		c += 1.0 / b;  
	}
	return c;
}

int main()
{
	int n;
	scanf("%d",&n);
	printf("%.30lf",calculate(n));
	return 0;
}

递归法:

  1. 分成两个函数,一个用于计算阶乘,另一个用于计算 1 / n! 的结果
  2. long long 作为函数返回值类型用于计算阶乘的结果,阶乘的结果会越来越大,所以应当使用范围更大的数据类型
  3. 理解不了递归就算了吧,现在的程序(python),大部分情况下都有第三方库调用,不用自己写递归
#include <stdio.h>

long long factorial(int n)
{
	if (n == 0)
	{
		return 1;
	}
	else
	{
		return n * factorial(n - 1);
	}
}

double calculate(int n)
{
	double c = 0;
	for (int i = 1; i <= n; ++i)
	{
		c += 1.0 / double(factorial(i));
	}
	return c;
}

int main()
{
	int n;
	scanf("%d",&n);
	printf("%.30lf",calculate(n));
	return 0;
}