新手c语言问题求助!!写一个程序帮助出数学题

qq_33746752 2017-07-01 03:19:11
新手c语言问题求助!!写一个程序帮助出数学题
帮小学生出题练习算数的程序,出十道题,加减乘除都有,要求结果在一百以内。
问题:有的时候,程序运行中间会出现已停止工作的问题,求问怎么改进!!

程序代码:
#include <stdio.h>
#include <ctype.h>
#include <time.h>
//#include <stdbool.h>
#include <stdlib.h>

#include <windows.h>


#define IDNO_LENGTH 6
#define CALC_KIND 4
#define CALC_NUM 10

bool checkNo(char idNo[]);
char getSignal();
int getResult(int,int,char);
void takeTest();

//main函数
int main()
{
int choose;
printf("Please input your four digit ID no(begin with two letters):");
char idNo[6];
int i;
do
{
for(i=0;i<6;i++)
{
scanf("%c",&idNo[i]);
}
} while(checkNo(idNo) == false);
do
{
printf("1.Start a test\t2.Check score\t3.Exitb\n");
do
{
printf("选择:");
scanf("%d", &choose);
//fflush(stdin);
} while(choose != 1 && choose !=2 && choose!=3);

if(choose==1)
{
takeTest();
}else if(choose==2)
{
FILE *fp;
int ch;
if((fp=fopen("score.txt","r+"))==NULL)
{
printf("\n你还没做过题目测试");
getchar();
exit(1);
}
ch = fgetc(fp);
while(ch!=EOF)
{
putchar(ch);
ch = fgetc(fp);
}
fclose(fp);
printf("\n");
}
else
{
break;
}

}while(choose==1||choose==2);

}

//获取随机运算符
char getSignal()
{
char signal[CALC_KIND]={'+','-','*','/'};
srand((unsigned)time(NULL));
return signal[rand()%4];
}

//获取随机数
int get_random(void)
{
int i;
i=rand() % 100;
return (i);
}


//运算
int getResult(int num1,int num2,char signal)
{
float res;
switch(signal)
{
case '+':
res=num1+num2;break;
case '-':
res=num1-num2;break;
case '*':
res=num1*num2;break;
case '/':
res=num1/num2;break;
default:
res=0;
printf("运算符不符合规则\n");
}
return res;
}


//列出10道题
void takeTest()
{
printf("开始答题,每道题10分,总共100分\n");
clock_t startTime;
startTime=clock();
int index;
int res;
int giveRes;
int l,k,h;
int num1;
int num2;
int score=0;
char signal;
for(index=0;index<CALC_NUM;index++)
{
signal=getSignal();

srand((unsigned)time(NULL));
if(signal=='+')
{
num1=get_random();
num2=rand()%(100-num1);

}
if(signal=='-')
{
num1=get_random();
num2=rand()%num1;
}
if(signal=='*')
{
num1=rand()%50;
num2=rand()%(100/num1);
}
if(signal=='/')
{
do
{
num1=get_random();
num2=rand()%num1;
while(num2==0)
num2=rand()%num1;
int c;
c=num1/num2;
if(num2*c==num1) h=1;
else h=0;
}while(h==0);
}

printf("%d%c%d=",num1,signal,num2);
scanf("%d", &giveRes);
//fflush(stdin);
if(getResult(num1,num2,signal)==giveRes)
{
printf("correct\n");
score+=10;
}
else
{
printf("wrong\n");
}
}
FILE *fp=fopen("score.txt","w");
fprintf(fp,"分数为%d",score);
fclose(fp);
printf("解10道题用了%lf秒\n",(double)(clock()- startTime)/CLOCKS_PER_SEC);
}

//检测idNo是否合规则,合规则返回true
bool checkNo(char idNo[])
{
int index;
bool flag;
flag=true;
for(index=0;index<6;index++)
{
if(index<2)
{
if(idNo[index]<65||idNo[index]>90) flag=false;
}
else
{
if(!isdigit(idNo[index])) flag=false;

}
}
if(flag==false) printf("ID no 不符合规则,重新输入:");
if(flag==false) getchar();
return flag;
}
...全文
217 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ooolinux 2017-07-01
  • 打赏
  • 举报
回复
刚好写过,仅供参考: C++ Builder写的《ZEC 四则运算练习程序》海底海星情景 http://blog.163.com/tab_98/blog/static/1192409720174615242948/ 关于C++ Builder: 初学者学习C++ Builder第一个程序(模拟聊天室),经典! http://blog.163.com/tab_98/blog/static/11924097201693033057497/ C++ Builder绘图示例(模拟时钟) http://blog.163.com/tab_98/blog/static/11924097201611324819376/ 从C语言的菜单界面管理系统到C++ Builder的图形用户界面,一个简单的电话簿Demo例子 http://blog.163.com/tab_98/blog/static/1192409720158673337998/
赵4老师 2017-07-01
  • 打赏
  • 举报
回复
仅供参考:
//运用C语言开发一个“小学生算术四则运算测试系统”。该系统是让计算机充当一位给小学生布置作业的算术老师,为学生出题并阅卷。该系统要求实现下列功能:
//①为小学生出题(分别进行+、-、*、/等不同运算)。
//②学生做题后,进行评阅。学生每做一题后,评阅给出“答题正确,很好”或“答题错误,重做”等信息。
//③加、减、乘、除运算功能可以自由选择实现。
//④运算数值可控制在两位数的四则运算范围内。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int c,a,b,r,ri;
void main() {
    srand( (unsigned)time( NULL ) );
    system("cls");
    printf("小学生算术四则运算测试系统\n");
    while (1) {
        printf("1加法 2减法 3乘法 4除法 0退出:");fflush(stdout);
        rewind(stdin);
        scanf("%d",&c);
        if (0==c) break;
        switch (c) {
        case 1:
            a=rand()%100;
            b=rand()%100;
            r=a+b;
            while (1) {
                printf("%d+%d=?",a,b);fflush(stdout);
                rewind(stdin);
                scanf("%d",&ri);
                if (ri==r) {
                    printf("答题正确,很好!\n");
                    break;
                } else {
                    printf("答题错误,请重做。\n");
                }
            }
        break;
        case 2:
            a=1+rand()%99;
            b=rand()%a;
            r=a-b;
            while (1) {
                printf("%d-%d=?",a,b);fflush(stdout);
                rewind(stdin);
                scanf("%d",&ri);
                if (ri==r) {
                    printf("答题正确,很好!\n");
                    break;
                } else {
                    printf("答题错误,请重做。\n");
                }
            }
        break;
        case 3:
            a=rand()%99;
            b=rand()%99;
            r=a*b;
            while (1) {
                printf("%d*%d=?",a,b);fflush(stdout);
                rewind(stdin);
                scanf("%d",&ri);
                if (ri==r) {
                    printf("答题正确,很好!\n");
                    break;
                } else {
                    printf("答题错误,请重做。\n");
                }
            }
        break;
        case 4:
            a=2+rand()%998;
            b=1+rand()%(a/2);
            while (1) {
                if (0==a%b) break;
                b--;
            }
            r=a/b;
            while (1) {
                printf("%d/%d=?",a,b);fflush(stdout);
                rewind(stdin);
                scanf("%d",&ri);
                if (ri==r) {
                    printf("答题正确,很好!\n");
                    break;
                } else {
                    printf("答题错误,请重做。\n");
                }
            }
        break;
        }
    }
}

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