matlab运用函数随机点名,matlab随机点名程序

思路:

总共n个学生(对应学号从1到n);每次抽查m个学生的作业;

输入n和m。得到每次抽查的学号;

而每次抽查的学号分为两部分:一部分是上次抽查过的人中随机30%的学号;另一部分是为抽查过的人中70%的学号;

最后,将每次抽查的人数在matlab界面显示,同时分别输出到D盘下的不同的txt文件中。

注意事项:最多抽查次数为10次;

具体如下:

function homework()

clear;

fid=fopen('d:\01.txt','w');%覆盖txt中已有的数据

fclose(fid);

fid=fopen('d:\02.txt','w');%覆盖txt中已有的数据

fclose(fid);

fid=fopen('d:\03.txt','w');%覆盖txt中已有的数据

fclose(fid);

fid=fopen('d:\04.txt','w');%覆盖txt中已有的数据

fclose(fid);

fid=fopen('d:\05.txt','w');%覆盖txt中已有的数据

fclose(fid);

fid=fopen('d:\06.txt','w');%覆盖txt中已有的数据

fclose(fid);

fid=fopen('d:\07.txt','w');%覆盖txt中已有的数据

fclose(fid);

fid=fopen('d:\08.txt','w');%覆盖txt中已有的数据

fclose(fid);

fid=fopen('d:\09.txt','w');%覆盖txt中已有的数据

fclose(fid);

fid=fopen('d:\10.txt','w');%覆盖txt中已有的数据

fclose(fid);

%disp,显示输入提示或者为文字;

disp('--------随机点名程序----------');

n=input('请输入班级总人数:');

m=input('请输入每次抽检的人数:');

disp('根据输入的数据,如果要所有学号抽查完,需要抽检的次数是');

x=floor((n-m)/(m-round(0.3*m)))+2

disp('请按任意键继续')

pause

%总人数为n,代表最大的学号;并将所有学号组成一个数列Z,这个表达式很简练的生成了一个行矩阵;

z=1:n;

%k0为所有学号第一次随机排列后的数列.

k0=randperm(n);

%从数列k0中随机生成m个不重复的学号,作为第一次抽检的学号数列;

s1=z(k0(1:m));

%有了第1次随机生成的数列S1,要从总数列Z中排除掉这个元素并形成一个新的矩阵s10;

%setdiff表示从z和S1中挑选中不同的!因为上面重复了多次,所以和原始人数比较选出不同的可以消去重复。

s10=setdiff(z,s1);%所有学号z中去掉已经抽取的s1学号,得到剩余的未抽取的学号;

%====================

disp('【第1次抽检的学号如下】');

disp('*********************************************************')

s1

disp('*********************************************************')

%====================

disp('---------第1次抽查后剩余的学号如下----------');s10

%下面是将s1输出到D盘1.txt文件中

[row,col]=size(s1);

fid=fopen('d:\01.txt','wt');

for i=1:row

for j=1:col

fprintf(fid,'.0f\n',s1(i,j));

end

fprintf(fid,'\n');

end

fclose(fid);

%==第2次抽查过程==================

%表示从s1(即第一次从z中抽出数量)中随机取30%(用round(0.3*m)表示数量);从s10(剩余学号)中随机取剩下的。

%注意,这里不是直接抽取,而是先生成数列序号的随机数,再用随机数序号表示出矩阵元,比如随机抽取5,8,1序列号,对应的位置的数据就被随机选中了。

k1=randperm(length(s1));k10=randperm(length(s10));

s130=s1(k1(1:round(0.3*m)));

if

length(s10)>(m-round(0.3*m))%如果剩余的学号s10的个数length(s10)大于70%m

s1070=s10(k10(1:(m-round(0.3*m))));%则从s10中随机抽取m-round(0.3*m)个学号。

s2=[s130,s1070];%再将这m-roun

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值