佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1093|回复: 10

c++的疑问(请看楼10)

[复制链接]
发表于 6-10-2008 11:56 PM | 显示全部楼层 |阅读模式
大家好。小弟初来报道,刚学习c++,
做练习时遇到些问题,希望大家能多多指教。

1。 请问如果我要integer  display  randomly from 1到100,
    rand() 跟 srand()要怎样搭配呢?
我试了
srand(unsigned int (1));
RAND_MAX ==1000;
k = rand();
cout<<k;

不可以。

2. 然后我有一个function,
  char again (char b)
{
    switch (b)
    {
        case 'y':
            rerun(y);
            break;
        case 'n':
            break;
        default:
            cout<<"wrong answer. only y and n allow"
                <<"\n"<<"-please enter again"<<endl;
                cin>>b;
                again(b);
            break;
    }
    return 0;
}
问题: 为什么可以return 0的, 不是应该return char吗?0不是integer吗? 可是如果我不放return 0, program又出error. 不明白。

3.
int x = 0;
int main()
{
    cout<<" I have a number between 1 and 1000 "
        <<"\n"<<"Can you guess my number?"
        <<"\n"<< "-Please type your first guess"<<endl;
cin>> x;   <----这个input我要怎样限制只是integer input 呢? 因为当我run program时, 我试打英文字母,它一直出Too Low. Try again
    srand( unsigned int (1));//unsigned)time( NULL ) );
//    RAND_MAX ==1000;
    k = rand();
    cout<<k;

    while (x!=k)
    {
        if (x<k)
        {    cout<<"Too Low. Try again"<<endl;
            cin>>x;
        }
        if (x>k)
        {    cout<<"Too High. Try again"<<endl;
            cin>>"x";
        }
    }

先谢谢大家了。

[ 本帖最后由 lliioonn 于 27-10-2008 04:46 PM 编辑 ]
回复

使用道具 举报


ADVERTISEMENT

发表于 7-10-2008 02:03 AM | 显示全部楼层
1
RAND_MAX 是不能改的
你要用簡單的algorithm來弄rand()的range
參考 http://www.cplusplus.com/reference/clibrary/cstdlib/rand.html

srand()
一般的情況之下
每1次執行程式rand()製造出來的號碼是一樣的
所以就需要srand()配合time()來製造不一樣的號碼
參考http://www.cplusplus.com/reference/clibrary/cstdlib/srand.html

2
每一個char都有代表性的號碼
就是所謂的acsii value
如 101 等於 e ...等等
char a = 101;
printf("%c", a);

所以 return 0; 是沒問題的
如果你想要沒有return的function
function type放void就好了

3
可以用isdigit()或isalpha()之類的function來檢查吧...
回复

使用道具 举报

 楼主| 发表于 8-10-2008 10:05 AM | 显示全部楼层
原帖由 cheng1986 于 7-10-2008 02:03 AM 发表
1
RAND_MAX 是不能改的
你要用簡單的algorithm來弄rand()的range
參考 http://www.cplusplus.com/reference/clibrary/cstdlib/rand.html

srand()
一般的情況之下
每1次執行程式rand()製造出來的號碼是一樣的 ...


问题解决了。很谢谢你的帮忙。
最近研究那个for, loop来Loop去,loop到头都晕了

[ 本帖最后由 lliioonn 于 8-10-2008 10:57 AM 编辑 ]
回复

使用道具 举报

 楼主| 发表于 12-10-2008 10:17 PM | 显示全部楼层
又遇到新问题了,不大肯定。
练习叫我写个nonrecursice function, fibonacci (n)
0,1,1,2,3,5,8,...
以下的算是吗?
#include

int i, n;
int total[100];
int total1=1;
int sum=0;

int fibonacci (int a)
{
        //        if (a==0||a==1)
        //        return a;
        for (i=0; i<=a; i++)
        {
                        //total[-1]=0;
                        total[0]=0;
                        total[1]=1;
                        total[2]=1;
                        total[i+2]=total+total[i+1];
                        cout<<"\n"<<
                        //if (total>2147483647)
                        //cout<<"biggest"<<
                       
        }       

        return total[a];
}                       

int main()
{
        cout<<"Enter nth"<
        cin>>n;
        total[n] = fibonacci(n);

        return 0;
}


然后它说determine the largest Fibonacci number that can be printed on your system. 这个怎样要怎样搞?
回复

使用道具 举报

发表于 12-10-2008 11:36 PM | 显示全部楼层
最后一个number刚刚大过 ULONG_MAX 。

对了要加入 <climits>
回复

使用道具 举报

发表于 13-10-2008 11:12 AM | 显示全部楼层
http://www.brpreiss.com/books/opus5/html/page75.html

Here got nonrecursive and recursive fibonacci example.
回复

使用道具 举报

Follow Us
 楼主| 发表于 13-10-2008 08:58 PM | 显示全部楼层
原帖由 onlylonly 于 12-10-2008 11:36 PM 发表
最后一个number刚刚大过 ULONG_MAX 。

对了要加入  


又学到新东西了。谢谢。 因为我用INT, 所以我用INT_MAX。
其实我不懂我理解问题错误没有.
我随便KEY IN一个很大的号码,
然后看OUTPUT出来有NEGATIVE,应该是OVERFLOW
所以我觉得它应该是要我找出BIGGEST VALUE before result exceed int_max.
所以我的CODE也改了
        for (i=0; i<=a; i++)
        {                        
                        answer = previous+sum;
                        previous = sum;
                        sum = answer;
                        cout<<"\n"<<

if (answer<0)
                {        
                        cout<<"Overflow!"<
                        cout<<"biggest value before overflow is "<<
                        i=i+a;
                }

        }

原帖由 solidx 于 13-10-2008 11:12 AM 发表
http://www.brpreiss.com/books/opus5/html/page75.html

Here got nonrecursive and recursive fibonacci example.


哈~ 谢谢。
你那个好过我用array...(好像帖4我写的那样)
因为我还要自己设定一个range给array,对吗?

[ 本帖最后由 lliioonn 于 13-10-2008 09:19 PM 编辑 ]
回复

使用道具 举报

发表于 13-10-2008 10:10 PM | 显示全部楼层

回复 7# lliioonn 的帖子

不可以大过int_max,

ULONG_MAX 是 unsigned long int, 也就是没有 -ve , 基本上在int里面是有最大的容量, 会比int大。

[ 本帖最后由 onlylonly 于 13-10-2008 10:11 PM 编辑 ]
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 13-10-2008 10:19 PM | 显示全部楼层
原帖由 onlylonly 于 13-10-2008 10:10 PM 发表
不可以大过int_max,

ULONG_MAX 是 unsigned long int, 也就是没有 -ve , 基本上在int里面是有最大的容量, 会比int大。


可是如果大过int_max,出来的sum就会去-ve
那么sum不是永远都不会大过int_max?

回复

使用道具 举报

 楼主| 发表于 27-10-2008 04:46 PM | 显示全部楼层
请问要怎样把DECIMAL换去8 bit BINARY?
例如,DEC15换去00001111, 而不是1111而已。
DEC 16 -> 00010000.
在MFC, 我只能用itoa这FUNCTION,做不到这个效果.

问题解决了

[ 本帖最后由 lliioonn 于 28-10-2008 03:56 PM 编辑 ]
回复

使用道具 举报

发表于 18-11-2008 11:49 PM | 显示全部楼层

回复 10# lliioonn 的帖子

如果有用MFC, 弄成4位数大概是酱吧
CString.Format(“%#.4d", val);
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 22-12-2025 06:32 PM , Processed in 0.141499 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表