一个解一元二次方程的练习,用于中学生练习十字相乘法,因为中学生可能没有电脑,所以用html编写,在手机上也可以用。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>十字相乘练习</title>
</head>
<body>
<script>
var ans = ""
function gcd3(a,b,c){
var result = 1;
for(var i = 1; i <= Math.abs(a) && i <= Math.abs(b) && i <= Math.abs(c); i++ ){
// console.log(i,a%i,b%i,c%i)
if(a%i == 0 && b%i == 0 && c%i == 0){
result = i;
}
}
return result;
}
function gcd2(a,b){
var result = 1;
for(var i = 1; i <= Math.abs(a) && i <= Math.abs(b); i++ ){
// console.log(i,a%i,b%i)
if(a%i == 0 && b%i == 0){
result = i;
}
}
return result;
}
function genEquation(){
ques_num = document.getElementById("ques_num").value;
equation = ""
ans = ""
for (var i = ques_num - 1; i >= 0; i--) {
var m=0,n=0,l=0,k=0;
while(m==0||n==0||l==0||k==0){
m = parseInt(Math.random()*(10-(-10)+1)-10);
n = parseInt(Math.random()*(10-(-10)+1)-10);
l = parseInt(Math.random()*(50-(-50)+1)-10);
k = parseInt(Math.random()*(10-(-10)+1)-10);
}
var a = m*n;
var b = (m*l+n*k);
var c = l*k;
//console.log(a,b,c)
var abc = gcd3(a,b,c);
a /= abc
b /= abc
c /= abc
var mk = gcd2(m,k);
var nl = gcd2(n,l);
m /= mk
k /= mk
n /= nl
l /= nl
// console.log(a,b,c);
// console.log(gcd3(a,b,c));
console.log(m,k,n,l)
equation += "<p>"+a+"x²+"+b+"x+"+c+"=0</p>"
ans += "<p>"+a+"x²+"+b+"x+"+c+"=0 --> "+"("+m+"x+"+k+")("+n+"x+"+l+")=0</p>"
equation = equation.replace(/\+\-/g,"-")
equation = equation.replace(/1x/g,"x")
equation = equation.replace(/\(\-([0-9]*?)x\-/g,"($1x+")
ans = ans.replace(/\+\-/g,"-")
ans = ans.replace(/1x/g,"x")
ans = ans.replace(/\(\-([0-9]*?)x\-/g,"($1x+")
}
document.getElementById("equation").innerHTML=equation;
}
function showAns(){
document.getElementById("equation").innerHTML=ans;
}
</script>
<noscript>抱歉,你的浏览器不支持 JavaScript!</noscript>
<h1>十字相乘练习</h1>
<form>
题目数量: <input type="text" id="ques_num">
<button type="button" onclick="genEquation()">生成方程</button>
<button type="button" onclick="showAns()">显示答案</button>
</form>
<div id="equation"></div>
</body>
</html>