1. 程式人生 > >四則運算 3.0 結對

四則運算 3.0 結對

alt i++ 必須 clas 運行 細心 ase cor 減法

目錄

  • 結對對象
  • 任務要求
  • 分工說明
  • 設計思路
  • 遇到的問題
  • 源代碼
  • 運行成果
  • 總結

結對對象

  • 姓名: 侯熙磊
  • 班級: 土1603-1班、
  • 學號: 20160672

  • 簡介: 性別男。愛好下象棋,踢足球。在組內負責程序修改和測試,一般都是有很多BUG的,還要改進一下,顯得更加美觀。
  • 姓名: 黃睿麒
  • 班級: 土1603-1班、
  • 學號: 20160697

  • 簡介:性別男,愛好女。性格隨性灑脫,追求自由。常常會想到一些騷主意去結決問題,應變能力尚好。擅長摸魚。

任務要求

  • 實現在線答題。
  • 答題結束後,可以判斷對錯。
  • 並將錯題的結果保存起來。

分工說明

  • 黃睿麒:前期大部分代碼的編寫,中期文件處理的代碼實現,後期軟件圖標的設計,解決了負數和正負數計算分開問題、將答題過程導出保存TXT文件、統計錯題給出百分制分數的及格和不及格問題。
  • 侯熙磊:前期小部分代碼的編寫文件處理和測試類的思路提供,後期修改和完善代碼內容和規範。提供了兩個數運算時正負時除數不為零的代碼;測試代碼和選擇正數運算時,除法有負數的BUG修復;測試代碼和BUG提出和修改。

設計思路

本次實驗運用選擇和循環將運算分開簡化。首先將所需四則運算中的負數分割出來,運用switch和case進行選擇。在生成隨機數時運用srand配合rand()生成真隨機數,和運算符號。出題和答案則使用if選擇和for循環進行這次難點在我看來是在將數據輸出上,運用fprintf()函數將所需結果導入到txt格式文件中。

