| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1691 人关注过本帖
标题:问一下,随机给数字、循环用多了会有什么后过?
取消只看楼主 加入收藏
gao136536
Rank: 1
等 级:新手上路
帖 子:51
专家分:0
注 册:2008-6-24
结帖率:100%
收藏
 问题点数:0 回复次数:7 
问一下,随机给数字、循环用多了会有什么后过?
小弟在说c 的课设,要编一个教小学生的算术器,里面没出一次题目都要用好几次rand() while 循环 ,结果经常在运行的时候弹出来 应用程序出错的提示。
  这种情况是逻辑不好使程序运行效率低下的问题吗?
  求救! 求救! 求救! 求救!
搜索更多相关主题的帖子: 数字 随机 rand 算术 
2008-06-26 09:36
gao136536
Rank: 1
等 级:新手上路
帖 子:51
专家分:0
注 册:2008-6-24
收藏
得分:0 
回复 2# 冰镇柠檬汁儿 的帖子
- -!
你说的写错了是逻辑上的错误吗?
语法是没有错误的,要不然跟本运行不了啊。
高手,急救了。。。
2008-06-26 09:49
gao136536
Rank: 1
等 级:新手上路
帖 子:51
专家分:0
注 册:2008-6-24
收藏
得分:0 
回复 5# liyanhong 的帖子
说话要经过大脑的吧?
我费尽心思编出了程序,结果运行的时候老是出错,都运行不完,语法都正确,逻辑又想不出再怎么改进,发个帖子问以下自己的疑问还被说成是无病呻吟!
那你说什么才是真有病啊,高人?
2008-06-26 10:16
gao136536
Rank: 1
等 级:新手上路
帖 子:51
专家分:0
注 册:2008-6-24
收藏
得分:0 
#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);
}
2008-06-26 10:27
gao136536
Rank: 1
等 级:新手上路
帖 子:51
专家分:0
注 册:2008-6-24
收藏
得分:0 
库函数
#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 "=?"
2008-06-26 10:27
gao136536
Rank: 1
等 级:新手上路
帖 子:51
专家分:0
注 册:2008-6-24
收藏
得分:0 
目前还没有写完,不过发上去的那些是可以运行的,而且好象一直在循环,我也没有找出哪里的逻辑出错了,只能说语法没有错误。
谢谢了。
2008-06-26 10:29
gao136536
Rank: 1
等 级:新手上路
帖 子:51
专家分:0
注 册:2008-6-24
收藏
得分:0 
回复 11# 界水乘风 的帖子
厉害,我没有注意到除数不能等于0;
但是那个random(n)+1为什么回随机出0来呢?random(n)不是随机[0,n)的数吗?
2008-06-26 10:36
gao136536
Rank: 1
等 级:新手上路
帖 子:51
专家分:0
注 册:2008-6-24
收藏
得分:0 
回复 13# 界水乘风 的帖子

低级错误啊。
多谢指点啊。已经该过来了,可以教了,哈哈,太谢谢了。
看来编程路上多坎坷啊,要学的还很多啊。向你看齐了。
2008-06-26 10:47
快速回复:问一下,随机给数字、循环用多了会有什么后过?
数据加载中...
 
   



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

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