1. 程式人生 > >用C++編寫小學生隨機十道練習題的步驟以及原始碼

用C++編寫小學生隨機十道練習題的步驟以及原始碼

程式要求:

設計一個程式,用來實現幫助小學生進行算術運算練習,它具有以下功能:
(1) 提供10道加、減、乘、除四種基本算術運算的題目,每道題中的運算元是隨機產生的;
(2) 加減是100以內的數;乘除為乘法表裡的;被減數大於減數;除法要求能整除;被乘數小與乘數;(若不合格重新產生)
(3) 練習者根據顯示的題目輸入自己的答案,程式自動判斷輸入的答案是否正確並顯示出相應的資訊。最後顯示做對了幾道題;
(4) 每次答題要記錄做錯的題目,下次做題可選擇上次做錯的題;

編寫步驟:1:分析程式要求,首先利用隨機函式,即產生隨機數和隨機符號;

2:編寫類函式class Student
{
public:
Student(){}
void expression();//產生隨機算術式
void again();//將錯題存入檔案中
};

3:存放錯題利用檔案(c++檔案與C語言檔案操作有所不同)

[

cout<<"error!\n";
ofstream outfile("錯題集.txt",ios::app);
if(!outfile)
{
cerr<<"open error!"<<endl;
exit(1);
}
outfile<<a;
switch(c)
{
case 1:outfile<<"+";break;
case 2:outfile<<"-";break;
case 3:outfile<<"*";break;
case 4:outfile<<"/";break;     
}
outfile<<b;
outfile<<endl;
outfile<<d;
outfile<<endl;
outfile.close();

將錯題以流的方式存入檔案中;

]

以檔案流的方式讀取檔案:infile

4:主函式中進行功能選擇:進行新測試還是選擇進行做題

程式原始碼:

#include<iostream>
#include <ctime>
#include <cstdlib>
#include <string>
#include<fstream>
using namespace std;
class Student
{
public:
Student(){}
void expression();
void again();
};
static int num=0,a,b,d,c,sum,result;
void Student::expression()
{
cout<<"\n\n\n\t\t\t學生算數10道\n\n\n\n";
for(int i=0;i<10;i++)
{
cout<<"第"<<i+1<<"題\n";
c=rand()%4+1;
switch(c)
{
case 1:
{
 srand(time( NULL ) );
 a=rand()%100+1;
 b=rand()%100+1; 
 d=a+b;
 cout<<a<<" + "<<b<<" = ";
 }
 break;
case 2:
 {
 srand(time( NULL ) );
 a=rand()%100+1;
 b=rand()%100+1;  
 if(a<b)
 {
 d=a;
 a=b;
 b=d;
 }
 d=a-b;
 cout<<a<<" - "<<b<<" = ";
  }
 break;
 case 3:
  {
   //srand( (unsigned)time( NULL ) );
 
 a=rand()%8+1;      
 b=rand()%8+1;
 if(a>b)
 {
 d=a;
 a=b;
 b=d;
 }
 d=a*b;
 cout<<a<<" * "<<b<<" = ";
 }
break;
case 4:
 {
   srand(time( NULL ) );
a=rand()%9+1;
b=rand()%9+1;
a=(a/b)*b;
d=a/b;
cout<<a<<" / "<<b<<" = ";
 } break;
}
cin>>result;
if(result!=d)
{
cout<<"error!\n";
ofstream outfile("錯題集.txt",ios::app);
if(!outfile)
{
cerr<<"open error!"<<endl;
exit(1);
}
outfile<<a;
switch(c)
{
case 1:outfile<<"+";break;
case 2:outfile<<"-";break;
case 3:outfile<<"*";break;
case 4:outfile<<"/";break;     
}
outfile<<b;
outfile<<endl;
outfile<<d;
outfile<<endl;
outfile.close();
}
else
{
cout<<"right!\n";
num++;
}
}
cout<<"\t\t\t共答對 "<<num<<" 道題\n";
}
void Student::again()
{
char ch,c;
cout<<"\t\t\t是否重做錯題(按y/Y繼續,任意鍵結束)\n";
cin>>ch;
if(num!=10)
{
 
    if(ch=='Y'||ch=='y')
    { ifstream infile("錯題集.txt",ios::in);
    while(!(infile>>a>>c>>b>>d).eof()) 
    {
    cout<<a<<c<<b<<" = ";
    cin>>result;
    if(result==d)
    {
    cout<<"right!\n";
    }
    else
    cout<<"error!\n";     }
    cout<<"\t\t\t測試結束\n";
    infile.close();
    }
    else
cout<<"\t\t\t測試結束\n";
}
else
cout<<"\t\t\t測試完成\n";
}
int main()
{
Student stu;
cout<<"\t\t^^*^^*^^*^^*^^歡迎進入學生算數系統^^*^^*^^*^^*^^*^^\n\n\n\n";
cout<<"^^^^^^^^^^^^^^首次測試選擇y/Y,測試過選擇n/N^^^^^^^^^^^^^^^^^\n";
char ch;
cin>>ch;
if(ch=='N'||ch=='n')
stu.again();
if(ch=='Y'||ch=='y')
{
 stu.expression();
 stu.again();
}
return 0;
} 執行介面: