华中科技大学C++实验56Word文档下载推荐.docx
《华中科技大学C++实验56Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《华中科技大学C++实验56Word文档下载推荐.docx(13页珍藏版)》请在冰豆网上搜索。
a>
n;
s=0;
t=a;
for(i=1;
i<
=n;
i++){
s+=t;
t=t*10+a;
}
s=a+aa+aaa+aaaa+……+aaaa……aaa(n个)="
s<
return0;
3、编程求出所有的“水仙花数”。
所谓“水仙花数”是指一个3位数,其中各位数字的立方和等于该数本身,例如153就是一个“水仙花数”,
因为153=13+53+33。
要求采用枚举法。
inti,j,k,s,p=0;
=9;
for(j=0;
j<
j++){
for(k=0;
k<
k++){
s=100*i+10*j+k;
if(s!
=i*i*i+j*j*j+k*k*k)continue;
cout<
'
\t'
;
p++;
if(p%5==0)cout<
}}}
4、有两队选手每队5人进行一对一的比赛,甲队为A、B、C、D、E,乙队为J、K、L、M、N,经过抽签决定比赛对手名单。
规定A不和J比赛,
M不和D及E比赛。
列出所有可能的比赛名单。
【提示:
】先固定甲队,A在0号位,B在1号位,依次排列,最后E在4号位;
然后乙队排对应的对手,用循环变量j、k、l、m、n分别对应0号位的选择、1号位的选择、依次类推,
直到到4号位的选择,每一层循环应剔除上一轮已选过的选手,和指定不与比赛的对手。
用变量i统计不同情况数。
intj,k,l,m,n,i=0;
for(j=1;
5;
if(k==j)continue;
for(l=0;
l<
l++){
if(l==j||l==k)continue;
for(m=0;
m<
m++){
if(m==j||m==k||m==l||m==3||m==4)continue;
for(n=0;
n<
n++){
if(n==j||n==k||n==l||n==m)continue;
i++;
cout<
switch(j){
case1:
cout<
J-B"
break;
case2:
J-C"
case3:
J-D"
case4:
J-E"
switch(k){
case0:
K-A"
K-B"
K-C"
case3:
K-D"
K-E"
switch(l){
L-A"
l-B"
l-C"
l-D"
l-E"
switch(m){
M-A"
M-B"
M-C"
M-D"
M-E"
switch(n){
N-A"
N-B"
N-C"
N-D"
N-E"
cout<
}}}}}
★(选做题)5、设函数f(x)定义在区间[a,b]上,f(x)连续且满足f(a)*F(b)<
0,求f(x)在[a,b]上的根。
采用弦位法,迭代公式为:
xi+1=xi+(xi-1-xi)/(f(xi)-f(xi-1))*f(xi)
其代换规律为:
首先用两端点函数值的绝对值较大者的对应点作为x[i-1],较小者作为x[i],即如果
|f(a)|<
|f(b)|,则xi←a,xi-1←b。
用迭代公式得出xi+1,f(xi+1)。
误差定义为:
⊿x=(xi-1-xi/(f(xi)-f(xi-1))*f(xi)
当⊿x<
ε或f(xi+1)==0则结束运算。
否则用(xi,f(xi))代替(xi-1,f(xi-1)),用(xi+1,f(xi+1))
代替(xi,f(xi)),继续迭代。
求方程xlg(x)=1的实根的近似值,要求误差不超过0.001。
【提示】令f(x)=xlgx-1,则f
(2)≈-0.398<
0,而f(3)≈0.431>
0,由此可知f(x)的根在2与3之间。
实验六文本文件的简单应用
(1)学会将程序运行的结果存入文本文件
(2)学会从文本文件中读取数据,并进行运算。
1.范例:
修改实验五中的第二题,求出水仙花数后不是在屏幕上显示而是存入文本文件。
请在退出程序后,用记事本打开该文本文件,查看结果。
【分析】
(使用文件的格式)
(1)首先,说明一个文件流对象(内部文件)。
文件流类型ifstream支持从输入文件中提取数据的操作,
而文件流类型oofstream用于完成将数据写入输出文件中各种操作。
ifstreamifile;
//定义输入文件,ifile为文件名,可使用任意标识符
ofstreamofile;
///定义输出文件,ofile为文件名,可使用任意标识符
特别注意:
输入文件用于读操作,输出文件用于写操作。
(2)然后打开文件。
在文件流对象和磁盘文件名之间建立联系。
ifile.open(“d:
\\my_in_file.txt”);
ofile.open(“d:
\\my_out_file.txt”);
(3)对文件进行读/写操作。
可以使用C++的提取运算符(>
)和插入运算符(<
)进行,
也可以使用读字符的get()函数和读字符串的getline()函数。
读写文件时,使用输出文件(如ofile)代替cout,用输入文件(如ifile)代替cin。
(4)最后关闭文件。
ifile.close();
Ofile.close();
关闭文件时,系统把与该文件相关联的文件缓冲区中的数据写到磁盘文件中,保证文件的完整性;
同时把磁盘文件名与文件流对象之间的关联断开,可防止误操作修改了磁盘文件。
【程序】
2.范例:
编程从上题生成的文本文件读取水仙花数,并显示在屏幕上。
【思考】
(1)本程序在读到文件的结束符之前,先读了一个空串,所以输出时多了一个空行。
能去掉该空行吗?
请试试。
不能,那个空行是文件本身就有的
可以改成上面这样
fstream>
charch[256];
ifstreamifile;
ifile.open("
e:
\\myself.txt"
);
文件内容:
do{
ifile.getline(ch,255);
ch<
\0'
}
while(ifile.eof()==0);
ifile.close();
(2)请尝试使用别的方法对文件进行读/写操作。
iomanip>
chara[255];
inti=0,j,k,l;
while(ifile.get(a[i])){
if(a[i]=='
\n'
)break;
i++;
while(l){
ifile>
i>
j>
k>
l;
if(ifile.eof()!
=0)break;
cout<
3.编写程序求500以内的勾股弦数,即满足c2=b2+a2(2为指数)的3个数,要求b>
a。
将所有符合要求的组合存入文本文件中。
intc,a,b,s,i;
ofstreamofile;
ofile.open("
\\gougu.txt"
ofile<
勾股数有:
for(c=1;
c<
=500;
c++){
for(b=1;
b<
b++){
for(a=1;
a<
a++){
if(a<
=b)continue;
s=c*c;
if(s!
=a*a+b*b)continue;
ofile<
"
setw(7);
i++;
if(i%4==0)ofile<
}}}
ofile.close();
4.编写程序从上题建立的文本文件中读取500以内的勾股弦数并显示在屏幕上。
#include<
chara[1000];
文件内容:
ifile.getline(a,999);
……
#