第四周任务

第三章作业

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条错误信息原因,并输入电脑形成文字)。


第一:课本习题

程序1:

/***************************
****计算并输出自然对数的值
  *************************/

#include <iostream>
using namespace std;

int main()
{
	double b=1,c=1,f=1;
	int a,d=1;
	while(!(b<1e-6))
	{
		for(a=1;a<=d;a++)
			c*=a;

		b=1/c;
		f+=b;
		c=1;
		d++;
	}
cout<<"e="<<f<<endl;
	return 0;
}


结果:2.71828

程序2:求圆周率

// lesion3-2.cpp : 定义控制台应用程序的入口点。
//功能:计算圆周率的值
#include "stdafx.h"
#include<iostream>
#include<cmath>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
	int a,b=0;
	double c=0,pi;
		for(a=1;1.0/a>=1e-8;a+=2)
		{
			c+=pow(-1,b)*(1.0/a);
			b++;
		}
		pi=4*c;
		cout<<"圆周率PI的值约为:"<<pi<<endl;
	return 0;
}
结果:圆周率PI的值约为:3.14159
程序3:编写程序,将输入的数分类显示

// lesion3-2.cpp : 定义控制台应用程序的入口点。
//功能:显示数据分类
#include "stdafx.h"
#include<iostream>
#include<cmath>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
	float a,b;
	int c,d=0;
	cout<<"please input a number"<<endl;
	cin>>a;
	for(b=10;b<a;b*=10)
	{
	if(a/b>1)
		c=1;
	d+=c;
	}
	switch(d)
	{
	case 0:cout<<a<<"is 0 to 10"<<endl;break;
	case 1:cout<<a<<"is 10 to 100"<<endl;break;
	case 2:cout<<a<<"is 100 to 1000"<<endl;break;
	default:
		cout<<a<<"is larger than 1000"<<endl;
	}
	return 0;
}

程序4:

// l.cpp : 定义控制台应用程序的入口点。
//功能:编程输出字符组成图形
#include "stdafx.h"
#include<iostream>
#include<iomanip>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
	cout<<setfill(' ')
		<<setw(7)<<"*"<<endl
		<<setw(9)<<"* * *"<<endl
		<<setw(11)<<"* * * * *"<<endl
		<<setw(13)<<"* * * * * * *"<<endl
		<<setw(11)<<"* * * * *"<<endl
		<<setw(9)<<"* * *"<<endl
		<<setw(7)<<"*"<<endl;
	return 0;
}


 

改进后的程序

// jkfgti8uy.cpp : Defines the entry point for the console application.
//gongneng:shuchulingxing

#include "stdafx.h"
#include<iostream>
using namespace std;

int main(int argc, char* argv[])
{
	int a,b,c,i,j;
	cout<<"请输入一个奇数"<<endl;
	cin>>a;
	i=a;
	for(a;a>=1;a--)
	{
		j=a-(i+1)/2;
		if(j>=0)
			j=j;
		else
			j=-j;
	{
		for(b=2*j;b>0;b--)
			cout<<" ";
		for(c=1;c<=i-2*j;c++)
			cout<<"* ";
		cout<<endl;
	}
	}
	return 0;
}



 

程序5:

// lesion3-2.cpp : 定义控制台应用程序的入口点。
//功能:习题9满足条件的最大值
#include "stdafx.h"
#include<iostream>
#include<cmath>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
	int a=0,b;
	for(b=1;b<=1000;)
	{
		a++;
		b+=pow(a,2);
		
	}
	cout<<"满足条件的最大值为"<<a-1<<endl;
	return 0;
}
结果:13

程序6:

// lesion3-2.cpp : 定义控制台应用程序的入口点。
//功能:习题10
#include "stdafx.h"
#include<iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
	float a=10000,b=0.01;
	int c;
	for(c=2;c<=30;c++)
	{
		b+=2*b;
		a+=10000;
	}
	cout<<"陌生人给了富翁"<<a/10000<<"万元"<<endl;
	cout<<"富翁给了陌生人"<<b/10000<<"万元"<<endl;
	return 0;
}
程序7:

// lesion3-2.cpp : 定义控制台应用程序的入口点。
//功能:习题11:九九乘法表
#include "stdafx.h"
#include<iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
	int a,b,c;
	for(a=1;a<=9;a++)
	{
		for(b=1;b<=a;b++)
		{
		c=b*a;
		cout<<b<<"x"<<a<<"="<<c<<"\t";
		}
		cout<<endl;
	}
	return 0;
}


第二:百鸡百钱

// lesion3-2.cpp : 定义控制台应用程序的入口点。
//功能:百鸡百钱问题

// lesion3-2.cpp : 定义控制台应用程序的入口点。
//功能:百鸡百钱问题
#include "stdafx.h"
#include<iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
	int a,b,c;
	for(a=0;a*5<=100;a++)
		for(b=0;(a*5+b*3)<=100;b++)
		{
		c=100-a-b;		//百鸡
		if((a*5+b*3+c/3==100)&&(c%3==0))	//百钱
			cout<<"公鸡有"<<a<<"只"
			<<"母鸡有"<<b<<"只"
			<<"小鸡有"<<c<<"只"<<endl;
		}
	return 0;
}
相比以前写的那个,这次写的比较简洁


