实验6.docx

上传人:b****6 文档编号:13628747 上传时间:2023-06-15 格式:DOCX 页数:22 大小:18.95KB
下载 相关 举报
实验6.docx_第1页
第1页 / 共22页
实验6.docx_第2页
第2页 / 共22页
实验6.docx_第3页
第3页 / 共22页
实验6.docx_第4页
第4页 / 共22页
实验6.docx_第5页
第5页 / 共22页
实验6.docx_第6页
第6页 / 共22页
实验6.docx_第7页
第7页 / 共22页
实验6.docx_第8页
第8页 / 共22页
实验6.docx_第9页
第9页 / 共22页
实验6.docx_第10页
第10页 / 共22页
实验6.docx_第11页
第11页 / 共22页
实验6.docx_第12页
第12页 / 共22页
实验6.docx_第13页
第13页 / 共22页
实验6.docx_第14页
第14页 / 共22页
实验6.docx_第15页
第15页 / 共22页
实验6.docx_第16页
第16页 / 共22页
实验6.docx_第17页
第17页 / 共22页
实验6.docx_第18页
第18页 / 共22页
实验6.docx_第19页
第19页 / 共22页
实验6.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

实验6.docx

《实验6.docx》由会员分享,可在线阅读,更多相关《实验6.docx(22页珍藏版)》请在冰点文库上搜索。

实验6.docx

实验6

实验六参考答案:

/*由希腊著名数学家埃拉托色尼提出求解素数的“筛选法”,

1)阅读程序改正其中的错误,使其能输出100以内的所有素数。

2)改写该程序,将1~Num以内的所有素数按清晰的格式写入文件中。

3)从文件中读出n~m(1

*/

//

(1)

#include

#include

usingnamespacestd;

intmain()

