return0;
}
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之间
#include
#include
usingnamespacestd;
constmax=30;
doublea=2,b=3,ep=0.001;
intmain(){
intmaxit,j;
doublex1,x2,temp,f1,f2,dx;
f1=a*log10(a)-1;
f2=b*log10(b)-1;
if(f1*f2>=0){
cout<<"wrong"<return0;
}
if(fabs(f1)x1=a;
x2=b;
}
else{
x1=b;
x2=a;
temp=f1;
f1=f2;
f2=temp;
}
for(j=1;j<=max;j++){
dx=(x1-x2)*f2/(f2-f1);
cout<temp=x2;
x2=x2+dx;
x1=temp;
f1=f2;
f2=x2*log10(x2)-1;
cout<<'/t'<if((fabs(dx)cout<<"方程的根为:
"<return0;
}
}
cout<<"迭代次数过多"<return1;
}
实验六文本文件的简单应用
一.实验目的
(1)学会将程序运行的结果存入文本文件
(2)学会从文本文件中读取数据,并进行运算。
二.实验内容
1.范例:
修改实验五中的第二题,求出水仙花数后不是在屏幕上显示而是存入文本文件。
请在退出程序后,用记事本打开该文本文件,查看结果。
#include
usingnamespacestd;
intmain(){
intk=100,l,m,n,count=0;
ofstreamofile;
ofile.open("myfile.txt");
ofile<<"水仙花数有:
"<do{
l=k/100;
n=k%10;
m=(k-l*100-n)/10;
if(k==l*l*l+m*m*m+n*n*n){
ofile<count++;
if(count%5==0)ofile<}
k++;
}while(k<999);
oflie<ofile.close();
return0;
}
--------------------Configuration:
wenjian-Win32Debug--------------------
Compiling...
wenjian.cpp
E:
\wenjian\wenjian.cpp(19):
errorC2065:
'oflie':
undeclaredidentifier
E:
\wenjian\wenjian.cpp(19):
errorC2563:
mismatchinformalparameterlist
E:
\wenjian\wenjian.cpp(19):
errorC2568:
'<<':
unabletoresolvefunctionoverload
couldbe'classstd:
:
basic_ostream:
char_traits>&__cdeclstd:
:
endl(classstd:
:
basic_ostream:
char_traits>&)'
d:
\programfiles\microsoftvisualstudio12\vc98\include\ostream(377):
seedeclarationof'endl'
or'classstd:
:
basic_ostream:
char_traits>&__cdeclstd:
:
endl(classstd:
:
basic_ostream:
char_traits>&)'
d:
\programfiles\microsoftvisualstudio12\vc98\include\ostream(372):
seedeclarationof'endl'
or'classstd:
:
basic_ostream<_E,_Tr>&__cdeclstd:
:
endl(classstd:
:
basic_ostream<_E,_Tr>&)'
d:
\programfiles\microsoftvisualstudio12\vc98\include\ostream(367):
seedeclarationof'endl'
执行cl.exe时出错.
wenjian.obj-1error(s),0warning(s)
您好:
这个程序我是看了很久一直在检查觉得和书上写的是一样的就是不成功实在不知道该怎么办了麻烦您帮我看看好吗谢谢
实在抱歉我又重新打了一遍就成功了虽然我还是不知道为什么
#include
usingnamespacestd;
intmain(){
intk=100,l,m,n,count=0;
ofstreamofile;
ofile.open("myfile.txt");
ofile<<"水仙花数有"<do{
l=k/100;
n=k%10;
m=(k-l*100-n)/10;
if(k==l*l*l+m*m*m+n*n*n){
ofile<count++;
if(count%5==0)ofile<}
k++;
}while(k<999);
ofile<ofile.close();
return0;
}
2.范例:
编程从上题生成的文本文件读取水仙花数,并显示在屏幕上。
#include
#include
usingnamespacestd;
intmain(){
charch[256];
ifstreamifile;
ifile.open("e:
\\6_1\\myfile.txt");
cout<<"文件内容:
"<do{
ifile.getline(ch,255);
cout<}while(ifile.eof()==0);
ifile.close();
return0;
}
1)本程序在读到文件的结束符之前,先读了一个空串,所以输出时多了一个空行。
能去掉该空行吗?
请试试。
不能因为ch限制了文件读取的长度
(2)请尝试使用别的方法对文件进行读/写操作。
思考中
3编写程序求500以内的勾股弦数,即满足c2=b2+a2(2为指数)的3个数,要求b>a。
将所有符合要求的组合存入文本文件中。
程序:
#include;
usingnamespacestd;
intmain(){
inta,b,c;
ofstreamofile;
ofile.open("myfile.txt");
ofile<<"100以内素数"<for(c=3;c<500;c++){
for(b=2;bfor(a=1;a
if(c*c==b*b+a*a){
ofile<ofile<ofile.close();
return0;
}
数很多所以就没有全部列出这只是第一个和最后一个请见谅
4.编写程序从上题建立的文本文件中读取500以内的勾股弦数并显示#include
#include
usingnamespacestd;
intmain(){
charch[525];
ifstreamifile;
ifile.open("e:
\\6_2\\myfile.txt");
cout<<"文件内容"<do{
ifile.getline(ch,521);
cout<}while(ifile.eof()==0);
ifile.close();
return0;
}
依然只是粘贴了一小部分
编写如下图案:
*
***
*****
*******
*****
***
*
#include
#include
usingnamespacestd;
intmain(){
inti,j,m,n;
for(i=1;i<=4;i++){
cout<for(j=1;j<=8-2*i;j++)cout<<"";
for(j=1;j<=2*i-1;j++)cout<<"*";
cout<}
for(m=1;m<=3;m++){
cout<for(n=1;n<=7-2*m;n++)cout<<"*";
cout<}
return0;
}
若要输出下面图形:
*
***
*****
*******
*****
***
*
#include
#include
usingnamespacestd;
intmain(){
inti,j,m,n,l;
for(l=1;l<=11;l++)
cout<<"";
cout<<"*"<for(i=1;i<=3;i++){
cout<for(j=1;j<=6-2*i;j++)cout<<"";
for(j=1;j<=2*i+1;j++)cout<<"*";
cout<}
for(m=1;m<=3;m++){
cout<for(n=1;n<=7-2*m;n++)cout<<"*";
cout<}
return0;
}
书上乘法口诀:
#include
#include
usingnamespacestd;
intmain(){
inti,j;
cout<for(i=1;i<10;i++)
cout<cout<for(i=1;i<10;i++){
cout<for(j=1;j<=i;j++)cout<cout<}
return0;
}
7./*约瑟夫(Josephus)问题:
n个人围坐成一圈,从1开始顺序编号;游戏开始,从第一个人开始由1到m循环报数,报到m的人退出圈外,问最后留下的那个人原来的序号。
[分析]本题首先要定义一个数组,其元素个数为n。
n定义为常变量,以便定义数组。
数组元素的值标识该人是否出局,1在圈内,0出局。
值为0的元素不参加报数。
可用一个整型数k做计数器,采用倒计数,记录留下的人数。
[提示]数组是线性排列的,而人是围成圈的,用数组表示要有一种从数组尾部跳到其头部的技巧,即下标加1除以n求余数。
#include
usingnamespacestd;
constintn=100;//参加人数可以在此修改
constintm=58;//循环报数值可以在此修改
intmain(){
charjose[n];
inti,j=0,k;
for(i=0;ifor(k=n;k>=1;k--){
i=0;
while
(1){
if(jose[j]==1){
i++;
if(i==m){
jose[j]=0;
break;
}
}
j=(j+1)%n;
}
}
cout<<"最后留下的那个人原来的序号:
"<return0;
}