天天看点

四则运算实现用户输入答案并统计正确数量

一,设计思路:

本次的实现目标是在上次代码的基础之上实现用户输入答案,并判断答案是否正确并进行统计,最后输出正确答案的个数。

判断答案是否正确的思路是在上次的基础之上先定义wrong(用来统计错误个数)right(用来统计正确的个数)k1,参数。

在void Display函数中定义答案的判断和正确错误的统计,最后在主函数中通过指针的调用来实现答案正确和错误个数的统计。

二,源代码: 

#include<stdlib.h>

#include<iostream.h>

#include<stdio.h>

//void Display(int p); //输出题目

int wrong=0,right=0;

int a[100],b[100],c[100];

//int i;

void Display(int p,int *ri,int *wr,int i) //输出题目

{

int k1=0;

if(p==0)

{

if(c[i]==0)

{

printf("%d+%d=\n",a[i],b[i]);

printf("请输入结果!");

scanf("%d",&k1);

if(k1!=a[i]+b[i])

wrong++;

else

right++;

}

else if(c[i]==1)

{

printf("%d-%d=\n",a[i],b[i]);

printf("请输入结果!");

scanf("%d",&k1);

if(k1!=a[i]-b[i])

wrong++;

else

right++;

}

else if(c[i]==2)

{

printf("%d*%d=\n",a[i],b[i]);

printf("请输入结果!");

scanf("%d",&k1);

if(k1!=a[i]*b[i])

wrong++;

else

right++;

}

else

{

printf("%d/%d=\n",a[i],b[i]);

printf("请输入结果!");

scanf("%d",&k1);

if(k1!=a[i]/b[i])

wrong++;

else

right++;

}

}

else

{

if(c[i]==0)

{

printf("%d+%d=\n",a[i],b[i]);

printf("请输入结果!");

scanf("%d",&k1);

if(k1!=a[i]+b[i])

wrong++;

else

right++;

}

else if(c[i]==1)

{

printf("%d-%d=\n",a[i],b[i]);

printf("请输入结果!");

scanf("%d",&k1);

if(k1!=a[i]-b[i])

wrong++;

else

right++;

}

else if(c[i]==2)

{

printf("%d*%d=\n",a[i],b[i]);

printf("请输入结果!");

scanf("%d",&k1);

if(k1!=a[i]*b[i])

wrong++;

else

right++;

}

else

{

printf("%d/%d=\n",a[i],b[i]);

printf("请输入结果!");

scanf("%d",&k1);

if(k1!=a[i]/b[i])

wrong++;

else

right++;

}

if((i+1)%p==0)

printf("\n");

}

*ri=right;

*wr=wrong;

}

void Carry(int *q,int *ri,int *wr) //执行全部过程,添加出错处理

{

int j;

int t;

int m;

int n;

//int q;

int d;

int p=3;

int r;

//int wrong=0;

//int right=0;

printf("1.请选择是否有乘除法(0:是 1:否)\n");

scanf("%d",&m);

if(m!=0&&m!=1)

{

printf("输入错误,请重新输入!\n");

Carry(q,ri,wr);

}

printf("2.请输入取值范围:(0-?)\n");

scanf("%d",&r);

printf("3.请选择加减有无负数:(0:有 1:无)\n");

scanf("%d",&n);

if(n!=0&&n!=1)

{

printf("输入错误请重新输入!\n");

Carry(q,ri,wr);

}

if(m==0)

{

printf("4.请选择出发有无余数:(0:有 1:无)\n");

scanf("%d",&d);

if(d!=0&&d!=1)

{

printf("输入错误请重新输入!\n");

Carry(q,ri,wr);

}

}

printf("5.请输入题目个数:\n");

scanf("%d",q);

if(*q<=0)

{

printf("输入错误请重新输入!\n");

Carry(q,ri,wr);

}

printf("6.请选择打印方式:0为逐行打印,输入其他数字则为一行几列\n");

scanf("%d",&p);

if(p<0)

{

printf("输入错误请重新输入!\n");

Carry(q,ri,wr);

}

for(int i=0;i<*q;i++)

{

a[i]=rand()%r;

b[i]=rand()%r;

c[i]=rand()%4;

if(c[i]==3&&b[i]==0)

{

b[i]++;

}

for(j=0;j<i;j++) //判断题目是否重复,若重复则a[i]++

if(a[j]==a[i]&&b[j]==b[i]&&c[j]==c[i])

a[i]++;

if(m==0&&n==0&&d==0)

{

Display(p,ri,wr,i);

}

else if(m==1) //没有乘除法

{

if(c[i]>=2)

c[i]=c[i]-2;

Display(p,ri,wr,i);

}

else if(m==0&&n==1&&d==0) //无负数,且被除数大于除数

{

if(a[i]<b[i])

{

t=a[i];

a[i]=b[i];

b[i]=t;

}

Display(p,ri,wr,i);

}

else

{

if(c[i]==3)

{

if(a[i]<b[i])

{

t=a[i];

a[i]=b[i];

b[i]=t;

}

while(a[i]%b[i]!=0) //无余数

b[i]++;

}

Display(p,ri,wr,i);

}

}

}

void main()

{

int tishu=0;

int wrong1=0,right1=0;

Carry(&tishu,&right1,&wrong1);

//printf("您总共做了"道题目,正确个数'right',错误的个数'wrong'\n");

cout<<"您总做了"<<tishu<<"个题,正确"<<right1<<"的道,错误"<<wrong1<<"道"<<endl;

}

三,运行结果截图:

四则运算实现用户输入答案并统计正确数量

四,结果总结:

在初步的思路中是想在void Disply函数中定义对答案的判断和统计策略,最开始我把wrong和right变量定义在了Disply函数里面,最后导致运行结果一直输出正确答案1错误答案0,通过仔细见后发现每次对执行函数时都又把wrong和right恢复为0了,所以导致wrong和right统计结果错误。经过第一次改正后发现还是不正确,因为我忘记了Disply函数中各个模块是并立的关系所以要用else if 而不能用原来的if来表示。但是后运行结果还是有错误,输出结果正确和错误的个数总是反着的,后发现在主函数中指针的返回是有错误的,所以导致了结果的错误。以上就是这次遇见的问题,这些问题里面有粗心大意造成的,有逻辑错误造成的。归根结底是基础太差,缺乏练习!

转载于:https://www.cnblogs.com/hushunli/p/4356461.html