作业-四则运算
代码如下:
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/ahgc/AHPU-SE-19/ |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/ahgc/AHPU-SE-19/homework/11376 |
这个作业的目标 | 写一个能自动生成小学四则运算题目的程序 |
学号 | 3190704211 |
代码: |
include <stdio.h>
include <math.h>
include <stdlib.h>
include <time.h>
//IntegeAdd()为整数加法运算
void IntegeAdd(){
int i;
int n;//n为题目数量
int Addend1,Addend2;//Addend1为加数1,Addend2为加数2
int Answer;//Answer为学生回答
int CorrectAnswerNumber=0;//CorrectAnswerNumber为正确回答的个数
float Score;//Score为学生得分
printf("请输入题目数量(1-10):\n");
scanf("%d",&n);
if(n>10 ||n<0){
printf("输入n有误,需输入1-10以内的整数!\n请重新输入:\n");
scanf("%d",&n);
}//判断n是否为1-10内的整数
for(i=1;i<=n;i++){
srand(time(NULL));
Addend1=rand()%100;
Addend2=rand()%100;
printf("%d+%d=",Addend1,Addend2);
printf("你的答案:(保留整数)");
scanf("%d",&Answer);
if(Answer==Addend1+Addend2){
printf("回答正确!\n");
CorrectAnswerNumber++;
}
else{
printf("回答错误!\n");
}
}
Score=((float)CorrectAnswerNumber/n)*100;
printf("题目回答完毕,您的得分为%.1f\n\n",Score);
}
//IntegeSubtract()为整数减法运算
void IntegeSubtract(){
int i;
int n;//n为题目数量
int Meiosis1,Meiosis2;//Meiosis1为减数1,Meiosis2为减数2
int Answer;//Answer为学生回答
int CorrectAnswerNumber=0;//CorrectAnswerNumber为正确回答的个数
float Score;//Score为学生得分
printf("请输入题目数量(1-10):\n");
scanf("%d",&n);
if(n>10 ||n<0){
printf("输入n有误,需输入1-10以内的整数!\n请重新输入:\n");
scanf("%d",&n);
}//判断n是否为1-10内的整数
for(i=1;i<=n;i++){
srand(time(NULL));
Meiosis1=rand()%100;
Meiosis2=rand()%100;
printf("%d-%d=",Meiosis1,Meiosis2);
printf("你的答案:(保留整数)");
scanf("%d",&Answer);
if(Answer==Meiosis1-Meiosis2){
printf("回答正确!\n");
CorrectAnswerNumber++;
}
else{
printf("回答错误!\n");
}
}
Score=((float)CorrectAnswerNumber/n)*100;
printf("题目回答完毕,您的得分为%.1f\n\n",Score);
}
//IntegeMultiply()为整数乘法运算
void IntegeMultiply(){
int i;
int n;//n为题目数量
int Multiplier1,Multiplier2;//Multiplier1为乘数1,Multiplier2为乘数2
int Answer;//Answer为学生回答
int CorrectAnswerNumber=0;//CorrectAnswerNumber为正确回答的个数
float Score;//Score为学生得分
printf("请输入题目数量(1-10):\n");
scanf("%d",&n);
if(n>10 ||n<0){
printf("输入n有误,需输入1-10以内的整数!\n请重新输入:\n");
scanf("%d",&n);
}//判断n是否为1-10内的整数
for(i=1;i<=n;i++){
srand(time(NULL));
Multiplier1=rand()%100;
Multiplier2=rand()%100;
printf("%d×%d=",Multiplier1,Multiplier2);
printf("你的答案:(保留整数)");
scanf("%d",&Answer);
if(Answer==Multiplier1*Multiplier2){
printf("回答正确!\n");
CorrectAnswerNumber++;
}
else{
printf("回答错误!\n");
}
}
Score=((float)CorrectAnswerNumber/n)*100;
printf("题目回答完毕,您的得分为%.1f\n\n",Score);
}
//IntegeDivide()为整数除法运算
void IntegeDivide(){
int i;
int n;//n为题目数量
int Divisor,Dividend;//Divisor为除数,Dividend为被除数
int Answer;//Answer为学生回答
int CorrectAnswerNumber=0;//CorrectAnswerNumber为正确回答的个数
float Score;//Score为学生得分
printf("请输入题目数量(1-10):\n");
scanf("%d",&n);
if(n>10 ||n<0){
printf("输入n有误,需输入1-10以内的整数!\n请重新输入:\n");
scanf("%d",&n);
}//判断n是否为1-10内的整数
for(i=1;i<=n;i++){
srand(time(NULL));
Divisor=rand()%100;
Dividend=rand()%100;
printf("%d÷%d=",Divisor,Dividend);
printf("你的答案:(保留整数)");
scanf("%d",&Answer);
if(Answer==(int)(Divisor/Dividend)){
printf("回答正确!\n");
CorrectAnswerNumber++;
}
else{
printf("回答错误!\n");
}
}
Score=((float)CorrectAnswerNumber/n)*100;
printf("题目回答完毕,您的得分为%.1f\n\n",Score);
}
//IntegeOperation()为整数运算
void IntegeOperation(){
int choose2;
printf("下面为整数运算题目,请选择运算方式:\n");
printf("0.退出\n1.加\n2.减\n3.乘\n4.除\n");
scanf("%d",&choose2);
switch (choose2){
case 1:
IntegeAdd();
break;
case 2:
IntegeSubtract();
break;
case 3:
IntegeMultiply();
break;
case 4:
IntegeDivide();
break;
}
if (choose2==0){
printf("已退出程序,感谢使用!\n");
exit(0);
}
}
//FractionalAdd()为分数加法运算
void FractionalAdd(){
int i;
int a=1;
int b=1;
int n;//n为题目数量
int Molecules1,Denominator1;//Molecules1为分子1,Denominator1为分母1
int Molecules2,Denominator2;//Molecules2为分子2,Denominator2为分母2
int AnswerMolecules;//AnswerMolecules为学生回答的分子
int AnswerDenominator;//AnswerDenominator为学生回答的分母
int CorrectAnswerMolecules;//CorrectAnswerMolecules为正确答案的分子
int CorrectAnswerDenominator;//CorrectAnswerDenominator为正确答案的分母
int CorrectAnswerNumber=0;//CorrectAnswerNumber为正确回答的个数
float Score;//Score为学生得分
printf("请输入题目数量(1-10):\n");
scanf("%d",&n);
if(n>10 ||n<0){
printf("输入n有误,需输入1-10以内的整数!\n请重新输入:\n");
scanf("%d",&n);
}//判断n是否为1-10内的整数
for(i=1;i<=n;i++){
do{
srand(time(NULL));
Molecules1=rand()%100;
Molecules2=rand()%100;
Denominator1=rand()%100;
Denominator2=rand()%100;
}while((Molecules1>=Denominator1)||(Molecules2>=Denominator2));
printf("%d/%d+%d/%d=\n",Molecules1,Denominator1,Molecules2,Denominator2);
CorrectAnswerMolecules=Molecules1*Denominator2+Molecules2*Denominator1;
CorrectAnswerDenominator=Denominator1*Denominator2;
//下面求CorrectAnswerMolecules和CorrectAnswerDenominator的最大公因数b
if(CorrectAnswerMolecules>=CorrectAnswerDenominator){
while(a<=CorrectAnswerDenominator){
if((CorrectAnswerMolecules%a==0)&&(CorrectAnswerDenominator%a==0))b=a;
a++;
}
}
else{
while(a<=CorrectAnswerMolecules){
if((CorrectAnswerMolecules%a==0)&&(CorrectAnswerDenominator%a==0))b=a;
a++;
}
}
//下面计算约分后正确答案的分子分母
CorrectAnswerMolecules=CorrectAnswerMolecules/b;
CorrectAnswerDenominator=CorrectAnswerDenominator/b;
printf("你的答案:分子:\n");
scanf("%d",&AnswerMolecules);
printf("你的答案:分母:\n");
scanf("%d",&AnswerDenominator);
if((AnswerMolecules==CorrectAnswerMolecules)&&(AnswerDenominator==CorrectAnswerDenominator)){
printf("回答正确!\n");
CorrectAnswerNumber++;
}
else{
printf("回答错误!\n");
}
}
Score=((float)CorrectAnswerNumber/n)*100;
printf("题目回答完毕,您的得分为%.1f\n\n",Score);
}
//FractionalSubtract()为分数减法运算
void FractionalSubtract(){
int i;
int a=1;
int b=1;
int n;//n为题目数量
int Molecules1,Denominator1;//Molecules1为分子1,Denominator1为分母1
int Molecules2,Denominator2;//Molecules2为分子2,Denominator2为分母2
int AnswerMolecules;//AnswerMolecules为学生回答的分子
int AnswerDenominator;//AnswerDenominator为学生回答的分母
int CorrectAnswerMolecules;//CorrectAnswerMolecules为正确答案的分子
int CorrectAnswerDenominator;//CorrectAnswerDenominator为正确答案的分母
int CorrectAnswerNumber=0;//CorrectAnswerNumber为正确回答的个数
float Score;//Score为学生得分
printf("请输入题目数量(1-10):\n");
scanf("%d",&n);
if(n>10 ||n<0){
printf("输入n有误,需输入1-10以内的整数!\n请重新输入:\n");
scanf("%d",&n);
}//判断n是否为1-10内的整数
for(i=1;i<=n;i++){
do{
srand(time(NULL));
Molecules1=rand()%100;
Molecules2=rand()%100;
Denominator1=rand()%100;
Denominator2=rand()%100;
}while((Molecules1>=Denominator1)||(Molecules2>=Denominator2));
printf("%d/%d-%d/%d=\n",Molecules1,Denominator1,Molecules2,Denominator2);
CorrectAnswerMolecules=Molecules1*Denominator2-Molecules2*Denominator1;
CorrectAnswerDenominator=Denominator1*Denominator2;
//下面求CorrectAnswerMolecules和CorrectAnswerDenominator的最大公因数b
if(CorrectAnswerMolecules>=CorrectAnswerDenominator){
while(a<=CorrectAnswerDenominator){
if((CorrectAnswerMolecules%a==0)&&(CorrectAnswerDenominator%a==0))b=a;
a++;
}
}
else{
while(a<=CorrectAnswerMolecules){
if((CorrectAnswerMolecules%a==0)&&(CorrectAnswerDenominator%a==0))b=a;
a++;
}
}
//下面计算约分后正确答案的分子分母
CorrectAnswerMolecules=CorrectAnswerMolecules/b;
CorrectAnswerDenominator=CorrectAnswerDenominator/b;
printf("你的答案(负号写在分子里):分子:\n");
scanf("%d",&AnswerMolecules);
printf("你的答案:分母:\n");
scanf("%d",&AnswerDenominator);
if((AnswerMolecules==CorrectAnswerMolecules)&&(AnswerDenominator==CorrectAnswerDenominator)){
printf("回答正确!\n");
CorrectAnswerNumber++;
}
else{
printf("回答错误!\n");
}
}
Score=((float)CorrectAnswerNumber/n)*100;
printf("题目回答完毕,您的得分为%.1f\n\n",Score);
}
//FractionalMultiply()为分数乘法运算
void FractionalMultiply(){
int i;
int a=1;
int b=1;
int n;//n为题目数量
int Molecules1,Denominator1;//Molecules1为分子1,Denominator1为分母1
int Molecules2,Denominator2;//Molecules2为分子2,Denominator2为分母2
int AnswerMolecules;//AnswerMolecules为学生回答的分子
int AnswerDenominator;//AnswerDenominator为学生回答的分母
int CorrectAnswerMolecules;//CorrectAnswerMolecules为正确答案的分子
int CorrectAnswerDenominator;//CorrectAnswerDenominator为正确答案的分母
int CorrectAnswerNumber=0;//CorrectAnswerNumber为正确回答的个数
float Score;//Score为学生得分
printf("请输入题目数量(1-10):\n");
scanf("%d",&n);
if(n>10 ||n<0){
printf("输入n有误,需输入1-10以内的整数!\n请重新输入:\n");
scanf("%d",&n);
}//判断n是否为1-10内的整数
for(i=1;i<=n;i++){
do{
srand(time(NULL));
Molecules1=rand()%100;
Molecules2=rand()%100;
Denominator1=rand()%100;
Denominator2=rand()%100;
}while((Molecules1>=Denominator1)||(Molecules2>=Denominator2));
printf("(%d/%d)*(%d/%d)=\n",Molecules1,Denominator1,Molecules2,Denominator2);
CorrectAnswerMolecules=Molecules1*Molecules2;
CorrectAnswerDenominator=Denominator1*Denominator2;
//下面求CorrectAnswerMolecules和CorrectAnswerDenominator的最大公因数b
if(CorrectAnswerMolecules>=CorrectAnswerDenominator){
while(a<=CorrectAnswerDenominator){
if((CorrectAnswerMolecules%a==0)&&(CorrectAnswerDenominator%a==0))b=a;
a++;
}
}
else{
while(a<=CorrectAnswerMolecules){
if((CorrectAnswerMolecules%a==0)&&(CorrectAnswerDenominator%a==0))b=a;
a++;
}
}
//下面计算约分后正确答案的分子分母
CorrectAnswerMolecules=CorrectAnswerMolecules/b;
CorrectAnswerDenominator=CorrectAnswerDenominator/b;
printf("你的答案:分子:\n");
scanf("%d",&AnswerMolecules);
printf("你的答案:分母:\n");
scanf("%d",&AnswerDenominator);
if((AnswerMolecules==CorrectAnswerMolecules)&&(AnswerDenominator==CorrectAnswerDenominator)){
printf("回答正确!\n");
CorrectAnswerNumber++;
}
else{
printf("回答错误!\n");
}
}
Score=((float)CorrectAnswerNumber/n)*100;
printf("题目回答完毕,您的得分为%.1f\n\n",Score);
}
//FractionalDivide()为分数除法运算
void FractionalDivide(){
int i;
int a=1;
int b=1;
int n;//n为题目数量
int Molecules1,Denominator1;//Molecules1为分子1,Denominator1为分母1
int Molecules2,Denominator2;//Molecules2为分子2,Denominator2为分母2
int AnswerMolecules;//AnswerMolecules为学生回答的分子
int AnswerDenominator;//AnswerDenominator为学生回答的分母
int CorrectAnswerMolecules;//CorrectAnswerMolecules为正确答案的分子
int CorrectAnswerDenominator;//CorrectAnswerDenominator为正确答案的分母
int CorrectAnswerNumber=0;//CorrectAnswerNumber为正确回答的个数
float Score;//Score为学生得分
printf("请输入题目数量(1-10):\n");
scanf("%d",&n);
if(n>10 ||n<0){
printf("输入n有误,需输入1-10以内的整数!\n请重新输入:\n");
scanf("%d",&n);
}//判断n是否为1-10内的整数
for(i=1;i<=n;i++){
do{
srand(time(NULL));
Molecules1=rand()%100;
Molecules2=rand()%100;
Denominator1=rand()%100;
Denominator2=rand()%100;
}while((Molecules1>=Denominator1)||(Molecules2>=Denominator2));
printf("(%d/%d)÷(%d/%d)=\n",Molecules1,Denominator1,Molecules2,Denominator2);
CorrectAnswerMolecules=Molecules1*Denominator2;
CorrectAnswerDenominator=Denominator1*Molecules2;
//下面求CorrectAnswerMolecules和CorrectAnswerDenominator的最大公因数b
if(CorrectAnswerMolecules>=CorrectAnswerDenominator){
while(a<=CorrectAnswerDenominator){
if((CorrectAnswerMolecules%a==0)&&(CorrectAnswerDenominator%a==0))b=a;
a++;
}
}
else{
while(a<=CorrectAnswerMolecules){
if((CorrectAnswerMolecules%a==0)&&(CorrectAnswerDenominator%a==0))b=a;
a++;
}
}
//下面计算约分后正确答案的分子分母
CorrectAnswerMolecules=CorrectAnswerMolecules/b;
CorrectAnswerDenominator=CorrectAnswerDenominator/b;
printf("你的答案:分子:\n");
scanf("%d",&AnswerMolecules);
printf("你的答案:分母:\n");
scanf("%d",&AnswerDenominator);
if((AnswerMolecules==CorrectAnswerMolecules)&&(AnswerDenominator==CorrectAnswerDenominator)){
printf("回答正确!\n");
CorrectAnswerNumber++;
}
else{
printf("回答错误!\n");
}
}
Score=((float)CorrectAnswerNumber/n)*100;
printf("题目回答完毕,您的得分为%.1f\n\n",Score);
}
//FractionalOperation()为分数运算
void FractionalOperation(){
int choose2;
printf("0.退出\n1.加\n2.减\n3.乘\n4.除\n");
scanf("%d",&choose2);
switch (choose2){
case 1:
FractionalAdd();
break;
case 2:
FractionalSubtract();
break;
case 3:
FractionalMultiply();
break;
case 4:
FractionalDivide();
break;
}
if (choose2==0){
printf("已退出程序,感谢使用!\n");
exit(0);
}
}
//Choose1()选择分数运算还是整数运算
void Choose1(){
int choose1;
printf("请选择运算:\n");
printf("0.退出\n1.整数运算\n2.分数运算\n");
scanf("%d",&choose1);
while(choose1!=0){
switch(choose1){
case 1:IntegeOperation();
break;
case 2:FractionalOperation();
break;
}
}
if (choose1==0){
printf("已退出程序,感谢使用!\n");
exit(0);
}
}
//主函数
void main(){
Choose1();
}
运行结果截图:
个人小结:
任务内容 | 计划完成需要的时间(min) | 实际完成需要的时间(min) |
---|---|---|
计划 | 8 | 6 |
估计这个任务需要多少时间,并规划大致工作步骤 | 8 | 12 |
开发 | 150 | 180 |
需求分析(包括学习新技术) | 20 | 17 |
生成设计文档 | 5 | 4 |
设计复审 | 10 | 5 |
代码规范 | 5 | 1 |
具体设计 | 10 | 7 |
具体编码 | 50 | 35 |
代码复审 | 7 | 5 |
测试(自我测试,修改代码,提交修改) | 30 | 50 |
报告 | 20 | 15 |
测试报告 | 5 | 0 |
计算工作量 | 5 | 0 |
事后总结,并提出过程改进计划 | 10 | 15 |
---- | ---- | ---- |