小学生计算机辅助教学系统--练习加,减,乘,除法

一.前言

最近几天,老师布置一个小学生计算机辅助教学系统–练习加,减,乘,除法的作业要我们实现,我花费了几个小时把它干完了,本想拿这个小项目练练手,因为要考研了,复习复习C语言。没有想到这个项目涉及到的C语言知识不深,只涉及到了循环结构,函数,指针只有一个函数指针知识点。指针部分没有深挖。行了,行了,废话不多说,我直接上内容。

二.项目要求(需求分析)

项目是编写一个程序来帮助小学生练习加、减、乘、除四则运算。功能要求如下:
(1)编写一个菜单,显示本系统供选择的基本功能:加、减、乘、除四则运算,退出,并提示用户输入选项,然后根据用户的选项进行不同的练习。
(2)进入每一个功能时,程序首先随机产生两个1-100之间的正整数,在屏幕上打印出问题。例如:“16+9=?”,然后让学生输入答案。程序检查学生输入的答案是否正确。若正确,则打印出“Right!”,否则“Wrong!Please try again”并提示学生重做,直到答案正确为止。然后继续下一个问题;
(3)在任务2的基础上,当学生回答错误时,最多给三次做的机会,三次仍未做好,则显示“Wrong! You have tried three times! Test Over!”程序结束。
(4)在任务2的基础上,连续做10道题,不给机会重做,若学生回答正确,则显示“Right!”,否则显示“Wrong!”。10道题全部做完后,按每题10分统计并输出总分,同时为了记录学生能力提高的过程,再输出学生的总分和回答正确率。
(5)在任务4的基础上,为使学生通过反复练习掌握所学的内容,在学生完成10道运算题后,若回答正确率低于75%,则重做10道题,直到回答正确率高于75%时才退出程序。
(6)在任务5的基础上,使用随机函数产生一个1-4之间的随机数,配合使用选择语句,来为学生输入的每个正确或错误的答案输出不同的评价。
对于正确答案,可在以下4中提示信息中选择一个进行显示:
Verygood!
Excellent!
Nicework!
Keepup the good work!
对于错误答案,可在以下4中提示信息中选择一个进行显示:
No.Please try again!
Wrong. Try once more.
Don’t Give up
Notcorrect.Keep Tring.

三.代码实现(上述功能本代码已经全部实现)

#include<stdio.h>
#include<stdlib.h>
#include <time.h>
int main(){
	int menu();
	//************************************
//	void exit();
	int submenu();
	void test(int (*p)(int,int),char ch);
	void practice(int (*p)(int,int),char ch);
	int add(int a,int b);
	int sub(int a,int b);
	int mul(int a,int b);
	int division(int a,int b);
	char ch;//运算符号 
	int opt;//选项
	int (*p)(int,int);//函数指针,根据用户所选项调用函数 
	opt=menu();
	
	switch(opt){
		case 1:	p=add;
				ch='+';
		   		break;
	 	case 2:	p=sub;
	 			ch='-';
		   		break;
		case 3:	p=mul;
				ch='x';
		   		break;
		case 4:	p=division;
				ch='/';
		   		break;
		case 5:	exit(0);
				break; 
	}
	system("pause"); 
	system("cls");
	opt=submenu();//子菜单 
	if(opt==1){
		printf("******************练习模式***********************\n");
		practice(p,ch);//进入练习模式 
	}
	else{
		printf("******************测试模式***********************\n");
		system("pause"); 
		test(p,ch);//进入测试模式 
	 } 
	return 0;
} 

int menu(){//显示菜单,带回用户所选择的选项 
	int opt;//选择项 
	printf("***********************************************\n");
	printf("本系统供选择的基本功能有加、减、乘、除\n");
	printf("***********************************************\n");
	printf("有如下选项供选择:\n");
	printf("1.练习加法\n");	 
	printf("2.练习减法\n");
	printf("3.练习乘法\n");
	printf("4.练习除法\n");
	printf("5.退出\n");
	printf("***********************************************\n");
	printf("请输入你的选项:\n");
	scanf("%d",&opt);
	while(opt!=1&&opt!=2&&opt!=3&&opt!=4&&opt!=5){//防止小学生瞎输入 
		printf("输入的选项错误,请重新输入!!\n");
		printf("请输入你的选项:\n");
		scanf("%d",&opt);
	}
	return opt; 
}

int add(int a,int b){//加法 
	return a+b;
}

int sub(int a,int b){//减法 
	return a-b;
}

int mul(int a,int b){//乘法 
	return a*b;
}

int division(int a,int b){//除法 (本系统开发的是面向小学生,应该没有学习小数,所以不考虑小数情况) 
	return a/b;
}
int submenu(){//选择练习模式或者测试模式 
	int op;//选择的模式 
	printf("******************模式选择*****************\n");
	printf("1.练习模式\n"); 
	printf("2.测试模式\n");
	printf("请输入你要选择的模式:\n");
	scanf("%d",&op);
	return op;
}

