第三章作业
实验作业
1.完成课本每一个编程题。要求先画出流程算法图或N-S图,然后编程实现,有可能的话使用两种以上方法;
2.编程求“百钱百鸡”问题。(鸡翁一值钱五,鸡母 一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?)
3.编程输入一个整数,计算它是几位数字,分别输出每一位数字,并输出各个数位上数字之和。
4.在一个平面上,有四个圆柱形塔,塔底圆心坐标分别为(2,2)、(-2,2)、(-2,-2)、(2,-2),塔半径为1,塔高为10米,塔外无建筑物。编程,输入任一个点平面坐标,求该点建筑物的高度。
5.编程计算s=1!+2!+3!+......n!(其中n为整数,n!表示计算n阶乘),要求使用两种以上的方法。
6.猴子吃苹果问题:猴子第一天摘了若干个苹果,当时吃了一半,还不过隐,又多吃了一个。第二天,又吃掉余下的一半,又多吃一个。以后每一天,都是吃掉前一天余下的一半零一个。到第10天,只有一个苹果了。问猴子第一天共摘了多少个苹果?
7.计算s[n]=a+aa+aaa+aa...a(n个)的值。其中a是一个数字,n表示a的位数。例如,当a=1,n=5时,则要计算的表达式为
s[5]=1+11+111+1111+11111
8.打印九九乘法表。
9.两个羽毛队进行单打比赛,各出3个人。甲队为张三、李四、王五3个队员,已队为陈六、赵七、宋八3个队员。现已经抽签决定比赛名单,有人向队员打听比赛名单,张三说他不和陈六打,王五说他不和陈六和宋八打。请编程找出3对比赛名单。
10.积累调试程序经验,收集错误信息原因(每个同学收集3-5条错误信息原因,并输入电脑形成文字)。
习题5,求e的近似值
/*****求自然对数e的近似值*****/
#include<iostream>
using namespace std;
int n;
{ int a=1;
while (n>0)
{ a *= n;
n--;
}
return a;
}
int main()
{
int n=1;
double e=0,t=1;
for(;t>=1e-6;n++)
{
e+=t;
t=1.0/n;
}
cout<<"e="<<e<<endl;
return 0;
}
程序无法运行,出现了一个小错误,不知道怎么改。
习题6:求圆周率
/*****求圆周率的近似值*****/
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
double count=0,m=3,t=-1,z=1;
for(;fabs(z)>=1e-6;t=-t)
{
count+=z;
z=(1.0/m)*t;
m+=2;
}
cout<<"π="<<count*4<<endl;
return 0;
}
运行结果如图:
习题7:
/******求输入值的大小区域 *****/
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int i=0;
long int j;
float number,m;
while(1)
{
cout<<"请输入一个值:"<<endl;
cin>>number;
for(j=1;j<=number;j=10*j)
{
i++;
}
switch(i)
{
case 2:
cout<<number <<"is 10 to 100."<<endl;
break;
case 3:
cout<<number <<"is 100 to 1000."<<endl;
break;
default:
if(i<2)
cout<<number <<"小于10."<<endl;
if(i>3)
cout<<number <<"在1000以上."<<endl;
break;
}
i=0;
}
return 0;
}
运行结果:
3-8:
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int j,i;
for(i=1; i<=4; i++)
{
for(j=1; j<=5-i; j++)
cout<<setw(2)<<" ";
for(j=1;j<=2*i-1;j++)
cout<<setw(2)<<'*';
cout<<endl;
}
for(i=1;i<=3;i++)
{
for(j=4;j>=4-i;j--)
cout<<setw(2)<<" ";
for(j=4;j>=2*i-2;j--)
cout<<setw(2)<<'*';
cout<<endl;
}
return 0;
}
运行结果如下:
3-9:求值
#include <iostream>
using namespace std;
int main()
{
int n=1,count=0;
for(n=1;count<=1000;n++)
{
count+=n*n;
}
cout<<"符合条件的最大值n="<<n-1<<endl;
return 0;
}
运行编译不出
3-10:
#include<iostream>
using namespace std;
int main()
{
int t=0,x1=0;
double x2=0,m=0.01;
while(t!=31)
{
t++;
x1+=100000;
x2+=m;
m=m*2;
}
cout<<"30天后"<<endl;
cout<<"陌生人总共给富人"<<x1<<endl;
cout<<"富翁总共给陌生人"<<x2<<endl;
return 0;
}
老师,这个也是运行不了,
--------------------Configuration: 3-8 - Win32 Debug--------------------
Linking...
3-9.obj : error LNK2005: _main already defined in 3-8.obj
3-10.obj : error LNK2005: _main already defined in 3-8.obj
Debug/3-8.exe : fatal error LNK1169: one or more multiply defined symbols found
执行 link.exe 时出错.
3-8.exe - 1 error(s), 0 warning(s)
3-11:
#include<iostream>
using namespace std;
int main()
{
int i=1;
int t=1;
while(i<=9)
{
while(t<=i)
{
cout<<t<<"*"<<i<<"="<<i*t<<" ";
t++;
}
t=1;
cout<<endl;
i++;
}
return 0;
}
运行结果:
作业2:
/***************************************
**** 功能:求百钱百鸡问题 *****
***************************************/
#include<iostream>
using namespace std;
int main()
{
int i=0;
int a,b,c; //a,b,c分别储存鸡翁,鸡母,鸡雏的数量
double money;
cout<<"鸡翁一只钱五,鸡母一只钱三,鸡雏三只钱一。"<<endl;
cout<<"百钱买百鸡,问鸡翁、鸡母、鸡雏各几?"<<endl;
for(a=0;a<=20;a++)//总共100钱,最多20只
{
for(b=0;b<34;b++)
{
c=100-a-b;
money=5*a+3*b+c/3.0;
if(money==100)
{
i++;
cout<<endl;
cout<<"第"<<i<<"种情况"<<endl;
cout<<"鸡翁的数量a="<<a<<endl;
cout<<"鸡母的数量b="<<b<<endl;
cout<<"鸡雏的数量c="<<c<<endl;
}
}
}
return 0;
}
结果如下:
作业3:
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int n,count=0,i,m=0;
cout<<"please enter a number:"<<endl;
cin>>n;
while(n!=0)
{
i=n%10,m+=i,cout<<setw(2)<<i;
n=n/10,count++;
}
cout<<" 位数:"<<count<<" 各数位和:"<<m<<endl;
cout<<"由左往右依次为个位、十位、百位---"<<endl;
return 0;
}
运行结果:
作业4:
#include<iostream>
#include<cmath>
using namespace std;
int main ()
{
double x,y,x1,x2,x3,x4;
cout<<"请输入点的坐标x y"<<endl;
cin>>x>>y;
x1=sqrt(pow(x-2,2)+pow(y-2,2));
x2=sqrt(pow(x-2,2)+pow(y+2,2));
x3=sqrt(pow(x+2,2)+pow(y-2,2));
x4=sqrt(pow(x+2,2)+pow(y+2,2));
if(x1<=1||x2<=1||x3<=1||x4<=1)
cout<<"该点高度为10"<<endl;
else
cout<<"该点高度为0"<<endl;
return 0;
}
运行结果:
练习5:
/*****************************
**功能:计算1!+2!+3!+……+n!**
*****************************/
#include<iostream>
using namespace std;
int main()
{
int sum,i,j,k,n;
sum=0;
cout<<"计算1!+2!+3!+……+n!"<<endl;
cout<<"请输入整数n的值:";
cin>>n;
for(i=1;i<=n;i++)
{
k=1;
for(j=1;j<=i;j++)
k*=j;
sum+=k;
}
cout<<"经计算得:";
cout<<"sum="<<sum<<endl;
return 0;
}
运行结果:
练习6:
#include<iostream>
using namespace std;
int main()
{
int day=1,n=1;
for(;day<=9;day++)
{
n=2*(n+1);
}
cout<<"苹果数为:"<<n<<endl;
return 0 ;
}
运算结果:总共1534个苹果
练习7:
#include<iostream>
using namespace std;
int main()
{
int a,n,i,j,b=0;
long unsigned int s=0;
cout<<"计算s[n]=a+aa+aaa+aa...a(n个)的值"<<endl;
cout<<"请分别输入a和n的值";
cin>>a;
cin>>n;
for(i=1;i<=n;i++)
{
for(j=1;j<=i;j++)
{
b=b*10+a;
}
s+=b;
b=0;
}
cout<<"经计算得"<<"s["<<n<<"]="<<s<<endl;
return 0;
}
运算结果如下:
作业8:(如上3-11)
作业9:
#include<iostream>
using namespace std;
int main()
{
int m=0;
char i,j,k;
cout<<"将张三,李四,王五分别记为a,b,c"<<endl;
cout<<"将陈六,赵七,宋八分别记为A,B,C"<<endl;
for(i='A';i<='C';i++)
for(j='A';j<='C';j++)
for(k='A';k<='C';k++)
{
if(i!=j&&i!=k&&j!=k)
{
if(i!='A'&&k!='A'&&k!='C')
{
cout<<"比赛名单如下:"<<endl;
cout<<"a对抗"<<i<<" "<<"b对抗"<<j<<" "<<"c对抗"<<k<<" ";
}
}
}
return 0;
}
这个是直接复制别人的,运行结果如下:
2014/04/06