![]() |
#2
rjsp2020-12-17 10:08
乱七八糟的
![]() #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <string.h> #include <time.h> int random( int level ) { return rand()%level+1; } int get_int_from_stdin( void ) { int result; int n = scanf("%d",&result); scanf( "%*[^\n]" ); if( n == 1 ) return result; if( feof(stdin) ) exit( 1 ); return -1; } bool add( int level ) { int a = random( level-1 ); int b = random( level-a ); printf( "%d + %d = ", a, b ); int answer = get_int_from_stdin(); if( answer == a+b ) return true; printf( " ------ 正确答案为:%d\n", a+b ); return false; } bool minus( int level ) { int a = random( level ); int b = random( a ); printf( "%d - %d = ", a, b ); int answer = get_int_from_stdin(); if( answer == a-b ) return true; printf( " ------ 正确答案为:%d\n", a-b ); return false; } bool multiplication( int level ) { int a = random( level/2 ); int b = random( level/a ); printf( "%d * %d = ", a, b ); int answer = get_int_from_stdin(); if( answer == a*b ) return true; printf( " ------ 正确答案为:%d\n", a*b ); return false; } bool division( int level ) { int a = random( level ); int b = random( level/a ); int c = a*b; printf( "%d / %d = ", c, a ); int answer = get_int_from_stdin(); if( answer == c/b ) return true; printf( " ------ 正确答案为:%d\n", c/b ); return false; } //////////////////////////////////////////// char get_char_from_stdin_condition( const char* tip, const char* condition ) { char input; for( ; ; ) { printf( "%s", tip ); int n = scanf(" %c",&input); scanf( "%*[^\n]" ); if( n != 1 ) exit( 1 ); if( strchr(condition,input) ) break; printf( "输入错误," ); } return input; } char get_int_from_stdin_condition( const char* tip, int low, int upper ) { int input; for( ; ; ) { printf( "%s", tip ); int n = scanf( "%d", &input ); scanf( "%*[^\n]" ); if( n!=1 && feof(stdin) ) exit( 1 ); if( n==1 && input>=low && input<=upper ) break; printf( "输入错误," ); } return input; } int main( void ) { srand( (unsigned)time(NULL) ); int total_correct=0, total_wrong=0; for( ; ; ) { char internal = get_char_from_stdin_condition( "请输入你需要进行的运算(+、-、*、/): ", "+-*/" ); int level = get_char_from_stdin_condition( "请输入你需要的难度(1=简单,2=难): ", "12" )=='1' ? 100:1000; int count = get_int_from_stdin_condition( "请输入需要练习的题数(100以内): ", 1, 99 ); int correct = 0; for( int i=0; i!=count; ++i ) { switch( internal ) { case '+': correct += add(level); break; case '-': correct += minus(level); break; case '*': correct += multiplication(level); break; case '/': correct += division(level); break; } } printf( "做对题数:%d, 做错题数:%d\n", correct, count-correct ); total_correct += correct; total_wrong += count-correct; printf( "是否继续?(是输入1): " ); char bcontinue; if( scanf(" %c",&bcontinue)!=1 || bcontinue!='1' ) break; scanf( "%*[^\n]" ); } printf( "此次总共对了%d道, 做错了%d道\n", total_correct, total_wrong ); } |
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int all=0,all0=0;
int random(int level) //random随机产生数 ,level为难度输入 1(简单)或2(难)
{
int result;
int k;
if (level==1) k=100;
if (level==2) k=1000;
result=rand()%k+1;
//printf("%d",result);
return result;
}
int add(int c,int k) //加法
{
int i,num1,num2,answer,op,count=0;
for (i=1;i<=k;i++)
{
if(c==1) op=100;
if(c==2) op=1000;
again1:
num1=random(c);
num2=random(c);
if(num1+num2>op) goto again1;
printf("%d+%d=",num1,num2);
scanf("%d",&answer);
if(answer==num1+num2)
{
printf("答案是正确的\n");
count++ ;
all++;
}
else
{
printf("errer!正确答案为:%d\n",num1+num2);
all0++;
}
}
return count;
}
int minus(int c,int k) //减法
{ int i,num1,num2,answer,temp,count=0;
for (i=1;i<=k;i++)
{
num1=random(c);
num2=random(c);
if(num1<num2)
{
temp=num1;
num1=num2;
num2=temp;
}
printf("%d-%d=",num1,num2);
scanf("%d",&answer);
if(answer==num1-num2)
{
printf("答案是正确的\n");
count++;
all++;
}
else
{
printf("errer!正确答案为:%d\n",num1-num2);
all0++;
}
}
return count;
}
int multiplication(int c,int k) //乘法
{ int i,num1,num2,answer,op,count=0;
for (i=1;i<=k;i++)
{ if(c==1) op=100;
if(c==2) op=1000;
again2:
num1=random(c);
num2=random(c);
if(num1*num2>op) goto again2;
printf("%d*%d=",num1,num2);
scanf("%d",&answer);
if(answer==num1*num2)
{
printf("答案是正确的\n");
count++;
all++;
}
else
{
printf("errer!正确答案为:%d\n",num1*num2);
all0++;
}
}
return count;
}
int division(int c,int k) //除法
{ int i,num1,num2,answer,count=0;
for (i=1;i<=k;i++)
{
loop1:
num1=random(c);
num2=random(c);
if(num1%num2==0)
{
printf("%d/%d=",num1,num2);
scanf("%d",&answer);
if(answer==num1/num2)
{
printf("答案是正确的\n");
count++;
all++;
}
else
{
printf("errer!正确答案为:%d\n",num1/num2);
all0++;
}
}
else goto loop1;
}
return count;
}
int main(void)
{
int P,k,num1,num2,answer,c,count; //k表示题数
int i;
char internal; //internal辨别运算种类
loop:
printf("请输入你需要进行的运算(+、-、*、/):");
scanf("%c",&internal);
getchar();
if(internal!='+'&&internal!='-'&&internal!='*'&&internal!='/')
{
system("cls");
printf("请输入正确的运算符!\n");
//internal=getchar();
goto loop;
}
loop5:
printf("请输入你需要难度输入 1(简单)或2(难):");
scanf(" %d",&c);
getchar();
if(c!=1&&c!=2)
{
printf("请输入正确的难度!\n");
//getchar();
goto loop5;
}
loop6:
printf("请输入需要练习的题数:");
scanf(" %d", &k);
//getchar();
if(k>0&&k<100)
{
//k=k;
getchar();
}
else
{
printf("请输入正确的题数!\n");
getchar();
goto loop6;
}
//printf("%c\n",internal);
srand(time(NULL));
switch (internal)
{
case '+':
count=add(c,k);
printf("做对题数:%d\t做错题数:%d\n",count,k-count);
break;
case '-':
count=minus(c,k);
printf("做对题数:%d\t做错题数:%d\n",count,k-count);
break;
case '*':
count=multiplication(c,k);
printf("做对题数:%d\t做错题数:%d\n",count,k-count);
break;
case '/':
count=division(c,k);
printf("做对题数:%d\t做错题数:%d\n",count,k-count);
break;
default:
printf("请输入正确的运算符!\n");
internal=getchar();
goto loop; //判断是不是加减乘除,若不是返回至errer函数
}
printf("是否继续?(是输入1,否输入0):");
scanf("%d",&P);
fflush(stdin);
//internal=getchar();
if(P==1)
{
system("cls");
goto loop;
}
printf("此次总共对了%d,做错了%d\n",all,all0);
return 0;
}