当前位置: 代码迷 >> C语言 >> 问一下,随机给数字、循环用多了会有什么后过?
  详细解决方案

问一下,随机给数字、循环用多了会有什么后过?

热度:453   发布时间:2008-06-26 09:36:54.0
问一下,随机给数字、循环用多了会有什么后过?
小弟在说c 的课设,要编一个教小学生的算术器,里面没出一次题目都要用好几次rand() while 循环 ,结果经常在运行的时候弹出来 应用程序出错的提示。
  这种情况是逻辑不好使程序运行效率低下的问题吗?
  求救! 求救! 求救! 求救!
搜索更多相关的解决方案: 数字  随机  rand  算术  

----------------解决方案--------------------------------------------------------
根本原因不是多不多,是你自己写错了
----------------解决方案--------------------------------------------------------

----------------解决方案--------------------------------------------------------
回复 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 "=?"
----------------解决方案--------------------------------------------------------
目前还没有写完,不过发上去的那些是可以运行的,而且好象一直在循环,我也没有找出哪里的逻辑出错了,只能说语法没有错误。
谢谢了。
----------------解决方案--------------------------------------------------------
  相关解决方案