利用PHP编程,编三年级暑假数学计算题
【作者:一粟】
题
设计每天6种题型各2道题,共59天。
1.三位数除以一位数,两位数乘两位数或三位数乘一位数,这2种题型,复习三年级学的竖式计算。
2.三位数(或一位小数、两位小数)连加/连减(其中两个数可以凑整),两位数乘一位数再乘一位数,两位数乘两位数加上两位数乘两位数,这4种题型渗透运算率。
编程思考
这道题,要先设置好每种题型的题,每个数字的取值范围
代码
<?php
date_default_timezone_set('Etc/GMT-8');//设置时区
$r1=mktime(0,0,0,7,2,2023);//第1次日期,时间戳,2023年7月2日
for($k=0;$k<59;$k++){//59天
//6种类型的运算,生成12道题 开始
$ss = array();//算式数组
$s1 = rand(1,9)*100;
$s2 = rand(10,$s1);
$sa = array($s2,rand(50,999),$s1-$s2);
$xz = pow(10,rand(0,-2));
$ss[] = $sa[0]*$xz."+".$sa[1]*$xz."+".$sa[2]*$xz;
$ss[] = $sa[0]*$xz."+".$sa[2]*$xz."+".$sa[1]*$xz;
$s1 = rand(49,99)*10;
$s2 = rand(20,$s1/10)*10;
$s4 = rand(20,$s2);
$sa = array(rand($s1,999),$s4,$s2-$s4);
$xz = pow(10,rand(0,-2));
$ss[] = $sa[0]*$xz."-".$sa[1]*$xz."-".$sa[2]*$xz;
$ss[] = $sa[0]*$xz."-(".$sa[1]*$xz."+".$sa[2]*$xz.")";
$s2 = rand(2,9);
if($s2>8) $s1 = rand(49,101)*$s2;
else if($s2>5) $s1 = rand(49,141)*$s2;
else $s1 = rand(101,199)*$s2;
$ss[] = $s1."÷".$s2."=";
$s2 = rand(2,9);
if($s2>8) $s1 = rand(49*$s2,999);
else if($s2>5) $s1 = rand(101*$s2,141);
else $s1 = rand(101*$s2,199);
$ss[] = $s1."÷".$s2."=";
$sa = array(rand(11,99),rand(2,9),rand(2,9));
$ss[] = $sa[0]."×".$sa[1]."×".$sa[2];
sort($sa);
$ss[] = $sa[0]."×".$sa[1]."×".$sa[2];
$s1 = rand(11,99);
$s2 = rand(2,9)*10;
$s3 = rand(10,$s2-10);
$xz = rand(1,2);//选择
if($xz == 1) $ss[] = $s1."×".$s3."+".$s1."×".($s2-$s3);
else $ss[] = $s3."×".$s1."+".($s2-$s3)."×".$s1;
if($xz == 1) $ss[] = $s1."×(".$s3."+".($s2-$s3).")";
else $ss[] = "(".$s3."+".($s2-$s3).")×".$s1;
$sa = array(rand(11,99),rand(101,999),rand(2,9),rand(10,99));
$xz = rand(1,2);//选择
if($xz == 1) $ss[] = $sa[0]."×".$sa[3];else $ss[] = $sa[1]."×".$sa[2];
$sa = array(rand(11,99),rand(101,999),rand(2,9),rand(10,99));
$xz = rand(1,2);//选择
if($xz == 1) $ss[] = $sa[0]."×".$sa[3];else $ss[] = $sa[1]."×".$sa[2];
//6种类型的运算,生成12道题 结束
echo "<table><tr><td colspan='4'>";
echo '计算天天练';
echo ' ';
echo date("n月j日",strtotime($k.'day',$r1));
echo ' ';
echo '姓名:';
echo '____________';
echo ' ';
echo '得分:';
echo '____________';
echo "</td></tr><tr><td>";
for($i=0;$i<12;$i++){//每天12题
echo "(".($i+1).") ".$ss[$i];
if((($i+1) % 4) == 0) echo "</td></tr><tr><td>";else echo "</td><td>";
}
echo "</td></tr></table>";
}
?>
代码优化设想
以上代码,对每天12道题出现的顺序没有进行处理。可以让每天12道题以随机的顺序出现(有需要对比的题,要连续出现)。
设计初衷
本来的设想是每次呈现1天的题,作为一个在线网页,发布到个人网站,供学生每天在线答题、实时判分。去年也试着买了一年的域名,做了二年级暑假计算题,给本班学生使用了。但后来对备案要求严格了,个人网站需要备案,加上对域名、主机等管理不熟悉,只好搁浅。
现实做法
使用这个程序,一次生成59天的练习,复制到excel表格中,发给家长,让学生抄写或打印下来,在纸上进行练习。