本文已参与「新人创作礼」活动,一起开启掘金创作之路。
6.2
- 先读取一元二次方程一般式的三个系数
- 计算出根的判别式 delta
- 根据 delta 的三种情况进行计算
- 由于浮点数在计算机的存储方式的原因,判断一个浮点数是否等于0,只能去判断他的绝对值是否是小于一个很小的数,不能直接使用 == 符号判断,这个仅做了解即可
- 当 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 和本身,不能被其他数整除的数
- 偶数一定会有 2 作为质因子,所以不需要判断偶数是否是质数,但 2 是质数,因为质因子只有本身和 1
- 判断方法:从 2 这个最小的质数开始,循环到开平方得到的结果,若都没有因子,即可认为是质数,数学证明可不做了解,仅需知道这个方法即可
- 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! 这道题
普通迭代法:
- 计算的值涉及到小数,float 和 double 都可以,double 的精度更高我就用了double
- long long 属于 C99标准,是目前最长的整数类型
- 两层循环,内层用于计算 n!,外层控制 1 到 n
- %.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 / n! 的结果
- long long 作为函数返回值类型用于计算阶乘的结果,阶乘的结果会越来越大,所以应当使用范围更大的数据类型
- 理解不了递归就算了吧,现在的程序(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;
}