第三:整数位

// lesion3-2.cpp : 定义控制台应用程序的入口点。
//功能:分辨一个数是几位数,并求每一位数之和
#include "stdafx.h"
#include<iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
	int a,b,c,d=0;
	cout<<"please input a number"<<endl;
	cin>>a;
	for(b=10;b<=a;b*=10)
	{
	if(a/b>1)
		c=1;
	d+=c;
            }
	cout<<"这是一个"<<d+1<<"位数"<<endl;
	d=0;
	for(b=b/10;b>=1;b=b/10)
	{
	c=a/b;
	d+=c;
	a%=b;
	}
	cout<<"各位数之和等于:"<<d<<endl;
	
	return 0;
}

第四:塔内建筑

// l.cpp : 定义控制台应用程序的入口点。
//功能:分辨一个数是几位数,并求每一位数之和
#include "stdafx.h"
#include<iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
	float x,y;
	cout<<"请输入点坐标,坐标值用空格键隔开"<<endl;
	cin>>x>>y;
	if(x<0)		//由于每个区域是对称的,所以可以将所有坐标转换到第一象限
		x=-x;	//这样就可以简化判断条件
	if(y<0)		//
		y=-y;	//
	if((x-2)*(x-2)+(y-2)*(y-2)<=1)
		cout<<"该点建筑高度为10米"<<endl;
	else
	cout<<"该点建筑高度为0米"<<endl;
	return 0;
}


第五:级数n项和

方法1:for循环

// l.cpp : 定义控制台应用程序的入口点。
//功能:求级数s=1!+2!+...+n!
#include "stdafx.h"
#include<iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
	int a,b,c,d,s=0;
	cout<<"你想计算到第几项?"<<endl;
	cin>>c;
	for(a=c;a>0;a--)
	{
		d=1;
	for(b=a;b>=1;b--)
		d*=b;
		s+=d;
	}
	cout<<"级数前"<<c<<"项之和为:"<<s<<endl;
	return 0;
}

方法2:while循环

// l.cpp : 定义控制台应用程序的入口点。
//功能:求级数s=1!+2!+...+n!
#include "stdafx.h"
#include<iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
	int a,b,c,d,s=0;
	cout<<"你想计算到第几项?"<<endl;
	cin>>a;
	b=a;
	while(b>0)
	{
		c=b;
		d=1;
	while(c>0)
	{
		d*=c;
		c--;
	}
	s+=d;
	b--;
	}
	cout<<"级数前"<<a<<"项之和为:"<<s<<endl;
	return 0;
}


第六:猴子

// l.cpp : 定义控制台应用程序的入口点。
//功能:猴子吃苹果
#include "stdafx.h"
#include<iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
	int a=10,b=1,c=0;
	for(a;a>1;a--)
	{
		c=2*(b+1);
		b=c;
	}
	cout<<"猴子第一天共摘了"<<c<<"个苹果"<<endl;
	return 0;
}

结果:1534
第七:求数列的和

// l.cpp : 定义控制台应用程序的入口点。
//功能:计算s[n]=a+aa+aaa+...的值
#include "stdafx.h"
#include<iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
	int a,n,c,s;
	cout<<"请输入一个数(0~9):"<<endl;
	cin>>a;
	cout<<"请输入要计算的位数n"<<endl;
	cin>>n;
	c=s=a;
	for(n;n>1;n--)
	{
	a*=10;
	c+=a;	//c=aa,c=aaa,c=aaaa...
	s+=c;
	}
	cout<<"s[n]="<<s<<endl;
	return 0;
}

第八:乘法表

同第一题程序7


第九:比赛名单

// l.cpp : 定义控制台应用程序的入口点。
//功能:编程输出字符组成图形
#include "stdafx.h"
#include<iostream>
using namespace std;
struct yidui
{char name[20];};
int _tmain(int argc, _TCHAR* argv[])
{
	yidui nam[4]={{"ChenLiu"},{"ZhaoQi"},{"SongBa"}};
	int z3,l4,w5;
	for(z3=2;z3>=0;z3--)
		for(l4=2;l4>=0;l4--)
			for(w5=0;w5<=2;w5++)
				if(z3!=l4&&l4!=w5&&w5!=z3)//对手不能相同
					if(z3!=0&&w5!=0&&w5!=2) //
						cout<<"ZhangSan and "<<nam[z3].name<<endl
						<<"LiSi and "<<nam[l4].name<<endl
						<<"WangWu and "<<nam[w5].name<<endl;
	return 0;
}


对于名字的输出,可以使用switch语句进行选择,但会使程序变得冗长;

穷举法能解决很多问题,但很显然在此题中很多计算是毫无意义的,我试图把计算规则添加进去以避开不必要的计算,提升程序执行效率,很可惜,这样通常得不偿失,因为添加规则也属于添加算法,并且还会使得程序冗长,真的没有两全之策吗?


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值