| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 846 人关注过本帖
标题:[求助]请高手找一下该程序的错误
取消只看楼主 加入收藏
liujianying
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2005-8-31
收藏
 问题点数:0 回复次数:5 
[求助]请高手找一下该程序的错误

[原创]用C语言写的数学测试软件/附源代码
小学生数学测试软件的编写,要求:
(1) 可选择题型(+,-,*);
(2) 可选择每次答题的个数;
(3) 随机生成两个数进行运算;
(4) 每次在输入答案后应判断对错,若答案错误,应给出正确答案;
(5) 最后给出做对题目的总个数。
以下是我写的源程序:
/*引用函数库*/
#include"stdio.h" /*由于尖括号在论坛显不出来,所以用双引号代替一下*/
#include "stdlib.h" /*由于尖括号在论坛显不出来,所以用双引号代替一下*/
#include"time.h" /*由于尖括号在论坛显不出来,所以用双引号代替一下*/
/*引用函数库结束*/
/*定义全局变量*/
char operation;/*进入相应模块的运算符*/
int loop;/*每次做题的次数*/
int rightAnswer;/*做题正确次数*/
int flag;/*函数调用出错标记为0表示正确,为1表示出错了*/
/*定义全局变量结束*/
/*定义函数*/
OutputProblemType()
{
printf("*******************************\n");
printf("请你选择一个类型做题\n");
printf("1\t做加法(+)的题\n");
printf("2\t做减法(-)的题\n");
printf("3\t做乘法(*)的题\n");
printf("*******************************\n");
}
int AcceptUserInputChoice()
{
int userInput;
fflush(stdin);
scanf("%d",&userInput);
return userInput;
}
CheckChoice(int i)
{
switch(i)
{
case 1: operation='+';break;
case 2: operation='-';break;
case 3: operation='*';break;
default : flag=1;
}
}
ComeInModule()
{
int i;

i=AcceptUserInputChoice();

flag=0;
CheckChoice(i);
while(flag)
{
printf("*******************************\n\n");

printf("你刚才输入不合要求,请重新输入");
printf("\n\n*******************************\n");
i=AcceptUserInputChoice();

flag=0;
CheckChoice(i);
}

}
long ProduceRandom()
{
srand( (unsigned)time( NULL ) );
return rand();
}
long BringRandom(long seed)
{
srand(seed);
return rand();
}
OutputDoNumber()
{
int number[10]={1,4,6,8,10,12,16,20,22,26};
int i;
printf("*******************************\n");
printf("请你选择你做题次数\n");
for(i=0;i<10;i++)
{
printf("你要做%d次\n",number);
}

printf("*******************************\n");
loop=AcceptUserInputChoice();
flag=1;
for(i=0;i<10;i++)
{
if(loop==number)
{
flag=0;
break;
}
}
while(flag)
{
printf("*******************************\n\n");
printf("你刚才输入不合要求,请重新输入");
printf("\n\n*******************************\n");
loop=AcceptUserInputChoice();

flag=1;
for(i=0;i<10;i++)
{
if(loop==number)
{
flag=0;
break;
}
}
}
}
Outputexpression(long first,long second,char oper)
{
printf("*******************************\n\n");
printf("%ld%c%ld=",first,oper,second);
printf("\n\n*******************************\n");
}
OutputRightAnswer(long trueAnswer)
{
printf("*******************************\n\n");
printf("正确答案是%ld",trueAnswer);
printf("\n\n*******************************\n");
}
DealUserAnswer(long first,long second,char oper,long answer)
{
long trueAnswer;
switch(oper)
{
case '+':trueAnswer=first+second;break;
case '-':trueAnswer=first-second;break;
case '*':trueAnswer=first*second;break;
}
if(trueAnswer==answer)
{
rightAnswer++;
}
else
{
OutputRightAnswer(trueAnswer);
}
}
BeginDo()
{
long userAnswer;
int time;

long firstRandomNumber;
long secondRandomNumber;
for(time=0;time {
firstRandomNumber=ProduceRandom();
secondRandomNumber=BringRandom(firstRandomNumber);
Outputexpression(firstRandomNumber,secondRandomNumber,operation);
userAnswer=AcceptUserInputChoice();
DealUserAnswer(firstRandomNumber,secondRandomNumber,operation,userAnswer);
}
)
EndDoOutRightNumber()
{
printf("*******************************\n");
printf("你做对了%d题\n",rightAnswer);
}
int IsOver()
{
printf("继续输入其它\n结束输入0\n");
printf("*******************************\n");
return AcceptUserInputChoice();
}
/*定义函数结束*/
/*程序开始处*/
main()
{
do
{
OutputProblemType();/*输出题目类型供用户选择*/
ComeInModule();/*根据用户的输入进入相应的模块*/
OutputDoNumber();/*输出每次做题目的次数供用户选择*/
BeginDo();/*开始做题*/
EndDoOutRightNumber();/*做题目输出做对的个数*/
}while(IsOver());/*是否结束程序*/
}
/*程序结束*/
搜索更多相关主题的帖子: 数学 源代码 
2005-09-05 18:01
liujianying
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2005-8-31
收藏
得分:0 
谢谢呢,但还是调式不成功啊,你能否再指点一下总么改好一些啊
2005-09-06 14:52
liujianying
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2005-8-31
收藏
得分:0 
我已经根据"其实我是男的"改了这个程序
但是要做的题目显示不出来,不知是哪个地方错了,请高手指点指点
2005-09-06 17:32
liujianying
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2005-8-31
收藏
得分:0 
谢谢哦,能否告诉我,在这个程序里面总么才能使提供的题目变成三个数运算,比如(3+4)+5=?
2005-09-07 17:39
liujianying
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2005-8-31
收藏
得分:0 
你看一下我发给你的邮件
2005-09-07 17:56
liujianying
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2005-8-31
收藏
得分:0 
我改了这个程序,可以是三个数运算,可得出的结果是错误的,不知能否指出其中的错误?下面是我改了的程序:

/*引用函数库*/

#include<stdio.h>

#include <stdlib.h>

#include<time.h>

/*引用函数库结束*/

/*定义全局变量*/

char operation;/*进入相应模块的运算符*/

int loop;/*每次做题的次数*/

int rightAnswer;/*做题正确次数*/

int flag;/*函数调用出错标记为0表示正确,为1表示出错了*/

/*定义全局变量结束*/

/*定义函数*/

void OutputProblemType()

{

printf("*******************************\n");

printf("请你选择一个类型做题\n");

printf("1\t做加法(+)的题\n");

printf("2\t做减法(-)的题\n");

printf("3\t做乘法(*)的题\n");

printf("*******************************\n");

}

int AcceptUserInputChoice()

{

int userInput;

fflush(stdin);

scanf("%d",&userInput);

return userInput;

}

void CheckChoice(int i)

{

switch(i)

{

case 1: operation='+';break;

case 2: operation='-';break;

case 3: operation='*';break;

default : flag=1;

}

}

void ComeInModule()

{

int i;

i=AcceptUserInputChoice();

flag=0;

CheckChoice(i);

while(flag)

{

printf("*******************************\n\n");

printf("你刚才输入不合要求,请重新输入");

printf("\n\n*******************************\n");

i=AcceptUserInputChoice();

flag=0;

CheckChoice(i);

}

}

int ProduceRandom()

{

srand( (unsigned)time( NULL ) );

return rand();

}

int BringRandom(int seed)

{

srand(seed);

return rand();

}

int HomeRandom(int seed)

{

srand(seed);

return rand();

}

void OutputDoNumber()

{

int number[10]={1,3,5,8,10,15,18,20,30,50};

int i;

printf("*******************************\n");

printf("请你选择你做题次数\n");

for(i=0;i<10;i++)

{

printf("你要做%d次\n",number[i]);

}

printf("*******************************\n");

loop=AcceptUserInputChoice();

flag=1;

for(i=0;i<10;i++)

{

if(loop==number[i])

{

flag=0;

break;

}

}

while(flag)

{

printf("*******************************\n\n");

printf("你刚才输入不合要求,请重新输入");

printf("\n\n*******************************\n");

loop=AcceptUserInputChoice();

flag=1;

for(i=0;i<10;i++)

{

if(loop==number[i])

{

flag=0;

break;

}

}

}

}

void Outputexpression(int first,int second,int third,char oper)

{

printf("*******************************\n\n");

printf("%d%c%d%c%d=",first,oper,second,oper,third);

printf("\n\n*******************************\n");

}

void OutputRightAnswer(int trueAnswer)

{

printf("*******************************\n\n");

printf("正确答案是%d",trueAnswer);

printf("\n\n*******************************\n");

}

void DealUserAnswer(int first,int second,int third,char oper,int answer)

{

int trueAnswer;

switch(oper)

{

case '+':trueAnswer=first+second+third;break;

case '-':trueAnswer=first-second-third;break;

case '*':trueAnswer=first*second*third;break;

}

if(trueAnswer==answer)

{

rightAnswer++;

}

else

{

OutputRightAnswer(trueAnswer);

}

}

void BeginDo()

{

int userAnswer;

int time;

int firstRandomNumber;

int secondRandomNumber;

int thirdRandomNumber;

for(time=0;time<loop;time++)

{

firstRandomNumber=ProduceRandom();

secondRandomNumber=BringRandom(firstRandomNumber);

thirdRandomNumber=HomeRandom(secondRandomNumber);

Outputexpression(firstRandomNumber,secondRandomNumber,thirdRandomNumber,operation);

userAnswer=AcceptUserInputChoice();

DealUserAnswer(firstRandomNumber,secondRandomNumber,thirdRandomNumber,operation,userAnswer);

}

}

void EndDoOutRightNumber()

{

printf("*******************************\n");

printf("你做对了%d题\n",rightAnswer);

}

int IsOver()

{

printf("继续输入其它\n结束输入0\n");

printf("*******************************\n");

return AcceptUserInputChoice();

}

/*定义函数结束*/

/*程序开始处*/

main()

{

do

{

OutputProblemType();/*输出题目类型供用户选择*/

ComeInModule();/*根据用户的输入进入相应的模块*/

OutputDoNumber();/*输出每次做题目的次数供用户选择*/

BeginDo();/*开始做题*/

EndDoOutRightNumber();/*做题目输出做对的个数*/

}while(IsOver());/*是否结束程序*/

}

/*程序结束*/

2005-09-08 15:35
快速回复:[求助]请高手找一下该程序的错误
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019060 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved