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]");
不知道为什么要这样写?
求解! 展开
程序的一部分是这样的
while((n=400+rand()%601)%5);
score[i]=n/10.0;
printf("%5.1d",score[i]");
不知道为什么要这样写?
求解! 展开
展开全部
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 的机率要比其它数大一倍。
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 的机率要比其它数大一倍。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询