急急急!!!C语言高手请进~~

来源:百度知道 编辑:UC知道 时间:2024/05/20 10:34:20
这是一个石头合并的问题~~

http://wurong81.spaces.live.com/blog/cns!5eb4a630986c6ecc!253.entry

下面的经典石子合并源程序

有几个问题
1、无法运行,显示不正常终止
2、oo 2000000000 干什么用的??为什么要定义这么大??
3、 //memset(sum, 0, sizeof(sum));
memcpy(save+1, v+1, n*sizeof(v[1]));
我不知道是怎么回事,所以不会改

请详细点解答,要能运行的程序,最好把改好的完整程序给我
很急~~很急~~在下先谢过了

也许是你没有看懂程序导致的.
首先,
while(scanf("%d", &n), n)
{

}
中while那句的意思是
1.输入一个数字,赋值给n,
2.判断n的值,如果n为0,则退出while循环,在此程序中为退出整个程序,
3.如果n的值不为0,则运行while中的代码

能够理解这个语句的意思后,下面的代码就没有什么难度了.

2、oo 2000000000 干什么用的??为什么要定义这么大??
定义这么大是根据程序的需求来的,作者这里的意思当作无穷大处理,一般来讲规范的定义应该这样
#define 2、oo 2000000000UL //以防止溢出

3、 //memset(sum, 0, sizeof(sum));
memcpy(save+1, v+1, n*sizeof(v[1]));
我不知道是怎么回事,所以不会改

memset -- 是指对一块内存空间赋值.
memcpy -- 是指讲一块内存空间拷贝到另一块内存空间.

//memset(sum, 0, sizeof(sum));
是指,将sum地址开始大小为sizeof(sum)的一块内存空间,进行赋 0 值,

memcpy(save+1, v+1, n*sizeof(v[1]));
是指,将v+1地址开始的内存空间拷贝到save+1地址开始的内存空间,拷贝大小为n*sizeof(v[1]));

1. 程序可以正常编译并且运行,但你要清楚如何去输入.先输入一个数字n,接下来输入n个数字.它便开始计算.此为一个周期.如果某次输入的n=0则程序结束.一切正常.
2. oo是表示无穷大,学过数学就应该知道无穷大符号怎么写,还是挺形象的.在C中就用一个足够大的整数来表示.
3. memset()是填充内存的函数,一般用来做初始化;memcpy()是复制内存的函数.关于函数的详解请参阅MSDN或者百度之.

程序完全正确,不用改.