700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > matlab运用函数随机点名 matlab随机点名程序

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

时间:2022-12-30 21:02:51

相关推荐

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-round(0.3*m)个学号和从s1中抽取的30%的学号s130合并,得到第2次抽查的学号

s20=setdiff(s10,s1070);%从第1次所有剩下的学号(S10)中减去S1070(它是从第1次剩余的s10中抽走的学号);

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

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

s2

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

disp('---------第2次抽检后剩余的学号---------------');s20

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

[row,col]=size(s2);

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

for i=1:row

for j=1:col

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

end

fprintf(fid,'\n');

end

fclose(fid);

%导出文件完毕

else

disp('【【【第2次抽检的学号】】】')

s10;

disp('已完成一次完整抽查。')

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

[row,col]=size(s10);

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

for i=1:row

for j=1:col

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

end

fprintf(fid,'\n');

end

fclose(fid);

return

end

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

k2=randperm(length(s2));k20=randperm(length(s20));

s230=s2(k2(1:round(0.3*m)));

if

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

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

s3=[s230,s2070];%再将这m-round(0.3*m)个学号和从s1中抽取的30%的学号s130合并,得到第2次抽查的学号

s30=setdiff(s20,s2070);%从第1次所有剩下的学号(S10)中减去S1070(它是从第1次剩余的s10中抽走的学号);

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

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

s3

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

disp('---------第3次抽检后剩余的学号----------------');s30

%下面是将s3输出到D盘3.txt文件中

[row,col]=size(s3);

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

for i=1:row

for j=1:col

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

end

fprintf(fid,'\n');

end

fclose(fid);

%导出文件完毕

else

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

[row,col]=size(s20);

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

for i=1:row

for j=1:col

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

end

fprintf(fid,'\n');

end

fclose(fid);

%上面的txt文件导出结束

disp('----------第3次抽检的学号----------------')

s20;

disp('已完成一次完整抽查。')

return

end

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

k3=randperm(length(s3));k30=randperm(length(s30));

s330=s2(k3(1:round(0.3*m)));

if

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

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

s4=[s330,s3070];%再将这m-round(0.3*m)个学号和从s1中抽取的30%的学号s130合并,得到第2次抽查的学号

s40=setdiff(s30,s3070);%从第1次所有剩下的学号(S10)中减去S1070(它是从第1次剩余的s10中抽走的学号);

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

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

s4

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

disp('---------------第4次抽检后剩余的学号-------------');s40

%下面是将s4输出到D盘4.txt文件中

[row,col]=size(s4);

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

for i=1:row

for j=1:col

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

end

fprintf(fid,'\n');

end

fclose(fid);

%导出文件完毕

else

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

[row,col]=size(s30);

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

for i=1:row

for j=1:col

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

end

fprintf(fid,'\n');

end

fclose(fid);

%上面的txt文件导出结束

disp('【【【第4次抽检的学号】】】')

s30;

disp('已完成一次完整抽查。')

return

end

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

k4=randperm(length(s4));k40=randperm(length(s40));

s430=s3(k4(1:round(0.3*m)));

if

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

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

s5=[s430,s4070];%再将这m-round(0.3*m)个学号和从s1中抽取的30%的学号s130合并,得到第2次抽查的学号

s50=setdiff(s40,s4070);%从第1次所有剩下的学号(S10)中减去S1070(它是从第1次剩余的s10中抽走的学号);

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

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

s5

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

disp('-------------第5次抽检后剩余的学号-------------------');s50

%下面是将s5输出到D盘5.txt文件中

[row,col]=size(s5);

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

for i=1:row

for j=1:col

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

end

fprintf(fid,'\n');

end

fclose(fid);

%导出文件完毕

else

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

[row,col]=size(s40);

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

for i=1:row

for j=1:col

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

end

fprintf(fid,'\n');

end

fclose(fid);

%上面的txt文件导出结束

disp('【【【第5次抽检的学号】】】')

s40;

disp('已完成一次完整抽查。')

return

end

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

k5=randperm(length(s5));k50=randperm(length(s50));

s530=s4(k5(1:round(0.3*m)));

if

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

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

s6=[s530,s5070];%再将这m-round(0.3*m)个学号和从s1中抽取的30%的学号s130合并,得到第2次抽查的学号

s60=setdiff(s50,s5070);%从第1次所有剩下的学号(S10)中减去S1070(它是从第1次剩余的s10中抽走的学号);

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

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

s6

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

disp('----------------第6次抽检后剩余的学号--------------');s60

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

