|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 YiMingC 于 2019-4-26 14:44 编辑
代码要求是:
1、程序首先产生两个1~10之间的正整数,在屏幕上打印出问题。例如:6*7=?然后输入并检查答案。
2、回答错误时最多给三次机会。
3、随机产生10道四则运算题,输出回答正确率。
找到错因了,是switch那的 } 丢到太后面了...但为什么不进行switch里的flag2重置也可以执行if(flag2)的代码呢...
- #include <stdio.h>
- #include <time.h>
- #include <stdlib.h>
- int Randnum();
- int Judge(int answer);
- char Symbol(int div1);
- int answer,div1,div2,flag = 0,flag2 = 0,div1,div2,__bool;
- time_t t;
- double rate=100.0;
- char sym;
- int Randnum()
- {
- srand((unsigned)time(&t));
- div1 = rand()%10;
- div2 = rand()%10;
- if (div1==0)
- {
- div1++;
- }
- if(div2==0)
- {
- div2++;
- }
- }
- int Judge(answer)
- {
- start:
- if (answer==0||answer)
- {
- switch(sym)
- {
- case '+':if(answer == div1+div2){flag2 = 1;};break;
- case '-':if(answer == div1-div2){flag2 = 1;};break;
- case '*':if(answer == div1*div2){flag2 = 1;};break;
- case '/':if(answer == div1/div2){flag2 = 1;};break;
- if (flag2)
- {
- printf("回答正确!\n");
- return 1;
- }
- else
- {
- printf("回答错误!\n");
- return 0;
- }
- }
- }
- else
- {
- printf("输入不合法!请重新输入:");
- getchar();
- scanf("%d",&answer);
- goto start;
- }
- }
- char Symbol(div1)
- {
- if (div1>=1&&div1<2)
- {
- return '+';
- }
- else if (div1>=2&&div1<4)
- {
- return '-';
- }
- else if (div1>=4&&div1<6)
- {
- return '*';
- }
- else
- {
- return '/';
- }
- }
- main()
- {
- Randnum();
- sym = Symbol(div1);
- do{
- printf("请计算:%d %c %d = ",div1,sym,div2);
- if(sym == '/')
- {
- putchar('\n');
- printf("若除不尽,请舍弃小数位:");
- }
- scanf("%d",&answer);
- __bool=Judge(answer);
- flag++;
- if (flag == 3&&__bool == 0)
- {
- printf("机会用尽!\n");
- rate = 0;
- break;
- }
- }while(!__bool);
- rate /=flag;
- printf("您的正确率为:%.2f %%\n",rate);
- }
复制代码 |
|