源代碼

  1 #include <stdio.h> 
  2 #include <stdlib.h>
  3 #include <time.h>
  4 int main()
  5  { 
  6     FILE *fpt;
  7     fpt = fopen("四則運算.txt","w");
  8     fprintf(fpt,"四則運算在線答題錯題記錄\n");
  9     int k,n,m,i,s,j,g,h;
 10     n=5;
 11     float score=0;
 12     int a,b;
 13     int
answers[1000]={0},user_answer[1000]={0}; 14 a=0; 15 b=0; 16 printf("\n請輸入數字類型(1.正數 2.正負數) -1或其他數字為退出程序: "); 17 scanf("%d",&h); 18 fprintf(fpt,"\n請輸入數字類型(1.正數 2.正負數) -1或其他數字為退出程序: %d ",h); 19 20 21 switch(h) 22 { 23 case 1: 24 { 25 printf("請輸入題目數(1-1000)"); 26 scanf("%d",&k); 27 if (k<1||k>1000) 28 { 29 printf("\n超出允許範圍\n"); 30 printf("請再次輸入題目數\n"); 31 scanf("%d",&k); 32 } 33 printf("請選擇出題方式:0.加法 1.減法 2.乘法 3.除法 4.隨機\n"); 34 scanf("%d",&m); 35 if (m<0||m>4) 36 { 37 printf("\n出題方式選擇錯誤\n"); 38 printf("請再次輸入出題方式前序號\n"); 39 scanf("%d",&m); 40 } 41 printf("\n********************開始答題************************\n"); 42 fprintf(fpt,"\n********************開始答題************************\n"); 43 srand((int)time(0)); 44 for (i=0;i<k;i++) 45 { 46 a=rand()%100; 47 b=rand()%100; 48 while(a<-100||a>100||b<-100||b>100) 49 { 50 a=rand()%201-100; 51 b=rand()%201-100; 52 } 53 a=a; 54 b=b; 55 if(m==4) 56 n=rand()%4; 57 if (m==0||n==0) 58 { 59 printf("\n第%d題:%d+%d=",i+1,a,b); 60 fprintf(fpt,"\n第%d題:%d+%d=",i+1,a,b); 61 scanf("%d",&user_answer[i]); 62 answers[i]=a+b; 63 } 64 if (m==1||n==1) 65 { 66 if (a>b) 67 { 68 printf("\n第%d題:%d-%d=",i+1,a,b); 69 fprintf(fpt,"\n第%d題:%d-%d=",i+1,a,b); 70 scanf("%d",&user_answer[i]); 71 answers[i]=a-b; 72 } 73 else 74 { 75 printf("\n第%d題:%d-%d=",i+1,b,a); 76 fprintf(fpt,"\n第%d題:%d-%d=",i+1,b,a); 77 scanf("%d",&user_answer[i]); 78 answers[i]=b-a; 79 } 80 } 81 if (m==2||n==2) 82 { 83 printf("\n第%d題:%d*%d=",i+1,a,b); 84 fprintf(fpt,"\n第%d題:%d*%d=",i+1,a,b); 85 scanf("%d",&user_answer[i]); 86 answers[i]=a*b; 87 } 88 if (m==3||n==3) 89 { 90 s=a*b; 91 while(s<-100||s>100||a==0) 92 { 93 a=rand()%100; 94 b=rand()%100; 95 s=a*b; 96 } 97 printf("\n第%d題:%d/%d=",i+1,s,a); 98 fprintf(fpt,"\n第%d題:%d/%d=",i+1,s,a); 99 scanf("%d",&user_answer[i]); 100 answers[i]=s/a; 101 } 102 } 103 printf("\n答題結果和正確答案:\n"); 104 fprintf(fpt,"\n答題結果和正確答案:\n"); 105 for (i=0;i<k;i++) 106 { 107 if (user_answer[i]==answers[i]) 108 { 109 printf("%d:正確 %d\n",i+1,answers[i]); 110 fprintf(fpt,"%d:正確 %d\n",i+1,answers[i]); 111 score++; 112 } 113 else printf("%d:錯誤 %d\n",i+1,answers[i]); 114 fprintf(fpt,"%d:錯誤 %d\n",i+1,answers[i]); 115 } 116 score=100*score/k; 117 printf("\n總得分(百分制):%f\n",score); 118 fprintf(fpt,"\n總得分(百分制):%f\n",score); 119 if (score<60) {printf("很遺憾!你的分數不及格,繼續努力\n"); 120 fprintf(fpt,"很遺憾!你的分數不及格,繼續努力\n"); 121 } 122 else 123 { 124 printf("恭喜!你的成績合格\n"); 125 fprintf(fpt,"恭喜!你的成績合格\n"); 126 } 127 printf("*****************************************************\n"); 128 fprintf(fpt,"*****************************************************\n"); 129 fclose(fpt); 130 printf("繼續答題請輸入任意數字\n結束請點擊右上角關閉程序\n"); 131 scanf("%d",&g); 132 return main(); 133 } 134 case 2: 135 { 136 printf("請輸入題目數(1-1000)"); 137 scanf("%d",&k); 138 if (k<1||k>1000) 139 { 140 printf("\n超出允許範圍\n"); 141 printf("請再次輸入題目數\n"); 142 scanf("%d",&k); 143 } 144 printf("請選擇出題方式:0.加法 1.減法 2.乘法 3.除法 4.隨機\n"); 145 scanf("%d",&m); 146 if (m<0||m>4) 147 { 148 printf("\n出題方式選擇錯誤\n"); 149 printf("請再次輸入出題方式前序號\n"); 150 scanf("%d",&m); 151 } 152 printf("\n********************開始答題************************\n"); 153 fprintf(fpt,"\n********************開始答題************************\n"); 154 srand((int)time(0)); 155 for (i=0;i<k;i++) 156 { 157 a=rand()%201-100; 158 b=rand()%201-100; 159 while(a<-100||a>100||b<-100||b>100) 160 { 161 a=rand()%201-100; 162 b=rand()%201-100; 163 } 164 a=a; 165 b=b; 166 if(m==4) 167 n=rand()%4; 168 if (m==0||n==0) 169 { 170 printf("\n第%d題:%d+%d=",i+1,a,b); 171 fprintf(fpt,"\n第%d題:%d+%d=",i+1,a,b); 172 scanf("%d",&user_answer[i]); 173 answers[i]=a+b; 174 } 175 if (m==1||n==1) 176 { 177 if (a>b) 178 { 179 printf("\n第%d題:%d-%d=",i+1,a,b); 180 fprintf(fpt,"\n第%d題:%d-%d=",i+1,a,b); 181 scanf("%d",&user_answer[i]); 182 answers[i]=a-b; 183 } 184 else 185 { 186 printf("\n第%d題:%d-%d=",i+1,b,a); 187 fprintf(fpt,"\n第%d題:%d-%d=",i+1,b,a); 188 scanf("%d",&user_answer[i]); 189 answers[i]=b-a; 190 } 191 } 192 if (m==2||n==2) 193 { 194 printf("\n第%d題:%d*%d=",i+1,a,b); 195 fprintf(fpt,"\n第%d題:%d*%d=",i+1,a,b); 196 scanf("%d",&user_answer[i]); 197 answers[i]=a*b; 198 } 199 if (m==3||n==3) 200 { 201 s=a*b; 202 while(s<-100||s>100||a==0) 203 { 204 a=rand()%201-100; 205 b=rand()%201-100; 206 s=a*b; 207 } 208 printf("\n第%d題:%d/%d=",i+1,s,a); 209 fprintf(fpt,"\n第%d題:%d/%d=",i+1,s,a); 210 scanf("%d",&user_answer[i]); 211 answers[i]=s/a; 212 } 213 } 214 printf("\n答題結果和正確答案:\n"); 215 fprintf(fpt,"\n答題結果和正確答案:\n"); 216 for (i=0;i<k;i++) 217 { 218 if (user_answer[i]==answers[i]) 219 { 220 printf("%d:正確 %d\n",i+1,answers[i]); 221 fprintf(fpt,"%d:正確 %d\n",i+1,answers[i]); 222 score++; 223 } 224 else printf("%d:錯誤 %d\n",i+1,answers[i]); 225 fprintf(fpt,"%d:錯誤 %d\n",i+1,answers[i]); 226 } 227 score=100*score/k; 228 printf("\n總得分(百分制):%f\n",score); 229 fprintf(fpt,"\n總得分(百分制):%f\n",score); 230 if (score<60) {printf("很遺憾!你的分數不及格,繼續努力\n"); 231 fprintf(fpt,"很遺憾!你的分數不及格,繼續努力\n"); 232 } 233 else 234 { 235 printf("恭喜!你的成績合格\n"); 236 fprintf(fpt,"恭喜!你的成績合格\n"); 237 } 238 printf("*****************************************************\n"); 239 fprintf(fpt,"*****************************************************\n"); 240 fclose(fpt); 241 printf("繼續答題請輸入任意數字\n結束請點擊右上角關閉程序\n"); 242 scanf("%d",&g); 243 return main(); 244 } 245 while(h!=-1); 246 } 247 }

遇到的問題

本程序在剛開始調試時有許多錯誤,出現過不能運行、不能隨機出現四則運算、不會輸出正確結果、選擇乘法卻出現減法等等問題。耗費時間最多是在於運用fprintf函數上,之前沒使用過用的時候就抓麻了。在生成隨機數的時侯

最開始忘記使用srand函數,導致出的題目每次都是一樣的也就是偽隨機數,最後百度上查到原因和解決方法才改好。

運行結果

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

總結

寫程序時必須要細心,不能輸錯一個字符標點。在修改時要有耐心,編譯出錯後必須逐個錯誤去改正,絕不能心急浮躁,否則修改之後還會有新的錯誤。這次代碼編寫在反反復復檢查排錯修改中給了手殘的我很大的教訓。

四則運算 3.0 結對