小编将会使用C语言编写
背景
编写一个帮助小学生练习数学的程序,帮助小学生练习 100 以内的四种数学运算:加、减、乘、除。
问题分析
a) 程序应先询问用户的 ID 号(ID 号包括两个大写字母和 4 位数字),例如:
请输入用户 ID 号 :AB1234
程序应对输入的 ID 号验证,符合 ID 号要求的格式,然后程序提示三种选择:
(1)开始测试
(2)检查分数
(3)退出
b) 测试:该程序将给出 10 道数学题,例如:
12 * 3 =36
48 + 32 =80
56 / 28 =2
功能实现
i) 学生将依次回答每一个问题(在等于号后面给出答案),然后给出下一道题。
ii) 试题应包含四种数学运算:加、减、乘、除,它们是随机产生的。相邻的问题应该是不同的操作,每个操作必须至少出现一次。
iii) 为每道题随机生成数字,但必须确保参与运算的数字和结果都小于 100 且大于零的整数。
iv) 十道题做完后,记录学生完成这十道题所用的时间。
v) 给每个学生一个分数。将该学生的 ID、成绩和使用时间保存到一个名为 record.txt 的文件中。
vi) 在屏幕上输出以下信息:
问题 | 正确答案 | 你的答案
c) 成绩检查:从文件“record.txt”中列出该学生的所有历史成绩。例如:
你以前的记录是 :
AB1234 80 150 秒
AB1234 50 182 秒
AB1234 90 98 秒
结果实现呈现
代码实现
去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片
.
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
//1.测试功能的实现
int test(){
int x=0;
int begin, end;
begin = time(NULL);
for(int i=1;i<=10;i++){
srand((int)time(0));
int one=rand()%11;
int two=rand()%11;
int sign=rand()%3;
int three;
int num;
printf("第%d道题:",i);
switch(sign){
//加法
case 0:
while(floor((one+two) + 0.5) != (one+two))
{
two=rand()%11;
one=rand()%11;
}
three=one+two;
printf("%d + %d =",one,two);
scanf("%d",&num);
if(three==num){
x=x+1;
printf("\t\t答对了!!!\n");
}
else{
printf("\t\t!!请认真对考试!!\n");
}
break;
//-减法
case 1:
while(floor((one-two) + 0.5) != (one-two))
{
two=rand()%11;
one=rand()%11;
}
three=one-two;
printf("%d - %d =",one,two);
scanf("%d",&num);
if(three==num){
x=x+1;
printf("\t\t答对了!!!\n");
}
else{
printf("\t\t!!请认真对考试!!\n");
}
break;
//*乘法
case 2:
while(floor((one*two) + 0.5) != (one*two))
{
two=rand()%11;
one=rand()%11;
}
three=one*two;
printf("%d * %d =",one,two);
scanf("%d",&num);
if(three==num){
x=x+1;
printf("\t\t答对了!!!\n");
}
else{
printf("\t\t!!请认真对考试!!\n");
}
break;
//除法
case 3:
while(floor((one/two) + 0.5) != (one/two))
{
two=rand()%11;
one=rand()%11;
}
three=one/two;
printf("%d / %d =",one,two);
scanf("%d",&num);
if(three==num){
x=x+1;
printf("\t\t答对了!!!\n");
}
else{
printf("\t\t!!请认真对考试!!\n");
}
break;
}
}
end = time(NULL);
int out= end - begin;
printf("*****————*******\n");
printf("用时为:%d秒\n",out);
printf("成绩为:%d分\n",x);
printf("*****————*******\n");
FILE *fp;//文件指针
int i, d;
/*文件的打开*/
fp=fopen("record.txt","a+");//fopen打开文件,这个文件可以是当前不存在的。“w”以写入的形式打开,“r”以读的形式打开
if(fp==NULL) //判断如果文件指针为空
{
printf("File cannot open! " );
exit(0);//在以0的形式退出,必须在文件开头有#include <stdlib.h>,stdlib 头文件即standard library标准库头文件
}
//写入东西
fprintf(fp,"\t用时:%d秒\t得分:%d分\n",out,x);//写入指针fp,写入的东西就是刚才的用户输入的d,注意这里的fp和d没有引号
//关闭文件
fclose(fp);
return 0;
}
//2.检查功能的实现
int check(){
char c;
int p;
FILE*fp=NULL;//需要注意
fp=fopen("record.txt","r");
if(NULL==fp) return -1;//要返回错误代码
while(fscanf(fp,"%c",&c)!=EOF) printf("%c",c); //从文本中读入并在控制台打印出来
fclose(fp);
fp=NULL;//需要指向空,否则会指向原打开文件地址
printf("——检查完毕——\n");
printf("*****————*******\n");
return 0;
}
//功能的分类
int function(int p){
switch(p){
case(1):
test();
break;
case(2):
check();
break;
case(3):
printf("Thank you very much!!!!\n*****————*****");
exit(0);
}
}
int main()
{
char a,b;
int c,p;
//输入ID
int loop;
loop:printf("请输入ID(2个大写字母和4个数字):\n");
scanf("%c%c%d",&a,&b,&c);
getchar();
if(a<='Z'&&a>='A'&&b<='Z'&&b>='A'&&c>=0&&c<=9999)
{
FILE *fp;//文件指针
int i, d;
/*文件的打开*/
fp=fopen("record.txt","a+");//fopen打开文件,这个文件可以是当前不存在的。“w”以写入的形式打开,“r”以读的形式打开
if(fp==NULL) //判断如果文件指针为空
{
printf("File cannot open! " );
exit(0);//在以0的形式退出,必须在文件开头有#include <stdlib.h>,stdlib 头文件即standard library标准库头文件
}
//写入东西
fprintf(fp,"姓名:%c%c%d\t",a,b,c);//写入指针fp,写入的东西就是刚才的用户输入的d,注意这里的fp和d没有引号
//关闭文件
fclose(fp);
while(1)
{
int p;
printf("****——主界面——****\n菜单:\n->1.开始测试\n->2.检查分数\n->3.退出\n请输入你的选择:**");
scanf("%d",&p);
getchar();
printf("****——————******\n");
function(p);
getchar();
}
}
else{
printf("输入错误!\n");
goto loop;
}
return 0;
}
总结
以上,是小编的第一次的自主编写,若是有不足的地方,欢迎提问小编。