一、题目:在原程序的基础之上让程序能接受用户输入答案,并判定对错。最后给出总共对/错 的数量。
二、设计思路
既然能判断对错,和接受用户的输入,那就必须能保存这些题目的结果,和用户输入的结果。因此我用了两个数组,其中一个由前边的运算符控制直接保存结果,另一组数组由用户输入,在将两数组进行比对,对了输出正确且变量加1,错误亦然。但是遇到了余数的问题,后又设置两个数组分别保存正确的余数和用户输入的余数,在后边用户输入中通过判断正确余数是否等于0来判断if函数,将程序的功能实现。
三、源代码
1 #include<iostream.h> 2 #include<stdlib.h> 3 #include<time.h> 4 int main() 5 { 6 srand(time(NULL)); 7 int sm; //sm 即题目的数量 8 char cc; //cc 即算式中有无乘除 9 char ys; //ys即有无余数 10 int sz; //sz 即数值取值范围 11 char zf; //zf即加法运算出不出现正负 12 char fh; //fh即四则运算中的加减乘除 13 int ls; //ls即输出的列数 14 int dui=0; 15 int cuo=0; 16 cout<<"请输入您需要的题目数目: "; 17 cin>>sm; 18 int ans1[1000]; //ans1存放答案 19 int ans2[1000]; //ans2存放用户输入的答案 20 int ans3[1000]={0}; //存放余数 21 int ans4[1000]; //存放用户输入的余数 22 cout<<"运算中需要乘除法吗?(y/n)"; 23 cin>>cc; 24 if(cc=='y') 25 { 26 cout<<"除法中需要出现余数吗?(y/n)"; 27 cin>>ys; 28 } 29 cout<<"请输入运算数的最大取值范围:"; 30 cin>>sz; 31 cout<<"减法中出现负数吗?(y/n)"; 32 cin>>zf; 33 cout<<"您想输出几列?"; 34 cin>>ls; 35 cout<<"***********************************************"<<endl; 36 for(int i=0;i<sm;i++) //for循环中用sm来控制循环次数 37 { 38 int a=rand()%sz; 39 int b=rand()%sz; 40 int c; 41 if(cc=='y') //此处判断用不用到乘除法 42 c=rand()%4; 43 else if(cc=='n') 44 c=rand()%2; 45 if(c==0) //此处判断运算符号 46 { 47 fh='+'; 48 ans1[i]=a+b; 49 } 50 if(c==1) 51 { 52 fh='-'; 53 ans1[i]=a-b; 54 } 55 if(c==2) 56 { 57 fh='*'; 58 ans1[i]=a*b; 59 } 60 if(c==3) 61 { 62 fh='/'; 63 ans1[i]=a/b; 64 ans3[i]=a-b*ans1[i]; 65 } 66 if(c==3&&b==0) //除数不能为0 67 { 68 i--; 69 continue; 70 } 71 if(c==1&&zf=='n'&&a<b) //减法结果不为负数 72 { 73 i--; 74 continue; 75 } 76 if(c==3&&ys=='n'&&a%b!=0) //除法结果不产生余数 77 { 78 i--; 79 continue; 80 } 81 cout<<i+1<<"、"<<a<<fh<<b<<'='<<" "; 82 if((i+1)%ls==0) //控制输出的列数 83 { 84 cout<<endl; 85 } 86 } 87 cout<<"***********************************************"<<endl; 88 cout<<"请输入答案:"<<endl; 89 for(int k=0;k<sm;k++) 90 { 91 if(ans3[k]==0) //没余数状态下的输入答案即返回结果 92 { 93 cout<<k+1<<":"; 94 cin>>ans2[k]; 95 if(ans2[k]==ans1[k]) 96 { 97 cout<<"正确"<<endl; 98 dui=dui+1; 99 } 100 else 101 { 102 cout<<"错误"<<endl; 103 cuo=cuo+1; 104 } 105 } 106 if(ans3[k]!=0) //有余数状态下的输入答案即返回结果 107 { 108 cout<<k+1<<"商为:"; 109 cin>>ans2[k]; 110 cout<<"余数为:"; 111 cin>>ans4[k]; 112 if((ans2[k]==ans1[k])&&(ans3[k]==ans4[k])) 113 { 114 cout<<"正确"<<endl; 115 dui=dui+1; 116 } 117 else 118 { 119 cout<<"错误"<<endl; 120 cuo=cuo+1; 121 } 122 } 123 } 124 cout<<"***********************************************"<<endl; 125 cout<<"共做对 "<<dui<<" 道题"<<endl; 126 cout<<"共做错 "<<cuo<<" 道题"<<endl; 127 return 0; 128 }
四、运行结果截图
五、经验总结
我觉得编写一个程序的设计思路比纯手工的代码输入要难得多,并且也是一个程序最核心的东西。在这个小程序里我遇到了好几个困难,比如说除法那里有余数和没余数是来两个情况的判断,同时余数的保存和输入也让我觉得比较棘手,后来一想余数不就是本身减去最大约数吗,同时可以用数组的方式对其进行保存。思路有了,再来写代码,就会变得很轻松。同时编程也要让自己严禁起来,每一种情况和后果都得考虑出来,尤其是在if函数的判断里,好几次都是在那里出现了错误,以后还要常加练习。