Kegongteng 信息技术札记

C语言-二次函数一般式转顶点式

2024-02-11 · 5 min read
C语言

一.基本:二次函数一般式转顶点式

1.1理解二次函数一般式与顶点式

首先,我们要清楚二次函数的一般式是 y = ax^2 + bx + c,其中 a, b, c 是常数,并且 a ≠ 0,而顶点式是 y = a(x - h)^2 + k

1.2转化步骤

  1. 找出a, b, c的值
    从给定的二次函数一般式中,我们可以直接读出 a, b, c 的值。
  2. 公式法求h的值
    顶点横坐标 x 的值可以通过公式 h = -b / (2a) 计算得出。这个公式是二次函数对称轴的公式,也是顶点横坐标的公式。
  3. 公式法求k的值
    通过公式 k=(4ac-b^2) / (4a) 计算得出。这个公式是顶点纵坐标的公式。
  4. 写出顶点式
    使用求得的 hk 值,以及原一般式中的 a 值,写出二次函数的顶点式 y = a(x - h)^2 + k

1.3注意事项

  • 在计算过程中,注意确保分母 2a 不为零,即 a ≠ 0
  • b^2 - 4ac 小于零时,二次函数没有实数根,但它仍然有一个顶点。
  • 在代入和计算时,注意保持数学表达式的准确性,避免计算错误。

1.4在C语言中进行计算

#include <stdio.h>

int main() {
	double a, b, c, h, k;

	// 输入二次函数的一般式系数
	printf("请输入二次函数的一般式系数 a, b, c: ");
	scanf("%lf %lf %lf", &a, &b, &c);

	// 计算顶点的 h 和 k
	h = -b / (2 * a);
	k = (4.0 * a * c - b * b) / (4.0 * a);;

	// 输出顶点式与顶点
	printf("二次函数的顶点式为:\n");
	printf("y = %.2lf * (x - %.2lf)^2 + %.2lf\n", a, h, k);
	return 0;
}

二.完善:反馈二次函数的顶点

2.1理解二次函数的顶点

在顶点式中, y = a(x - h)^2 + k其中 (h, k) 是二次函数的顶点坐标,也就是[-b/2a,(4ac-b^2)/(4a)]

2.2反馈方法

printf("顶点坐标为:(%.2lf, %.2lf)\n", h, k);
//这个是由于我们在上一步早已经计算好了h,k的值

2.3最终代码

#include <stdio.h>

int main() {
	double a, b, c, h, k;

	// 输入二次函数的一般式系数
	printf("请输入二次函数的一般式系数 a, b, c: ");
	scanf("%lf %lf %lf", &a, &b, &c);

	// 计算顶点的 h 和 k
	h = -b / (2 * a);
	k = (4.0 * a * c - b * b) / (4.0 * a);

	// 输出顶点式与顶点
	printf("二次函数的顶点式为:\n");
	printf("y = %.2lf * (x - %.2lf)^2 + %.2lf\n", a, h, k);
	printf("顶点坐标为:(%.2lf, %.2lf)\n", h, k);
	return 0;
}

三.进阶:检测a是否为0,并报错

3.1理解二次函数的a不可以为0

如果a为0,则函数中二次项无意义,这不是一个有效的二次函数,无法计算k值。

3.2判定方法

使用if语句,如果a等于零,则报错,否则就正常运算。

	if (a == 0){
		printf("错误:a不可以等于0\n");
		return 1;
		// 返回非零值表示程序异常终止
	} 
	else {
		// 计算顶点的 h 和 k
		h = -b / (2 * a);
		k = (4.0 * a * c - b * b) / (4.0 * a);
    }

四.结束:完整代码与测试

#include <stdio.h>

int main() {
	double a, b, c, h, k;
	// 输入二次函数的一般式系数
	printf("请输入二次函数的一般式系数 a, b, c: ");
	scanf("%lf %lf %lf", &a, &b, &c);
	// 检查 a 是否为零
	if (a == 0) {
		printf("错误:a不可以等于0\n");
		return 1;
		// 返回非零值表示程序异常终止
	} 
    else {
		// 计算顶点的 h 和 k
		h = -b / (2 * a);
		k = (4.0 * a * c - b * b) / (4.0 * a);

		// 输出顶点式与顶点
		printf("二次函数的顶点式为:\n");
		printf("y = %.2lf * (x - %.2lf)^2 + %.2lf\n", a, h, k);
		printf("顶点坐标为:(%.2lf, %.2lf)\n", h, k);
		return 0;
	}
}
测试图片
测试图片-2

四.附录:变量说明

  1. a:一般式 y = ax^2 + bx + c 中二次项系数
  2. b:一般式 y = ax^2 + bx + c 中一次项系数
  3. c:一般式 y = ax^2 + bx + c 中常数项
  4. h: y = a(x - h)^2 + k中的h,顶点坐标点一部分(具体计算过程见【1.2 转化步骤】)
  5. k:y = a(x - h)^2 + k中的k,顶点坐标点一部分(具体计算过程见【1.2 转化步骤】)