void practice(int (*p)(int,int),char ch){//练习模式 
	void wrong_evaluate();//学生做错题目时,出现的评语
	void right_evaluate();//学生做对题目时,出现的评语	
	int a,b;//两个1-100之间的正整数
	int answer;//正确答案 
	int stu_answer;//学生的答案 
	int flag;//标志位,正确为1 
	int count=0;//统计一题中做错数 
	srand((unsigned)time(NULL)+1);//播种,产生真随机数 
	//随机产生两个1-100之间的正整数 
	a= rand()%100 + 1; 
	srand((unsigned)time(NULL));//播种,产生真随机数 
	b=rand()%100 + 1;
	
	answer=(*p)(a,b);
	//在屏幕上打印出问题 
	printf("%d%c%d=?\n",a,ch,b);
	printf("请输入你的答案:\n");
	scanf("%d",&stu_answer);
	if(stu_answer==answer){
		right_evaluate();//学生做对题目时,出现的评语	
		flag=1;
	} 
	else{
		wrong_evaluate();//学生做错题目时,出现的评语
		count++; 
		flag=0;
	}
	//学生重做,直到答案正确为止
	while(!flag){
		printf("***********************************************\n");
		printf("请输入你的答案:\n");
		scanf("%d",&stu_answer);
		if(stu_answer==answer){
			printf("Right!\n");
			flag=1;
		} 
		else{
			printf("Wrong!Please try again!\n");
			count++;
			flag=0;
		}
		if(count>=3){//给三次做的机会,还没有做对题目,就结束程序 
			printf("wrong!You have tried three times.Test over!");
			system("pause"); 
			exit(0);//程序正常退出 
		}
	}
} 
void test(int (*p)(int,int),char ch){//测试模式 
	void wrong_evaluate();//学生做错题目时,出现的评语
	void right_evaluate();//学生做对题目时,出现的评语
	int i;//循环变量
	int score;//总分
	int right_num=0;//答对题目数
	int a,b;//两个1-100之间的正整数
	int answer;//正确答案 
	int stu_answer;//学生的答案  
	float right_rate=0;//学生做10题的正确率 
	while(right_rate<0.75){
			system("cls"); 
			right_num=0;
			right_rate=0;
			for(i=0;i<10;i++){
				srand((unsigned)time(NULL)%100+1+i+(unsigned)time(NULL)%100);//播种,产生真随机数 
				//随机产生两个1-100之间的正整数 
				a= rand()%100 + 1; 
				srand((unsigned)time(NULL)%100+i);//播种,产生真随机数 
				b=rand()%100 + 1;
				
				answer=(*p)(a,b);
				//在屏幕上打印出问题 
				printf("***********************************************\n");
				printf("%d%c%d=?\n",a,ch,b);
				printf("请输入你的答案:\n");
				scanf("%d",&stu_answer);
				if(stu_answer==answer){
					right_evaluate();//学生做错题目时,出现的评语
					right_num++;
				} 
				else{
					wrong_evaluate();//学生做对题目时,出现的评语
				}
			}
			score=right_num*10;
			right_rate=right_num/10.0;
			system("pause");
			system("cls");
			printf("本次测试\n学生的总分:%d分\n回答正确率:%.2f\n",score,right_rate);
			system("pause");
			fflush(stdin);//清除标准输入输出缓存区中的内容 
	}
	
}

void wrong_evaluate(){//学生做错题目时,出现的评语 
	int choice;//选项
	srand((unsigned)time(NULL));//播种,产生真随机数 
	//随机产生一个1-4之间的正整数 
	choice= rand()%4 + 1;
	switch(choice){
		case 1:
			printf("No.Please try again!\n");
			break;
		case 2:
			printf("Wrong. Try once more.\n");
			break;
		case 3:
			printf("Don’t Give up!!!\n");
			break;
		case 4:
			printf("Not correct.Keep Tring.\n");
			break;
		default:
			printf("error!");
	} 
}

void right_evaluate(){//学生做对题目时,出现的评语
	int choice;//选项
	srand((unsigned)time(NULL));//播种,产生真随机数 
	//随机产生一个1-4之间的正整数 
	choice= rand()%4 + 1;
	switch(choice){
		case 1:
			printf("Very good!\n");
			break;
		case 2:
			printf("Excellent!\n");
			break;
		case 3:
			printf("Nice work!\n");
			break;
		case 4:
			printf("Keep up the good work!\n");
			break;
		default:
			printf("error!");
	} 
}
//void exit(){//退出 
//	exit(0);//正常退出 
//}

四.功能效果图

主菜单选项:选择要练习的类别(测试加法):
在这里插入图片描述
模式菜单:选择要练习的模式(进入练习模式):
在这里插入图片描述
测试减法:

进入测试模式:
在这里插入图片描述
在这里插入图片描述
显示第一次测试模式学习情况:得分率低于0.75,进入下一轮测试模式:
在这里插入图片描述
第二次测试模式:
在这里插入图片描述
回答正确率高于0.75结束程序:
在这里插入图片描述

五.函数模块图

函数模块图

六.功能流程图

功能流程图

  • 15
    点赞
  • 90
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无言月梧桐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值