一道C语言改错题,这句我不懂

下列给定程序中的函数Creatlink的功能是:创建带头节点的单向链表,并为各节点数据域赋0到m-1的值。
请改正函数Creatlink中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
typedef struct aa
{ int data;
struct aa *next;
} NODE;

NODE *Creatlink(int n, int m)
{ NODE *h=NULL,*p,*s;
int i;
s=(NODE *)malloc(sizeof(NODE));
h=s;
/*************found**************/
p->next=NULL;
for(i=1;i<n;i++)
{ s=(NODE *) malloc(sizeof(NODE));
/*************found**************/
s->data=rand()%m;
s->next=p->next;p->next=s; p=p->next;
}
s->next=NULL;
/*************found**************/
return p;
}
outlink(NODE *h)
{ NODE *p;
p=h->next;
printf("\n The LIST :\n\n HEAD");
while(p)
{ printf("->%d",p->data);
p=p->next;}
printf("\n");
}
main()
{ NODE *head;
system("CLS");
head=Creatlink(8,22);
outlink(head);
}

【参考答案】
(1)错误:p->next=NULL; 正确:p=s;
(2)错误:s->date=rand( )%m ;
正确:s->data=rand( )%(m - 1);
(3)错误:return p; 正确:return h;

s->date=rand( )%m ;是啥意思?
rand( )是什么?

>s->date=rand( )%m ;是啥意思?
>rand( )是什么?

rand()函数,作用是:产生一个随机数。

通常,通过rand函数产生随机数以后,用%m来限定它的范围。即:rand( )%m。
其原理是:用那个随机数,去除以m,留下所得余数,作为最终结果。

下面来说一下你那道题:
s->date=rand( )%m,就是从0到m-1随即选取一个数。
并将这个数赋值给s->date。
比如,rand()函数生成的随机数为98,m为8,98除以8的余数为2,
所以最后也就是将2赋值给s->date
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-02-08
rand( )是什么?
rand()是产生随机数的函数.

s->date=rand( )%m ;是啥意思?
这是说产生一个随机数,让它除以m求余数,再把这个余数赋给结构体s的成员date.
就这样,朋友.

C语言的改错题调试以后 下面会出现这个对话框 我想请问 warning后面的...
其实你可以双击那个警告就知道警告发生在哪里,然后就可以观察那个警告的句子到底有什么问题,当然调试也是可以的,你先设置断点到那个警告的句子的前面一点,然后单步调试。在观察窗口查看警告句子的变量的值从而发现警告到底什么意思,其实一般警告都可以忽略的,如果再不懂再问我吧 ...

C语言改错题
\\n"); return 1; } printf("%p\\n", pch); \/***Found***\/ \/\/close(pch); free(pch); \/\/释放指针pch指向的内存块,应该用free,不是close return 0;}

C语言纠错……我为什么老错T-T
因为你没写你的思路。所以我看得不是很懂哈。特别是你的Squeeze函数无返回值。你传实参进入函数,然而函数里的数组和字符的变化都是形参在改变(进入函数:实参->形参->函数结束是否将形参返回)。函数在计算机里时存到栈里的。因为你没有用返回值。当你的函数结束时你的形参是会销毁的,所以导致你的...

有一题C语言我不懂: x=8; a=+
a = ++x; 这是x先自加1然后把加1_之后_的结果赋给a,所以a是9,x是9 b = x++; 这是x自加1,并且把加1_之前_的结果赋给b,所以b是9,x是10 c = ++x; 这是x自加1,并且把加1_之后_的结果赋给c,所以c是11,x是11 y = a+b+c; 就是9+9+11=29 ...

C语言中flag是用来做什么的啦。 还有这个程序有点不懂 下面是个改错题...
for(i=1;i<=(int)sqrt(m);i++)if(m%i==0){flag=1;break;} 这个for循环里的i不能从1开始,否则if里的m%i==0在i=1时恒成立,所以直接进入if,设置flag然后跳出for 这是计算素数的吧?把i的初始值改成2就好了

C语言的判断题,第三题我看不懂,格式字符%e输出的结果是什么?怎么来的...
e是科学计数法输出.当输出的时候 实数部分, 默认小数部分为6位. 指数部分默认为3位.即 如果是printf("%e", 12345.0);那么实际会输出 1.234500e+04

c语言,这题看不懂了,求教,6.10,这题switch里面是2473-50=2423吗,那么...
第一次最终执行:putchar(c+4) putchar(c+4). 因为c为'2'。所以输出二个6.第二次同理,c为‘4’, switch(‘4’-‘2’),即switch(2)执行case 2 输出 一个8 第三次:c为‘7’,switch(5). 执行default,输出 一个9 第四次 :c为’3‘ switch(1)输出两个7 所以结果为...

C语言的一些题目:不太理解代码,求详细解释,手写部分看不懂
首先main()是主函数,通俗来说就是一个程序的入口,只能先运行main函数。而题中的fun在main中被调用了,并且传入的参数值是500 从题目中得知,需要取 被13或17整除的数字 下图红框可知,k就是那个除数,也就是500,所以int fun括号中输入的应该是k 所以填入int k 最后题目要求最大十个,我也...

我是初学C语言,看不懂你这题(看不懂的地方我标注了一下啊)
!(a>b)=!(3>4)因为(3>4)是错的,所以用0表示,又因为前面!,所以用1表示 (!c)因为c=5,不等于0,所以c是真值,前面加个!,就说明整体是假值,所以最后逻辑值为0 另外,扩展一下,对于这道题中的c,!!c的值应该为1。!!c=!(!c)=(!0)=1。这也是通过上述解释...

我这有一道C语言的题看不懂,真心求帮助,各位C语言高手拜托啦,
栈每存入一个数据(入栈),top就增1,每出栈一次,top就减1,所以,当你top==20时,栈中现在肯定是20个元素。栈底一直不变 画个简单图:- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - bottom top 进栈一次,top右移...

相似回答