四则运算作业

代码思路:
写一个能自动生成小学四则运算题目的程序,然后在此基础上扩展:
1)除了整数以外,还要支持真分数的四则运算,例如:1/6+1/8=7/24
2)程序要求能处理用户的输入,判断对错,累积分数
3)程序支持可以由用户自行选择加、减、乘、除运算
4)使用-n参数控制生成题目的个数,例如Myapp.exe -n 10,将生成10个题目
代码:
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <math.h> int s;//答对的题目数量 float score;//得分(百分制) //判断答案是否正确 void judge0(float a,float ta) //专为除法提供判断函数 { float error=a-ta;//计算结果与真正答案的误差小于一定值 if((error<=0.005)&&(error>=-0.004)) {printf("回答正确!\n");s++;} else printf("回答错误,正确答案是 %.2f\n",ta); } void judge(int a,int ta) //加法减法,乘法的判断函数 { if(a==ta) {printf("回答正确!\n");s++;} else printf("回答错误,正确答案是 %d\n",ta); } void judge1(int a1,int a2,float ta) //真分数运算的判断函数 { float a=(float)a1/(float)a2; if(a==ta) {printf("回答正确!\n");s++;} else printf("回答错误,正确答案是 %.2f\n",ta); } //真分数的随机运算 int random0() { int num,i=0; printf("请输入题目数量\n"); scanf("%d",&num); srand(unsigned(time(NULL))); while(i<num) { int type;//运算类型,加减乘除 int left1,left2,right1,right2; int answer1,answer2; float trueanswer; left1= rand() % 100; left2= rand() % 100; type = rand() % 4; if(left1>left2) //转化为真分数 { int t; t=left1; left2=left1; left1=t; } right1 = rand() % 100; right2 = rand() % 100; if(right1>right2)//转化为真分数 { int t; t=right1; right2=right1; right1=t; } switch(type) { case 0: trueanswer=((float)left1/(float)left2)+((float)right1/(float)right2); printf("%d/%d + %d/%d = ", left1, left2,right1,right2); scanf("%d/%d",&answer1,&answer2); judge1(answer1,answer2,trueanswer); break; case 1: trueanswer=((float)left1/(float)left2)-((float)right1/(float)right2); printf("%d/%d - %d/%d = ", left1, left2,right1,right2); scanf("%d/%d",&answer1,&answer2); judge1(answer1,answer2,trueanswer); break; case 2: trueanswer=((float)left1/(float)left2)*((float)right1/(float)right2); printf("%d/%d * %d/%d = ", left1, left2,right1,right2); scanf("%d/%d",&answer1,&answer2); judge1(answer1,answer2,trueanswer); break; case 3: trueanswer=((float)left1/(float)left2)/((float)right1/(float)right2); printf("%d/%d / %d/%d = ", left1, left2,right1,right2); scanf("%d/%d",&answer1,&answer2); judge1(answer1,answer2,trueanswer); break; } i++; } return num; } // 整数的随机运算 int random() { int num,i=0; printf("请输入题目数量\n"); scanf("%d",&num); srand(unsigned(time(NULL))); while(i<num) { int type;//运算类型 int left, right; int answer,trueanswer; left = rand() % 100; type = rand() % 4; right = rand() % 100; switch(type) { case 0: trueanswer=left+right; printf("%d + %d = ", left, right); scanf("%d",&answer); judge(answer,trueanswer); break; case 1: trueanswer=left-right; printf("%d - %d = ", left, right); scanf("%d",&answer); judge(answer,trueanswer); break; case 2: trueanswer=left*right; printf("%d * %d = ", left, right); scanf("%d",&answer); judge(answer,trueanswer); break; case 3: float answer0,trueanswer0; trueanswer0=((float)left)/((float)right); printf("%d /%d = ", left, right); scanf("%f",&answer0); judge0(answer0,trueanswer0); break; } i++; } return num; } //加法 int add() { int num,i=0; printf("请输入题目数量\n"); scanf("%d",&num); srand(unsigned(time(NULL))); while(i<num) { int left, right,answer,trueanswer; left = rand() % 100; right = rand() % 100; trueanswer=left+right; printf("%d +%d = ", left, right); scanf("%d",&answer); judge(answer,trueanswer); i++; } return num; } //减法 int subtract() { int num,i=0; printf("请输入题目数量\n"); scanf("%d",&num); srand(unsigned(time(NULL))); while(i<num) { int left, right,answer,trueanswer; left = rand() % 100; right = rand() % 100; trueanswer=left-right; printf("%d -%d = ", left, right); scanf("%d",&answer); judge(answer,trueanswer); i++; } return num; } //乘法 int multiply() { int num,i=0; printf("请输入题目数量\n"); scanf("%d",&num); srand(unsigned(time(NULL))); while(i<num) { int left, right,answer,trueanswer; left = rand() % 100; right = rand() % 100; trueanswer=left*right; printf("%d *%d = ", left, right); scanf("%d",&answer); judge(answer,trueanswer); i++; } return num; } //除法 int divide() { int num,i=0; printf("请输入题目数量\n"); scanf("%d",&num); srand(unsigned(time(NULL))); while(i<num) { int left, right; float answer,trueanswer; left = rand() % 100; right = rand() % 100; trueanswer=((float)left)/((float)right); printf("%d /%d = ", left, right); scanf("%f",&answer); judge0(answer,trueanswer); i++; } return num; } //打印界面提示信息 void main() { printf("welcome!\n"); printf("\n"); int choose,t; do { s=0; score=0; int n; printf("********************四则运算********************\n"); printf("\n"); printf(" 1.随即题目\n"); printf(" 2.加法题目\n"); printf(" 3.减法题目\n"); printf(" 4.乘法题目\n"); printf(" 5.除法题目\n"); printf(" 6.分数运算\n"); printf(" 7.退出\n"); printf("\n"); printf("******************Designed by 吴山茶******************\n"); printf("\n"); printf("请选择计算类型:"); scanf("%d",&t); choose=t; printf("%d",choose); printf("\n"); system("cls"); switch(choose) { case 1:n=random();printf("\n");break; case 2:n=add();printf("\n");break; case 3:n=subtract();printf("\n");break; case 4:n=multiply();printf("\n");break; case 5:n=divide();printf("\n");break; case 6:n=random0();printf("\n");break; default:break; } score=(float)s/(float)n; printf("得分:%.2f\n",score); }while(choose!=7); exit(0); }
结果:


浙公网安备 33010602011771号