天天看點

四則運算實作使用者輸入答案并統計正确數量

一,設計思路:

本次的實作目标是在上次代碼的基礎之上實作使用者輸入答案,并判斷答案是否正确并進行統計,最後輸出正确答案的個數。

判斷答案是否正确的思路是在上次的基礎之上先定義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