c语言while((n=400+rand()%601)%5);是什么意思?

求做一个模拟产生学生成绩的程序,成绩要求在四十到一百分之间,保留一位小数,而且小数位要是零或五程序的一部分是这样的while((n=400+rand()%601)%5);... 求做一个模拟产生学生成绩的程序,成绩要求在四十到一百分之间,保留一位小数,而且小数位要是零或五
程序的一部分是这样的
while((n=400+rand()%601)%5);
score[i]=n/10.0;
printf("%5.1d",score[i]");
不知道为什么要这样写?
求解!
展开
 我来答
bignode
推荐于2017-10-05 · TA获得超过2664个赞
知道大有可为答主
回答量:1427
采纳率:75%
帮助的人:543万
展开全部
rand() 能产生0-RAND_MAX之间的随机数,
rand() % 601生成一个 0-600的数,则 n 从400-1000。
在后面的计算成绩处,把 score =n / 10, 即 n的个位,变成SCORE的小数部分;
又要求 小数 为0 或5, 所以 n 的个位必须是0或5,即能被5整除,n % 5 == 0;
如果 n 不能被5整除,即 n%5 > 0;

while((n=400+rand()%601)%5); 作用是产生一个400-1000的数,如果 不能 被5整除,则另产生一个数,直到该数能被5整除,跳出循环。后面就简单了。

PS:rand()%601 产生的数并不是随机的。如RAND_MAX = 700, 并假定产生RAND能产生0-700间的随机数,那么 rand %601 后,原来0-600的数还是0-600,601-700的数变成 0-99,所以0-99 的机率要比其它数大一倍。
iguoping
2014-11-24 · TA获得超过3638个赞
知道小有建树答主
回答量:412
采纳率:57%
帮助的人:211万
展开全部
我认为上面的方法不太好,死循环,而且可读性不好。可以写
float m=(rand()%10)>5?5:0;//小数部分
float n=rand()%60+40;//整数部分
n+=m/10;
追问
谢谢!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式