文章出處
文章列表
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int n;//記錄輸入的題目個數
int a,b,c,da;//a,b分別代表第一,第二操作數,c代表得數,da代表輸入的答案
float score=0;//記錄總分數
float j,k,L;//分別計算答對的分數
float lv;//計算答對的概率
//進行加法運算
void jia()
{
int i;
j=k=0;
lv=0;
printf("\t\t\n歡迎使用,以下是加法運算\n\n\n");
printf("請輸入題目數:");
fflush( stdin );
scanf("%d",&n);
for(i=0;i<n;i++)
{
a=rand()%100;
b=rand()%100;
c=a+b;
printf("\t\t\t\t%d+%d=?\n",a,b);
printf("請輸入你的答案(答對一題5分):");
fflush( stdin );
scanf("%d",&da);
if(da==c) //判斷答案是否正確
{
printf("\n恭喜你,答對了!\n");
j=j+5;
}
else
{
printf("\n抱歉,你答錯了!你還有一次機會\n");
printf("\t\t\t\t%d+%d=?\n",a,b);
printf("請輸入你的答案:");
fflush( stdin );
scanf("%d",&da);
if(da==c)
{
printf("\n恭喜你,答對了!\n");
k=k+5;
}
else printf("\n抱歉,你又答錯了,正確答案是:%d+%d=%d\n",a,b,c);
}
}
score=j+k;
lv=(score/(5*n))*100;
printf("\t\t\t\t加法運算中所得的分數為%.f分\n\t\t\t\t答對概率為百分之%.2f\n",score,lv);
}
//進行減法運算
void jian()
{
int i,temp;//temp是中間變量
j=k=0;
lv=0;
printf("\t\t\n歡迎使用,以下是減法運算\n\n\n");
printf("請輸入題目數:");
fflush( stdin );
scanf("%d",&n);
for(i=0;i<n;i++)
{
a=rand()%100;
b=rand()%100;
if(a<b)//保證得出的數不是負數
{
temp=a;
a=b;
b=temp;
}
c=a-b;
printf("\t\t\t\t%d-%d=?\n",a,b);
printf("請輸入你的答案:");
fflush( stdin );
scanf("%d",&da);
if(da==c)
{
printf("\n恭喜你,答對了!\n");
j=j+5;
}
else
{
printf("\n抱歉,你答錯了,你還有一次機會\n");
printf("\t\t\t\t%d-%d=?\n",a,b);
printf("請輸入你的答案:");
fflush( stdin );
scanf("%d",&da);
if(da==c)
{
printf("\n恭喜你,答對了!\n");
k=k+5;
}
else printf("\n抱歉,你又答錯了,正確答案為:%d-%d=%d\n",a,b,c);
}
}
score=(j+k);
lv=(score/(5*n))*100;
printf("\t\t\t\t減法運算中所得的分數為%.f分\n\t\t\t\t答對概率為百分之%.2f\n",score,lv);
}
//進行乘法運算
void chen()
{
int i;
j=k=0;
lv=0;
printf("\t\t\n歡迎使用,以下是乘法題\n\n");
printf("\n請輸入題目數:");
fflush( stdin );
scanf("%d",&n);
for(i=0;i<n;i++)
{
a=rand()%100;
b=rand()%100;
c=a*b;
printf("\t\t\t\t%d*%d=?\n",a,b);
printf("請輸入答案:");
fflush( stdin );
scanf("%d",&da);
if(da==c)
{
printf("\n恭喜你,答對了!\n");
j=j+5;
}
else
{
printf("\n抱歉,你答錯了,你還有一次機會!\n");
printf("\t\t\t\t%d*%d=?\n",a,b);
printf("請輸入答案:");
fflush( stdin );
scanf("%d",&da);
if(da==c)
{
printf("\n恭喜你,答對了!\n");
k=k+5;
}
else printf("\n抱歉,又答錯了,正確答案為:%d*%d=%d\n",a,b,c);
}
}
score=j+k;
lv=(score/(5*n))*100;
printf("\t\t\t\t乘法運算中所得的分數為%.f分\n\t\t\t\t答對概率為百分之%.2f\n",score,lv);
}
//進行除法運算
void chu()
{
int i;
char dn;//用以保存除法運算符
float an;//用以保存除法運算得出的答案
int fenzi,fenmu;//fenzi是分子,fenmu是分母
j=k=L=0;
lv=0;
printf("\t\t\n歡迎使用,以下是除法題\n\n");
printf("請輸入題數:");
fflush( stdin );
scanf("%d",&n);
for(i=0;i<n;i++)
{
a=rand()%100;
b=rand()%99+1;//使得隨機出現的數不會有0,保證了除數不會出現0情況,即不會出現無意義的情況
c=a/b;
if(a%b==0) //判斷數能否除盡,若a對b求余為0,則說明除得盡,以整數形式輸入,否則則為除不盡,提示以分數輸入
{
printf("\t\t\t\t%d/%d=?\n",a,b);
printf("\n請輸入你的答案:");
fflush( stdin );
scanf("%f",&an);
if(an==c)
{
printf("恭喜你,答對了!\n");
j=j+5;
}
else
{
printf("抱歉,你答錯了,你還有一次機會!\n");
printf("\t\t\t\t%d/%d=?\n",a,b);
printf("\n請輸入你的答案:");
fflush( stdin );
scanf("%f",&an);
if(an==c)
{
printf("恭喜你,答對了!\n");
k=k+5;
}
else printf("抱歉,你又答錯了,正確答案為:%d/%d=%d\n",a,b,c);
}
}
else
{
//dn='/';//dn保存除法運算符
printf("\t\t\t\t%d/%d=?\n",a,b);
printf("\n請輸入你的答案(請以分數形式輸入)\n");
printf("\n請輸入分子:");
fflush( stdin );
scanf("%d",&fenzi);
printf("請輸入分母:");
fflush( stdin );
scanf("%d",&fenmu);
if(fenzi/fenmu==a/b)
{
printf("恭喜你,答對了!\n");
L=L+5;
}
else
printf("抱歉,你答錯了,正確答案為:%d/%d=%d\n",a,b,c);
}
}
score=(j+k+L);
lv=(score/(5*n))*100;
printf("\t\t\t\t\t除法運算中所得的分數為%.f分\n\t\t\t\t\t中獎率為百分之%.2f\n",score,lv);
}
int selectmenu()
{
int choice;
do
{
printf("\t1:加法運算\n");
printf("\t2:減法運算\n");
printf("\t3:乘法運算\n");
printf("\t4:除法運算\n");
printf("\t5:謝謝使用\n");
printf("請選擇(1-5):");
fflush( stdin );
scanf("%d",&choice);
while(choice!=1&&choice!=2&&choice!=3&&choice!=4&&choice!=5)
{
printf("不存在該選項,請重新選擇(1-5):");
fflush(stdin); //清空輸入緩存區,否則字符會一直留在緩存區,使程序進入一個死循環
scanf("%d",&choice);
}
}while((choice<0)||(choice>6));
system("cls"); //清楚屏幕
return choice;
}
void main()
{
int choice;
srand((unsigned)time(NULL));//隨機產生0-99之間的隨機數
while(1)
{
switch(choice)
{
case 1:
jia();
break;
case 2:
jian();
break;
case 3:
chen();
break;
case 4:
chu();
break;
case 5:
printf("謝謝使用");
exit(0);
}
choice=selectmenu();
}
}
#include<stdlib.h>
#include<time.h>
int n;//記錄輸入的題目個數
int a,b,c,da;//a,b分別代表第一,第二操作數,c代表得數,da代表輸入的答案
float score=0;//記錄總分數
float j,k,L;//分別計算答對的分數
float lv;//計算答對的概率
//進行加法運算
void jia()
{
int i;
j=k=0;
lv=0;
printf("\t\t\n歡迎使用,以下是加法運算\n\n\n");
printf("請輸入題目數:");
fflush( stdin );
scanf("%d",&n);
for(i=0;i<n;i++)
{
a=rand()%100;
b=rand()%100;
c=a+b;
printf("\t\t\t\t%d+%d=?\n",a,b);
printf("請輸入你的答案(答對一題5分):");
fflush( stdin );
scanf("%d",&da);
if(da==c) //判斷答案是否正確
{
printf("\n恭喜你,答對了!\n");
j=j+5;
}
else
{
printf("\n抱歉,你答錯了!你還有一次機會\n");
printf("\t\t\t\t%d+%d=?\n",a,b);
printf("請輸入你的答案:");
fflush( stdin );
scanf("%d",&da);
if(da==c)
{
printf("\n恭喜你,答對了!\n");
k=k+5;
}
else printf("\n抱歉,你又答錯了,正確答案是:%d+%d=%d\n",a,b,c);
}
}
score=j+k;
lv=(score/(5*n))*100;
printf("\t\t\t\t加法運算中所得的分數為%.f分\n\t\t\t\t答對概率為百分之%.2f\n",score,lv);
}
//進行減法運算
void jian()
{
int i,temp;//temp是中間變量
j=k=0;
lv=0;
printf("\t\t\n歡迎使用,以下是減法運算\n\n\n");
printf("請輸入題目數:");
fflush( stdin );
scanf("%d",&n);
for(i=0;i<n;i++)
{
a=rand()%100;
b=rand()%100;
if(a<b)//保證得出的數不是負數
{
temp=a;
a=b;
b=temp;
}
c=a-b;
printf("\t\t\t\t%d-%d=?\n",a,b);
printf("請輸入你的答案:");
fflush( stdin );
scanf("%d",&da);
if(da==c)
{
printf("\n恭喜你,答對了!\n");
j=j+5;
}
else
{
printf("\n抱歉,你答錯了,你還有一次機會\n");
printf("\t\t\t\t%d-%d=?\n",a,b);
printf("請輸入你的答案:");
fflush( stdin );
scanf("%d",&da);
if(da==c)
{
printf("\n恭喜你,答對了!\n");
k=k+5;
}
else printf("\n抱歉,你又答錯了,正確答案為:%d-%d=%d\n",a,b,c);
}
}
score=(j+k);
lv=(score/(5*n))*100;
printf("\t\t\t\t減法運算中所得的分數為%.f分\n\t\t\t\t答對概率為百分之%.2f\n",score,lv);
}
//進行乘法運算
void chen()
{
int i;
j=k=0;
lv=0;
printf("\t\t\n歡迎使用,以下是乘法題\n\n");
printf("\n請輸入題目數:");
fflush( stdin );
scanf("%d",&n);
for(i=0;i<n;i++)
{
a=rand()%100;
b=rand()%100;
c=a*b;
printf("\t\t\t\t%d*%d=?\n",a,b);
printf("請輸入答案:");
fflush( stdin );
scanf("%d",&da);
if(da==c)
{
printf("\n恭喜你,答對了!\n");
j=j+5;
}
else
{
printf("\n抱歉,你答錯了,你還有一次機會!\n");
printf("\t\t\t\t%d*%d=?\n",a,b);
printf("請輸入答案:");
fflush( stdin );
scanf("%d",&da);
if(da==c)
{
printf("\n恭喜你,答對了!\n");
k=k+5;
}
else printf("\n抱歉,又答錯了,正確答案為:%d*%d=%d\n",a,b,c);
}
}
score=j+k;
lv=(score/(5*n))*100;
printf("\t\t\t\t乘法運算中所得的分數為%.f分\n\t\t\t\t答對概率為百分之%.2f\n",score,lv);
}
//進行除法運算
void chu()
{
int i;
char dn;//用以保存除法運算符
float an;//用以保存除法運算得出的答案
int fenzi,fenmu;//fenzi是分子,fenmu是分母
j=k=L=0;
lv=0;
printf("\t\t\n歡迎使用,以下是除法題\n\n");
printf("請輸入題數:");
fflush( stdin );
scanf("%d",&n);
for(i=0;i<n;i++)
{
a=rand()%100;
b=rand()%99+1;//使得隨機出現的數不會有0,保證了除數不會出現0情況,即不會出現無意義的情況
c=a/b;
if(a%b==0) //判斷數能否除盡,若a對b求余為0,則說明除得盡,以整數形式輸入,否則則為除不盡,提示以分數輸入
{
printf("\t\t\t\t%d/%d=?\n",a,b);
printf("\n請輸入你的答案:");
fflush( stdin );
scanf("%f",&an);
if(an==c)
{
printf("恭喜你,答對了!\n");
j=j+5;
}
else
{
printf("抱歉,你答錯了,你還有一次機會!\n");
printf("\t\t\t\t%d/%d=?\n",a,b);
printf("\n請輸入你的答案:");
fflush( stdin );
scanf("%f",&an);
if(an==c)
{
printf("恭喜你,答對了!\n");
k=k+5;
}
else printf("抱歉,你又答錯了,正確答案為:%d/%d=%d\n",a,b,c);
}
}
else
{
//dn='/';//dn保存除法運算符
printf("\t\t\t\t%d/%d=?\n",a,b);
printf("\n請輸入你的答案(請以分數形式輸入)\n");
printf("\n請輸入分子:");
fflush( stdin );
scanf("%d",&fenzi);
printf("請輸入分母:");
fflush( stdin );
scanf("%d",&fenmu);
if(fenzi/fenmu==a/b)
{
printf("恭喜你,答對了!\n");
L=L+5;
}
else
printf("抱歉,你答錯了,正確答案為:%d/%d=%d\n",a,b,c);
}
}
score=(j+k+L);
lv=(score/(5*n))*100;
printf("\t\t\t\t\t除法運算中所得的分數為%.f分\n\t\t\t\t\t中獎率為百分之%.2f\n",score,lv);
}
int selectmenu()
{
int choice;
do
{
printf("\t1:加法運算\n");
printf("\t2:減法運算\n");
printf("\t3:乘法運算\n");
printf("\t4:除法運算\n");
printf("\t5:謝謝使用\n");
printf("請選擇(1-5):");
fflush( stdin );
scanf("%d",&choice);
while(choice!=1&&choice!=2&&choice!=3&&choice!=4&&choice!=5)
{
printf("不存在該選項,請重新選擇(1-5):");
fflush(stdin); //清空輸入緩存區,否則字符會一直留在緩存區,使程序進入一個死循環
scanf("%d",&choice);
}
}while((choice<0)||(choice>6));
system("cls"); //清楚屏幕
return choice;
}
void main()
{
int choice;
srand((unsigned)time(NULL));//隨機產生0-99之間的隨機數
while(1)
{
switch(choice)
{
case 1:
jia();
break;
case 2:
jian();
break;
case 3:
chen();
break;
case 4:
chu();
break;
case 5:
printf("謝謝使用");
exit(0);
}
choice=selectmenu();
}
}
結果:
總結:
1、解決了在菜單選擇中如果輸入的是字符的時候會提示出錯,用的是fflush()函數,由于要清除的是存在緩沖區內的字符,因此用fflush(stdin),
stdin就是標準輸入,一般就是指鍵盤輸入到緩沖區里的東西,scanf()函數接收輸入數據時,遇以下情況結束一個數據的輸入:
① 遇空格、“回車”、“跳格”鍵;
② 遇寬度結束;
③ 遇非法輸入;
scanf()函數應該只是掃描stdin流,這個殘存信息是在stdin中 解決就要在scanf()函數之后加個fflush(stdin)。
2、解決了上一回沒有解決的問題:當出現結果除不盡的情況時,用戶輸入的數沒有以分數形式輸入時,不知如何設置提示輸入錯誤,嘗試用while語句來判斷時,如果輸入整型,無論結果是否對都會提示對了
解決辦法:將分數分開來輸入,依次提示輸入分子與分母。
文章列表
全站熱搜