[row,col]=size(s6);

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

for i=1:row

for j=1:col

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

end

fprintf(fid,'\n');

end

fclose(fid);

%导出文件完毕

else

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

[row,col]=size(s50);

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

for i=1:row

for j=1:col

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

end

fprintf(fid,'\n');

end

fclose(fid);

%上面的txt文件导出结束

disp('【【【第6次抽检的学号】】】');s50

disp('已完成一次完整抽查。')

return

end

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

k6=randperm(length(s6));k60=randperm(length(s60));

s630=s5(k6(1:round(0.3*m)));

if

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

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

s7=[s630,s6070];%再将这m-round(0.3*m)个学号和从s1中抽取的30%的学号s130合并,得到第2次抽查的学号

s70=setdiff(s60,s6070);%从第1次所有剩下的学号(S10)中减去S1070(它是从第1次剩余的s10中抽走的学号);

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

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

s7

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

disp('-------------第7次抽检后剩余的学号----------------');s70

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

[row,col]=size(s7);

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

for i=1:row

for j=1:col

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

end

fprintf(fid,'\n');

end

fclose(fid);

%导出文件完毕

else

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

[row,col]=size(s60);

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

for i=1:row

for j=1:col

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

end

fprintf(fid,'\n');

end

fclose(fid);

%上面的txt文件导出结束

disp('-------------第7次抽检的学号---------------');s60

disp('已完成一次完整抽查。')

return

end

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

k7=randperm(length(s7));k70=randperm(length(s70));

s730=s6(k7(1:round(0.3*m)));

if

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

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

s8=[s730,s7070];%再将这m-round(0.3*m)个学号和从s1中抽取的30%的学号s130合并,得到第2次抽查的学号

s80=setdiff(s70,s7070);%从第1次所有剩下的学号(S10)中减去S1070(它是从第1次剩余的s10中抽走的学号);

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

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

s8

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

disp('---------------第8次抽检后剩余的学号---------------');s80

%下面是将s8输出到D盘8.txt文件中

[row,col]=size(s2);

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

for i=1:row

for j=1:col

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

end

fprintf(fid,'\n');

end

fclose(fid);

%导出文件完毕

else

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

[row,col]=size(s70);

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

for i=1:row

for j=1:col

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

end

fprintf(fid,'\n');

end

fclose(fid);

%上面的txt文件导出结束

disp('【【【第8次抽检的学号】】】');s70

disp('已完成一次完整抽查。')

return

end

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

k8=randperm(length(s8));k80=randperm(length(s80));

s830=s7(k8(1:round(0.3*m)));

if

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

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

s9=[s830,s8070];%再将这m-round(0.3*m)个学号和从s1中抽取的30%的学号s130合并,得到第2次抽查的学号

s90=setdiff(s80,s8070);%从第1次所有剩下的学号(S10)中减去S1070(它是从第1次剩余的s10中抽走的学号);

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

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

s9

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

disp('-------------第9次抽检后剩余的学号----------------');s90

%下面是将s9输出到D盘9.txt文件中

[row,col]=size(s9);

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

for i=1:row

for j=1:col

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

end

fprintf(fid,'\n');

end

fclose(fid);

%导出文件完毕

else

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

[row,col]=size(s80);

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

for i=1:row

for j=1:col

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

end

fprintf(fid,'\n');

end

fclose(fid);

%上面的txt文件导出结束

disp('【【【第9次抽检的学号】】】');s80

disp('已完成一次完整抽查。')

return

end

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

k9=randperm(length(s9));k90=randperm(length(s90));

s930=s8(k9(1:round(0.3*m)));

if

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

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

s_10=[s930,s9070];%再将这m-round(0.3*m)个学号和从s1中抽取的30%的学号s130合并,得到第2次抽查的学号

s_100=setdiff(s90,s9070);%从第1次所有剩下的学号(S10)中减去S1070(它是从第1次剩余的s10中抽走的学号);

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

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

s_10

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

disp('-------------第10次抽检后剩余的学号-----------------');s_100

%下面是将s_10输出到D盘10.txt文件中

[row,col]=size(s_10);

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

for i=1:row

for j=1:col

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

end

fprintf(fid,'\n');

end

fclose(fid);

%导出文件完毕

else

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

[row,col]=size(s90);

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

for i=1:row

for j=1:col

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

end

fprintf(fid,'\n');

end

fclose(fid);

%上面的txt文件导出结束

disp('【【【第10次抽检的学号】】】');s90

disp('已完成一次完整抽查。')

return

end

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。