1. 程式人生 > >又是二柱子的四則運算

又是二柱子的四則運算

答題 情況 for conio.h def ood 問題 sca 程序

題目:二柱子將做好的項目交給了老師,幾天後又得到了新的需求:

作業要求1、實現在線答題。

2、答題結束後,可以判斷對錯。

3、並將錯題的結果保存起來。

出現的問題:

1、對於系統的分類一開始沒有考慮全面,在經過一次一次的使用之後才使程序比較完善。

2、程序較長出現了思路斷裂的情況。

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <conio.h> #define N 10
typedef struct _ti {
int a, b;
int op;
int result;
int input;
int rw;
}ti; ti timu[N];
int fen;
int flag; int mulu()
{
int s;
while(1) {
printf("\t\t歡迎進入super考試系統\n\n");
printf("1)隨機出題\t\t\t\t");
printf("2)開始考試\n");
printf("3)試卷評分\t\t\t\t");
printf("4)顯示批改的試卷\n");
printf("5)退出系統\n\n");
printf("請做出選擇:");

scanf("%d", &s);
while(getchar() != ‘\n‘);

if(s < 1 || s > 5)
printf("選擇有誤!請重新輸入.\n");
else
break;
}
return s;
} void chuti()
{
int i, f;
printf("確認隨機出%d道題嗎?(y確認):", N);
if(getchar() != ‘y‘)
return;

for(i = 0, f = 1; i < N; f ? i++ : 0) {
timu[i].a = rand() % 100+1;
timu[i].b = rand() % 100+1;
timu[i].op = rand() % 4;
if(timu[i].b == 0 && timu[i].op == 3) {
f = 0;
continue;
}
else
f = 1;
switch(timu[i].op) {
case 0: timu[i].result = timu[i].a + timu[i].b;break;
case 1: timu[i].result = timu[i].a - timu[i].b;break;
case 2: timu[i].result = timu[i].a * timu[i].b;break;
case 3: timu[i].result = timu[i].a / timu[i].b;break;
}
}
printf("出題完畢!\n");
flag = 1;
}
void kaoshi()
{
int i, f, n;
char op[] = "+-*/";
if(!flag) {
printf("還未出題!\n");
return;
}
printf("確認開始練習最後一次出的題嗎?(y確認):");
if(getchar() != ‘y‘)
return;
fen = 0;
for(i = 0, f = 1; i < N; f ? ++i : 0) {
printf("題目%d: %d %c %d = ", i+1, timu[i].a, op[timu[i].op], timu[i].b);
if(!scanf("%d", &n)) {
printf("輸入有誤!請重試.\n");
f = 0;
} else {
timu[i].input = n;
timu[i].rw = (n == timu[i].result ? (fen += 10, 1) : 0);
f = 1;
}
}
printf("練習完畢!\n");
} void pinfen()
{
char* a[] = {"perfect!", "good", "還行啦", "囧rz"};
char** p;
int n;
p = a + 3;
n = fen / 10;

if(n >= 6)p--;
if(n >= 8)p--;
if(n == 10)p--;

printf("你上次測試的總分為 %s:%d分\n", *p, fen);
} void shijuan()
{
int i;
char op[] = "+-*/";
for(i = 0; i < N; ++i){
printf("%d %c %d = %d\t%s", timu[i].a, op[timu[i].op],
timu[i].b, timu[i].input, timu[i].rw ? "√": "×");
if(!timu[i].rw)
printf(" 正確答案: %d", timu[i].result);
putchar(‘\n‘);
}
} int main()
{
int i;
srand(time(0));
void (*f[])() = {chuti, kaoshi, pinfen, shijuan};
while((i = mulu()) != 5) {
f[i-1]();
printf("按任意鍵繼續...");
getch();
}
printf("Bye!");
return 0;
} 技術分享圖片
技術分享圖片技術分享圖片 總結,在進行人機交互的時候需要考慮到更多的情況,不只是邏輯上的問題還有使用者的感受。 技術分享圖片 技術分享圖片
技術分享圖片
技術分享圖片
技術分享圖片
技術分享圖片
技術分享圖片

又是二柱子的四則運算