{

constintMAX=100;

boolisPrime[MAX+1];

for(inti=0;i

isPrime[i]=true;

isPrime[0]=isPrime[1]=false;//1和0不是素数

intn=sqrt(MAX)+1;

for(i=2;i

{

//素数的整数倍不是素数,从而筛选掉所有不是素数的数

if(isPrime[i])

{

for(intj=2*i;j

isPrime[j]=false;

}

}

for(i=2;i

if(isPrime[i])

cout<

return0;

}

//

(2)

#include

#include

#include

usingnamespacestd;

voidmain()

{

intNum;

cout<<"请输入Num的值:

";

cin>>Num;

bool*isPrime;

isPrime=newbool[Num];

for(inti=0;i

isPrime[i]=true;

isPrime[0]=isPrime[1]=false;

intn=sqrt(Num)+1;

for(i=2;i

{

if(isPrime[i])

{

for(intj=2*i;j

isPrime[j]=false;

}

}

ofstreamfout("C:

\\Prime.txt");

for(i=2;i

if(isPrime[i])

fout<

fout.close();

}

//(3)

#include

#include

#include

usingnamespacestd;

voidmain()

{

intNum,m,n,count=0;

cout<<"请输入数的上限Num的值:

";

cin>>Num;

ofstreamfout("C:

\\Num.txt");//先把1到Num的数存到Num.txt的文件中

for(inti=1;i<=Num;i++)

fout<

cout<<"请输入n和m的值(1

";

cin>>n>>m;

ifstreamfin;

fin.open("c:

\\num.txt");

bool*isPrime;

isPrime=newbool[Num];

for(i=0;i

isPrime[i]=true;

isPrime[0]=isPrime[1]=false;

for(i=2;i

{

if(isPrime[i])

{

for(intj=2*i;j

isPrime[j]=false;

}

}

inta;

while(!

fin.eof())

{

fin>>a;

if(a>=n&&a<=m&&isPrime[a])

{

cout<

count++;

}

}

cout<<"该区间上素数个数为"<

}

/*课程管理程序

设计程序对学生选修课程情况进行记录和管理。

一名学生可选修多门课程,每条课程记录包括课程名,学分,选修学期和成绩等信息。

要求进行如下操作:

1)输入多个学生的选修课程信息,以清晰的格式写到文件中;

2)修改某个学生的选课记录,增加新选修的课程;

3)在文件中查找某个学生的信息,输出所有选修的课程;

4)删除某个学生的所有选课信息

5)核查所有不满足毕业条件学生名单(如选修学分不足、某学期不及格课程超过3科等)。

*/

#include

#include

#include

#include

usingnamespacestd;

constintMAXCHOOSE=10;//最大选课数量

structlesson//课程结构体

{

charname[20];

intcredit,choose,score;

};

structstudent//学生结构体

{

charname[20];

intnum,total;

lessonrecord[MAXCHOOSE];

};

voidinput()//输入函数

{

ofstreamfout("student.dat",ios:

:

binary|ios:

:

app);//打开文件

intn,cnt,i;

studentcur;

cout<<"输入学生的总数"<

cin>>n;

while(n--)//一个个的读入学生数据

{

cout<<"输入学生的姓名和学号:

"<

cin>>cur.name>>cur.num;

cout<<"输入该学生所选课程的总数:

"<

cin>>cnt;

cur.total=cnt;

cout<<"输入每门课程的名字,学分,选修学期和成绩"<

for(i=0;i

{

cin>>cur.record[i].name>>cur.record[i].credit>>cur.record[i].choose>>cur.record[i].score;

}

fout.write((char*)&cur,sizeof(student));//写入文件中

}

fout.close();

}

voidchange()//修改学生数据的函数

{

ifstreamfin;

ofstreamfout;

fin.open("student.dat",ios:

:

binary);

if(!

fin)

cout<<"没有学生记录,请先输入"<

else

{

boolflag=false;

charname[20];

intnum,incres,i;

studentcur[100];

intcount=0;

cout<<"输入要修改的学生姓名和学号"<

cin>>name>>num;

while(fin.read((char*)&cur[count],sizeof(student)))

{

if(strcmp(cur[count].name,name)==0&&cur[count].num==num)//若当前读取的数据为要修改的学生则修改

{

cout<<"输入要增加的课程数目"<

cin>>incres;

cout<<"输入每门课程的课程名,学分,选修学期和成绩"<

for(i=0;i

{

cin>>cur[count].record[cur[count].total].name>>cur[count].record[cur[count].total].credit>>cur[count].record[cur[count].total].choose>>cur[count].record[cur[count].total].score;

cur[count].total++;

}

flag=true;

}

count++;

}

fin.close();

fout.open("student.dat",ios:

:

binary);

for(intc=0;c

{

fout.write((char*)&cur[c],sizeof(student));

}

fout.close();

if(!

flag)

{

cout<<"要查找的学生不在记录中"<

}

}

}

voidfind()//查找函数

{

fstreamfin("student.dat",ios:

:

binary|ios:

:

in);

if(!

fin)

cout<<"记录不存在,请先输入"<

else

{

charname[20];

intnum,i;

studentcur;

cout<<"请输入要查找的学生的姓名和学号"<

cin>>name>>num;

while(fin.read((char*)&cur,sizeof(student)))//从文件中读入学生数据,若为当前要查询的学生,输出

{

if(strcmp(cur.name,name)==0&&cur.num==num)

{

cout<<"该学生共选修了"<

cout<<"课程名学分选修学期成绩"<

for(i=0;i

{

cout<

}

return;

}

}

cout<<"要查找的学生不在记录中"<

fin.close();

}

}

voiddel()//删除函数

{

ifstreamfin;

ofstreamfout;

fin.open("student.dat",ios:

:

binary);

if(!

fin)

cout<<"没有学生记录,请先输入"<

else

{

charname[20];

intnum;

studentcur[100];

intcount=0;

cout<<"输入要删除的学生姓名和学号"<

cin>>name>>num;

while(fin.read((char*)&cur[count],sizeof(student)))

{

if(strcmp(cur[count].name,name)==0&&cur[count].num==num)//若当前读取的数据为要删除的学生

{

count--;

}

count++;

}

fin.close();

fout.open("student.dat",ios:

:

binary);

for(intc=0;c

{

fout.write((char*)&cur[c],sizeof(student));

}

fout.close();

}

}

voidcheck()//检查函数

{

ifstreamfin("student.dat",ios:

:

binary);

if(!

fin)

cout<<"记录不存在,请先输入"<

else

{

studentcur;

inti,cnt;

boolflag=0;

cout<<"不合格学生的名单:

"<

while(fin.read((char*)&cur,sizeof(student)))//读入学生数据,若有3科以上不及格,则输出

{

for(i=0,cnt=0;i

if(cur.record[i].score<60)

cnt++;

if(cnt>3)

{

flag=1;

cout<

}

}

if(flag==0)

cout<<"没有不合格的学生"<

fin.close();

}

}

intmain()

{

intchoose;

cout<<"--------课程管理程序---------"<

cout<<"1)输入学生数据"<

cout<<"2)修改学生数据"<

cout<<"3)查询学生数据"<

cout<<"4)删除学生数据"<

cout<<"5)检查不合格的学生"<

cout<<"选择以上功能,6退出程序"<

while

(1)

{

cout<<"请输入选择"<

cin>>choose;

if(choose==6)

break;

if(choose<1||choose>6)

cout<<"输入错误,重新输入"<

else

{

switch(choose)

{

case1:

input();break;

case2:

change();break;

case3:

find();break;

case4:

del();break;

case5:

check();break;

}

}

}

return0;

}

/*一条学生的记录包括学号、姓名和成绩等信息,

要求进行如下读写操作:

(1)格式化输入多个学生记录;

(2)以清晰的格式写到文件stu.txt中;

(3)按二进制方式写到文件stu.dat中;

(4)从文件中读出对成绩求平均值;

(5)对文件中按成绩排序再写回文件中.

(6)在文件中查找某个学生的信息,修改成绩并重新写入文件*/

#include

#include

#include

#include

usingnamespacestd;

classStudent

{

public:

intnumber;

charname[20];

intscore;

};

voidmain()

{

//

(1)格式化输入多个学生记录,

(2)以清晰的格式写到文件stu.txt中;

ofstreamfout;

fout.open("stu.txt");

cout<<"请输入学生个数"<

intn,i;

cin>>n;

Student*stu=newStudent[n];

for(i=0;i

{

cout<<"请输入第"<

";

cin>>stu[i].name;

cout<<"请输入第"<

";

cin>>stu[i].number;

cout<<"请输入第"<

";

cin>>stu[i].score;

}

for(i=0;i

{

fout<<""<

:

left)<

"<

:

left)

<<"学号:

"<

"<

}

//(3)按二进制方式写到文件stu.dat中

ofstreamfout2;

fout2.open("stu2.dat");

fout2.write((char*)stu,sizeof(Student)*n);

fout2.close();

//(4)从文件中读出对成绩求平均值

ifstreamfin2;

fin2.open("stu2.dat");

inttotal=0;

for(i=0;i

{

Students;

fin2.read((char*)&s,sizeof(Student));

cout<<"学生姓名:

"<

"<

"<

total=total+s.score;

}

cout<<"平均值:

"<

fin2.close();

//(5)对文件中按成绩排序再写回文件中.

intj,t1,t2;

charstr[20];

for(i=0;i

{

intk=i;

for(j=i+1;j

{

if(stu[k].score>stu[j].score)

{t1=stu[k].score;stu[k].score=stu[j].score;stu[j].score=t1;

t2=stu[k].number;stu[k].number=stu[j].number;stu[j].number=t2;

strcpy(str,stu[k].name);strcpy(stu[k].name,stu[j].name);strcpy(stu[j].name,str);

}

}

}

for(i=0;i

{

fout<<""<

:

left)<

"<

:

left)

<<"学号:

"<

"<

}

fout.close();

//(6)在文件中查找某个学生的信息,修改成绩并重新写入文件

cout<<"请输入查找学生的学号"<

intno;

cin>>no;

ifstreamfin;

fin.open("stu2.dat");

fin.seekg(sizeof(Student)*(no-1));

Students2;

fin.read((char*)&s2,sizeof(Student));

cout<<"学号为"<

"<

"<

fin.close();

fstreamfio;

fio.open("stu2.dat");

Students3;

cout<<"输入修改后的成绩"<

cin>>s3.score;

strcpy(s3.name,s2.name);

s3.number=s2.number;

fio.seekp(sizeof(Student)*(no-1));

fio.write((char*)&s3,sizeof(Student));

Students4;

fio.read((char*)&s4,sizeof(Student));

fio<<"修改后:

"<<"学号为:

"<

"<

"<

fio.close();

}

/*有5个员工的数据,包括职员的姓名、工号和周薪,要求:

(1)把它们存到磁盘文件中;

(2)将磁盘文件中的第1,3,5个员工数据读入程序并显示;

(3)将第3个员工的数据修改后存回磁盘文件中的原有位置。

(4)从磁盘文件读入修改后的5个员工的数据并显示出来。

(5)增添新员工的信息

(6)删除第一个员工的信息*/

#include

#include

usingnamespacestd;

classEmployee

{

public:

charname[20];

intnumber;

intwage;

};

voidmain()

{

//

(1)把它们存到磁盘文件中;

ofstreamfout;

fout.open("employee.dat");

inti;

Employeeemp[5];

for(i=0;i<5;i++)

{

cout<<"输入第"<

cin>>emp[i].name>>emp[i].number>>emp[i].wage;

}

fout.write((char*)emp,sizeof(Employee)*5);

fout.close();

//

(2)将磁盘文件中的第1,3,5个员工数据读入程序并显示;

ifstreamfin;

fin.open("employee.dat");

for(i=0;i<5;i=i+2)

{

Employeeemploy;

fin.read((char*)&employ,sizeof(Employee));

cout<<"第"<

fin.seekg(sizeof(Employee)*(i+2));

}

fin.close();

//(3)将第3个员工的数据修改后存回磁盘文件中的原有位置。

ifstreamfin2;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 农学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2