一、實驗題目
這次我的程序,是對四則運算2的進一步擴展
我選的是第一個方向:程序能夠接受用戶輸入的答案,並能判定對錯,最後還可以給出總共對/錯的數量。
二、實驗擴展思想
1、因為我給每個題目都編了序號,所以再輸入答案的時候只需按著題目的順序輸入就可以了。
2、判斷對錯,我是事先定義了一個數組,來存放正確答案,最後把用戶輸入的答案和正確答案做比較即可
3、給出對/錯的數量,這個比較容易,只需要設計兩個變量,一個用來計算正確的個數,一個用來計算錯誤的個數,最後給出答案即可。
三、實驗代碼
//作者: 信1201-2班 司新紅 #include<iostream.h> #include<stdlib.h> #include<time.h> void hycc() { int f;//定義要測試的是四則運算是幾進制 cout<<"請輸入要測試的四則運算是幾進制?"<<endl; cin>>f; int x,y,z,t; //x,y分別表示所產生的兩個數,z來控制做加減乘除 int e;//輸入每行算數題的個數 srand(time(NULL)); int n; int b;//表示有無負數 int a;//用來輸入行間距 int d;//代表輸入的答案 float daan[100];//代表正確答案 int zq=0;//用來表示正確答案的個數 int cw=0;//用來表示錯誤答案的個數 cout<<"需要列出多少到數學題?"<<endl; cin>>n; //n代表出題的個數 cout<<"加減有無負數?(0代表有負數,1代表無負數)"<<endl; cin>>b; cout<<"每行需要打印幾個算數題?"<<endl; cin>>e; cout<<"打印時行間距是多少?"<<endl; cin>>a; cout<<"********************************"<<endl; for(int i=0;i<n;i++) { x=rand()%f; y=rand()%f; z=rand()%4; switch(z) { case 0: cout<<i+1<<"、 "<<x<<"+"<<y<<"="<<" "; daan[i+1]=x+y; break; case 1: if(b==1) { if(x<y) { t=x; x=y; y=t; } cout<<i+1<<"、 "<<x<<"-"<<y<<"="<<" "; } else if(b==0) { cout<<i+1<<"、 "<<x<<"-"<<y<<"="<<" "; } daan[i+1]=x-y; break; case 2: cout<<i+1<<"、 "<<x<<"*"<<y<<"="<<" "; daan[i+1]=x*y; break; case 3: if(y!=0) { cout<<i+1<<"、 "<<x<<"÷"<<y<<"="<<" "; } else { i=i-1; } daan[i+1]=(float)x/y; break; default: cout<<"超出測試范圍"<<endl; break; } if((i+1)%e==0) { for(int c=0;c<=a;c++) { cout<<endl; } } if((i+1)==n) { cout<<endl; } } for(i=1;i<=n;i++) { cout<<"請作答:"<<endl; cout<<i<<"、"; cin>>d; if(d==daan[i]) { cout<<"恭喜您,回答正確!"<<endl; cout<<endl; zq=zq+1; } else { cout<<"回答錯誤,正確答案為:"<<" "<<daan[i]<<endl; cout<<endl; cw=cw+1; } } cout<<"回答正確的數量為:"<<" "<<zq<<"個"<<endl; cout<<"回答錯誤的數量為:"<<" "<<cw<<"個"<<endl; } void bhycc() { int f; cout<<"請輸入要測試的四則運算是幾進制?"<<endl; cin>>f; int e;//輸入每行算數題的個數 int x,y,z,t; //x,y分別表示所產生的兩個數,z來控制做加減乘除 srand(time(NULL)); int n;//n代表出題個數 int b;//代表加減有無負數 int a;//用來輸入行間距 int d;//代表輸入的答案 int daan[100];//代表正確答案 int zq=0;//用來表示正確答案的個數 int cw=0;//用來表示錯誤答案的個數 cout<<"需要列出多少到數學題"<<endl; cin>>n; //n代表出題的個 cout<<"加減有無負數?(0代表有負數,1代表無負數)"<<endl; cin>>b; cout<<"每行需要打印幾個算數題?"<<endl; cin>>e; cout<<"打印時行間距是多少?"<<endl; cin>>a; cout<<"********************************"<<endl; for(int i=0;i<n;i++) { x=rand()%f; y=rand()%f; z=rand()%2; switch(z) { case 0: cout<<i+1<<"、 "<<x<<"+"<<y<<"="<<" "; daan[i+1]=x+y; break; case 1: if(b==1) { if(x<y) { t=x; x=y; y=t; } cout<<i+1<<"、 "<<x<<"-"<<y<<"="<<" "; } else if(b==0) { cout<<i+1<<"、 "<<x<<"-"<<y<<"="<<" "; } daan[i+1]=x-y; break; default: cout<<"超出測試范圍"<<endl; break; } if((i+1)%e==0) { for(int c=0;c<=a;c++) { cout<<endl; } } if((i+1)==n) { cout<<endl; } } for(i=1;i<=n;i++) { cout<<"請作答:"<<endl; cout<<i<<"、"; cin>>d; if(d==daan[i]) { cout<<"恭喜您,回答正確!"<<endl; cout<<endl; zq=zq+1; } else { cout<<"回答錯誤,正確答案為:"<<" "<<daan[i]<<endl; cout<<endl; cw=cw+1; } } cout<<"回答正確的數量為:"<<" "<<zq<<"個"<<endl; cout<<"回答錯誤的數量為:"<<" "<<cw<<"個"<<endl; } int main() { int c;//c代表輸入是否繼續的數字 char ch; cout<<"是否支持乘除?(Y/N)"<<endl; cin>>ch; if(ch=='Y'||ch=='y') { hycc(); cout<<"********************************"<<endl; } else if(ch=='N'||ch=='n') { bhycc(); cout<<"********************************"<<endl; } else { cout<<"輸入錯誤,無法為您出題!"<<endl; } cout<<"要繼續答題嗎?(0:繼續 1:退出)"<<endl; cin>>c; if(c==0) { cout<<endl; main(); } else { cout<<endl; return 0; } return 0; }
四運行結果
五、總結
這次的題目有幾個選向,由於我的編程能力不強,所以 我選擇了第一個方向,在編寫程序時還遇到了一定的困難,比如在做除法的時候,由於定義的正確答案的數組是整形,所以導致除法計算一直不正確,所以我選擇了把數組定義為浮點型。我在以後的時間裡一定會多加聯系,爭取再實現另外一個方向
PSP
學生 司新紅
日期 2014.3.17
教師 王建民
程序號_______________
項目計劃總結
編程
閱讀書籍
課後復習
日總計
周日
周一
周二
30
30
90
150
周三
90
30
120
周四
120
30
150
周五
周六
周總計
240
90
90
420
時間記錄總結
日期
開始
結束
中斷時間
淨時間
活動
備注
C
U
3月17日
4:00
5:00
無
160
編程
8:00
9:30
30
60
復習
寫作業
10:00
10:30
無
30
閱讀書籍
3月18日
10:00
11:30
15
75
編程
休息
10:00
10:30
無
30
閱讀書籍
3月19日
7:00
9:00
無
120
編程
缺陷記錄日志
日期
編號
類型
引入階段
排除階段
修復時間
修復缺陷
3月17日
01
程序
編碼
編譯
20min
求幾個數中最大值時一直報錯,最後我把所求的和放在了一個數組中
3月18日
02
程序
編碼
編譯
10min
忘記給正確答案的個數和錯誤答案的個數賦值
03
程序
編碼
編譯
30min
計算除法的正確答案時,不能是浮點型,然後我就把答案這個數組定義成了浮點型
3月19日
04
程序
編碼
編譯
10min
在不含有乘除的函數中,忘了給正確答案賦值,導致結果報錯
05
程序
編碼
編譯
10min
變量用錯,運行時運行無響應了。