问一下,随机给数字、循环用多了会有什么后过?
小弟在说c 的课设,要编一个教小学生的算术器,里面没出一次题目都要用好几次rand() while 循环 ,结果经常在运行的时候弹出来 应用程序出错的提示。这种情况是逻辑不好使程序运行效率低下的问题吗?
求救! 求救! 求救! 求救!
----------------解决方案--------------------------------------------------------
根本原因不是多不多,是你自己写错了
----------------解决方案--------------------------------------------------------
----------------解决方案--------------------------------------------------------
回复 2# 冰镇柠檬汁儿 的帖子
- -!你说的写错了是逻辑上的错误吗?
语法是没有错误的,要不然跟本运行不了啊。
高手,急救了。。。
----------------解决方案--------------------------------------------------------
回复 5# liyanhong 的帖子
说话要经过大脑的吧?我费尽心思编出了程序,结果运行的时候老是出错,都运行不完,语法都正确,逻辑又想不出再怎么改进,发个帖子问以下自己的疑问还被说成是无病呻吟!
那你说什么才是真有病啊,高人?
----------------解决方案--------------------------------------------------------
请你把你写的程序复制上来 好吗?
----------------解决方案--------------------------------------------------------
最好还是把代码给出来
----------------解决方案--------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "keshe.h" /*自定义库函数*/
#define random(x) rand()%x
#define N 10
#define H 100
int yi;
int er;
int op;
int temp;
int answer;
struct record /*记录答题结果的结构体*/
{
float all;
float right;
float success_right;
float sucess_percent;
}rec={0,0,0,0.0};
struct mark /*统计分数的结构体*/
{
int one;
int two;
int three;
int four;
int five;
int score;
}mar={0,0,0,0,0};
void welcome(void) /*欢迎、提示界面*/
{
PR("*******************************************");
PR(DN);
PR("* 一 起 来 算 术 *");
PR(DN);
PR("*******************************************");
int test(int n) /*给出题目的函数,其返回值为正确答案*/
{
int che;
srand((unsigned)time (NULL));
yi=random(n)+1; /*给出一个1~n之间的随机数*/
er=random(n)+1; /*再给出一个1~n之间的随机数*/
op=random(4)+1; /*产生1~4之间的随机数来确定运算符号*/
switch (op)
{
case 1 :{answer=yi+er;PR(DD D1 DD D5 DN,yi,er);}break;
case 2 :{if (yi<er)
{temp=yi;yi=er;er=temp;}
answer=yi-er;
PR(DD D2 DD D5 DN,yi,er);
}break;
case 3 :{che=random(10)+1;answer=yi*che;PR(DD D3 DD D5 DN,yi,che);}break;
case 4 :{/*if (yi<er)
{temp=yi;yi=er;er=temp;}*/
while (yi%er!=0)
{
yi=random(n);
er=random(n);
}
answer=yi/er;
PR(DD D4 DD D5 DN,yi,er);
}break;
}
return answer;
}
void test_1(int n) /*算术函数,完成题目的输出,答案的输入及对答题情况、分数的统计*/
{
int input, rig, pp, i=1, ss;
while (i)//&&input!=1111)
{
ss=1;
rig=test(n);
PR("请输入答案: ");
SR(DD,&input);
if (input==rig)
{
PR("太棒了!继续努力哦!\n");
rec.right++; /*统计正确回答的个数*/
rec.success_right++; /*统计一次回答正确的个数*/
mar.five++;
i=0;
}
else
{
pp=0; /*记录分数用的计数器*/
while (ss)
{
PR("\n很遗憾,答错了,请再输入答案:\n");
SR(DD,&input);
if (input==rig)
{
PR("很好,回答正确!继续努力!\n");
ss=0;
rec.right++; /*统计正确的个数*/
pp++; /*自加完成分数的记录*/
i=0;
}
switch (pp) /*记录到统计分数的结构体中*/
{
case 1 :mar.four++;break;
case 2 :mar.three++;break;
case 3 :mar.two++;break;
case 4 :mar.one++;break;
default:break;
}
}
}
i=0;
rec.all++; /*统计题目的总数*/
}
}
void main ()
{
void welcome (void);
void test_1 (int);
int test (int n);
int i=1;
char ch;
welcome();
while (i<=3)
{
test_1(N);
i++;
}
rec.sucess_percent=rec.success_right/rec.all;
while (i<=10)
{
if (rec.sucess_percent>0.9)
test_1(H);
else
test_1(N);
rec.sucess_percent=rec.success_right/rec.all;
}
PR("题目总数 回答正确数 一次回答正确数 一次回答正确率\n");
PR("%5.0f %7.0f %15.0f %18c%.0f %10c%.0f",rec.all,rec.right,rec.success_right,'%',rec.sucess_percent*100);
mar.score=mar.five*5+mar.four*4+mar.three*3+mar.two*2+mar.one;
PR("\n您的分数为 %d: ",mar.score);
}
----------------解决方案--------------------------------------------------------
库函数
#define PR printf
#define SR scanf
#define DD "%d"
#define DF "%f"
#define DN "\n"
#define D1 "+"
#define D2 "-"
#define D3 "*"
#define D4 "/"
#define D5 "=?"
----------------解决方案--------------------------------------------------------
目前还没有写完,不过发上去的那些是可以运行的,而且好象一直在循环,我也没有找出哪里的逻辑出错了,只能说语法没有错误。
谢谢了。
----------------解决方案--------------------------------------------------------