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

[原创]用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
jackrain
Rank: 1
等 级:新手上路
帖 子:182
专家分:0
注 册:2005-9-4
收藏
得分:0 

1、函数应该有返回类型,尽管有些编译器不对void类型要求,但是还是写上比较好。

2、在选择做题次数的时候,输出那一行printf("你要做%d次\n",number);应该是number[i]。还有下面判断的时候loop==number[i],而不是number。数组和数组中的元素要区分。

3、程序设计的不合理,繁琐,建议重新整合。


程序和身体一样,健壮,再健壮! 我爱C++
2005-09-06 09:09
jackrain
Rank: 1
等 级:新手上路
帖 子:182
专家分:0
注 册:2005-9-4
收藏
得分:0 

对了,还漏了一点,rightAnswer的值在每次做题前别忘了清0。

还有就是建议以后问问题写明你的算法思想、把调试的结果发出来、别只贴上代码,有时候看别人的代码真不如自己写一遍简单。


程序和身体一样,健壮,再健壮! 我爱C++
2005-09-06 09:13
liujianying
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2005-8-31
收藏
得分:0 
谢谢呢,但还是调式不成功啊,你能否再指点一下总么改好一些啊
2005-09-06 14:52
另糊葱
Rank: 1
等 级:新手上路
帖 子:69
专家分:0
注 册:2005-8-25
收藏
得分:0 
您们真厉害啊

我不丑,但是我也很温柔! QQ:79096247
2005-09-06 16:09
jszy
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2005-9-6
收藏
得分:0 
学习了

我是一只小菜鸟,想要飞却怎么也飞不高
2005-09-06 16:46
jackrain
Rank: 1
等 级:新手上路
帖 子:182
专家分:0
注 册:2005-9-4
收藏
得分:0 
以下是引用liujianying在2005-9-6 14:52:48的发言: 谢谢呢,但还是调式不成功啊,你能否再指点一下总么改好一些啊
把错误提示贴出来。

程序和身体一样,健壮,再健壮! 我爱C++
2005-09-06 17:14
liujianying
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2005-8-31
收藏
得分:0 
我已经根据"其实我是男的"改了这个程序
但是要做的题目显示不出来,不知是哪个地方错了,请高手指点指点
2005-09-06 17:32
redhart
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2005-7-23
收藏
得分:0 
真的好难啊
我可服了!!!
2005-09-06 17:40
jackrain
Rank: 1
等 级:新手上路
帖 子:182
专家分:0
注 册:2005-9-4
收藏
得分: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); }

} long ProduceRandom() { srand( (unsigned)time( NULL ) ); return rand(); } long BringRandom(long seed) { srand(seed); return rand(); } void 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[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(long first,long second,char oper) { printf("*******************************\n\n"); printf("%ld%c%ld=",first,oper,second); printf("\n\n*******************************\n"); } void OutputRightAnswer(long trueAnswer) { printf("*******************************\n\n"); printf("正确答案是%ld",trueAnswer); printf("\n\n*******************************\n"); } void 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); } } void BeginDo() { long userAnswer; int time; rightAnswer = 0; long firstRandomNumber; long secondRandomNumber; for(time=0;time<loop;time++) { firstRandomNumber=ProduceRandom(); secondRandomNumber=BringRandom(firstRandomNumber); Outputexpression(firstRandomNumber,secondRandomNumber,operation); userAnswer=AcceptUserInputChoice(); DealUserAnswer(firstRandomNumber,secondRandomNumber,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-9-6 18:23:24编辑过]


程序和身体一样,健壮,再健壮! 我爱C++
2005-09-06 18:21
快速回复:[求助]请高手找一下该程序的错误
数据加载中...
 
   



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

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