zoukankan      html  css  js  c++  java
  • 四则运算实现用户输入答案并统计正确数量

    一,设计思路:

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

    判断答案是否正确的思路是在上次的基础之上先定义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= ",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= ",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= ",a[i],b[i]);
    printf("请输入结果!");
    scanf("%d",&k1);
    if(k1!=a[i]*b[i])
    wrong++;
    else
    right++;
    }
    else
    {
    printf("%d/%d= ",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= ",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= ",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= ",a[i],b[i]);
    printf("请输入结果!");
    scanf("%d",&k1);
    if(k1!=a[i]*b[i])
    wrong++;
    else
    right++;
    }
    else
    {
    printf("%d/%d= ",a[i],b[i]);
    printf("请输入结果!");
    scanf("%d",&k1);
    if(k1!=a[i]/b[i])
    wrong++;
    else
    right++;
    }

    if((i+1)%p==0)
    printf(" ");
    }
    *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:否) ");
    scanf("%d",&m);
    if(m!=0&&m!=1)
    {
    printf("输入错误,请重新输入! ");
    Carry(q,ri,wr);
    }
    printf("2.请输入取值范围:(0-?) ");
    scanf("%d",&r);
    printf("3.请选择加减有无负数:(0:有 1:无) ");
    scanf("%d",&n);
    if(n!=0&&n!=1)
    {
    printf("输入错误请重新输入! ");
    Carry(q,ri,wr);
    }
    if(m==0)
    {
    printf("4.请选择出发有无余数:(0:有 1:无) ");
    scanf("%d",&d);
    if(d!=0&&d!=1)
    {
    printf("输入错误请重新输入! ");
    Carry(q,ri,wr);
    }
    }
    printf("5.请输入题目个数: ");
    scanf("%d",q);
    if(*q<=0)
    {
    printf("输入错误请重新输入! ");
    Carry(q,ri,wr);
    }
    printf("6.请选择打印方式:0为逐行打印,输入其他数字则为一行几列 ");
    scanf("%d",&p);
    if(p<0)
    {
    printf("输入错误请重新输入! ");
    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' ");
    cout<<"您总做了"<<tishu<<"个题,正确"<<right1<<"的道,错误"<<wrong1<<"道"<<endl;
    }

    三,运行结果截图:

    四,结果总结:

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

  • 相关阅读:
    Android_bug之 task ':app:mergeDebugResources'. > Some file crunching failed, see logs f
    linux下vi命令大全[转]
    百度地图api 常用demo
    Mac之vim普通命令使用[转]
    java写文件
    java读取文件
    Android中对Log日志文件的分析[转]
    Android实用代码模块集锦
    java 位运算
    MyEclipse自带maven找不到或自己外置安装
  • 原文地址:https://www.cnblogs.com/hushunli/p/4356461.html
Copyright © 2011-2022 走看看