第二章 基本控制结构程序设计习题
3.13 用迭代法求方程x2+10cosx=0 的根,误差限为 10-5。迭代公式如下: 2 ? x 1n 0( x n sin x + cos x ) n nx n +1 = 2 xn ? 10 sin xn
解:迭代法也是用循环语句实现,数学上 #include
float x0,x1; int n=0; cout<<\输入初始近似值:\cin>>x1; do{
x0=x1;
x1=(x0*x0-10*(x0*sin(x0)+cos(x0)))/(2*x0-10*sin(x0));
//x0是上次算出的结果,x1用作保存新算出的
结果
n++;
}while((fabs(x1-x0) >e)&&(n<=1e5)); if(n>1e5)
cout<<\超出迭代1e5次\\n\
else cout<<\方程x*x+10*cos(x)=0的一个根为:\cout<<\方程误差为:\}
9
3.14 两队选手每队 5 人进行一对一的比赛,甲队为 A、B、C、D、E,乙队为 J、K、L、M、
N,经过抽签决定比赛配对名单。规定 A 不和 J 比赛,M 不和 D 及 E 比赛。列出所有可能 的比赛名单。
解:这是一个组合问题,使用穷举法。共有 5 个位置,设甲队 5 名队员位置不变,乙队改变 队员位置,进行配对。注意第 1 个位置可在 5 个队员中任选一个,以后的位置必须扣除已选 过的队员。并扣除不能配对的情况,即得所有可能的比赛名单。
#include
char st1[5]={'A','B','C','D','E'},st2[5]={'J','K','L','M','N'}; int i=0,j,k,l,m,n;
for(j=0;j<5;j++){//0号位
if(j==0) continue;//A不与J比赛,即st1[0]不与
st2[0]比赛
for(k=0;k<5;k++){//1号位
if(k==j) continue; for(l=0;l<5;l++){//2号位
if(l==j||l==k) continue;
for(m=0;m<5;m++){//3号位
if(m==j||m==k||m==l)
continue;
if(m==3) continue;//M不与D比赛,即st1[3]不与st2[3]比赛
for(n=0;n<5;n++){//4号位 if(n==3) continue;//M不与E比赛,即st1[4]不与st2[3]比赛
if(n==j||n==k||n==l||n==m) continue;
cout< cout< cout< cout< 3.15 编程模拟选举过程。假定四位候选人:zhang、wang、li、zhao,代号分别为 1、2、3、 4。选举人直接键入候选人代号,1~4 之外的整数视为弃权票,-1 为终止标志。打印各位候 选人的得票以及当选者(得票数超过选票总数一半)名单。 解:用 5 个元素的整型数组,分别放弃权票和各候选人的得票,然后用开关语句打印。 #include enum candidate{feipiao,zhang,wang,li,zhao}cand; int vote[5]={0},i,k=0,n; cin>>n; while(n!=-1){ k++; if(n>=1&&n<=4) vote[n]++; else vote[0]++; cin>>n; } for(i=0;i<5;i++){ c and=(candidate)i; switch(cand){ case feipiao: cout< if(vote[cand]>k/2) cout<<\当选\else cout< case wang:cout< if(vote[cand]>k/2) cout<<\当选\ 第二章 基本控制结构程序设计习题 else cout< li:cout< case zhao:cout< if(vote[cand]>k/2) cout<<\当选\else cout< 3.16 改造【例 3.11】,将运行结果(Fibonacii 数列的前 20 项)存入文件。 解:采用 3 步法。首先建立或打开一个输出文件,并与磁盘文件联系: ofstream ofile(\再按一定格式存 入数据:ofile< ifstream ifile(\再 按同一格式读入数据:ifile>>i>>j>>k>>l;等,并输出 最后关闭文件:file.close(); #include int fib0=0,fib1=1,fib2,i,j,k,l; char ch,a[256]; ofstream ofile(\ofile< fib2=fib0+fib1; ofile< } ofile.close(); cout<<\是否要将文件输出?Y或N\if(ch=='y'||ch=='Y'){ ifstream ifile(\while(1){ ifile>>i>>j>>k>>l;//由文件读入 11 第二章 基本控制结构程序设计习题 12 if(ifile.eof()!=0) break; cout< //屏幕显示 } ifile.close(); } } 3.17 改造【例 3.16】,将运行结果(100 以内素数)存入文件。 解:采用 4 步法。首先定义一个输出文件:ofstream ofile; 再打开该文件并与并与磁盘文件联系: ofile.open(\按一定格式把数据存入文件。最后关闭文件。效果与 3 步法相同。 读文件同样可用 3 步法或 4 步法。 #include int a[n],i,j; char ch,b[256]; ofstream ofile; ifstream ifile; for(i=0;i if(a[i]==0) continue; //该数已经置0,判断下一个数 for(j=i+1;j ofile.open(\t\int count=0; ofile<<\之间的素数:\for(i=0;i if(a[i]!=0){ ofile< tw(6)< if(count==0) ofile< pen(\i=0; while(ifile.get(b[i])){//不可用>>,它不能读白字符,