Episode3---【C语言]第二月度总结-创新互联

为龙里等地区用户提供了全套网页设计制作服务,及龙里网站建设行业解决方案。主营业务为成都网站设计、成都网站制作、龙里网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!一、课程进度

     \;\; 这一个月,我们学习了函数与预处理、数组的定义及常用字符串处理函数、指针及指针变量的特性及优点…老师说C++课程到了第一个重要的难点,希望同学们努力理解,多动手。

二、部分习题 1.用递归方法求n阶勒让德多项式的值。

递归公式为 p n ( x ) = {      1 ,                                                                                                                                    ( n = 0 )      x ,                                                                                                                                    ( n = 1 ) ( ( 2 n − 1 ) x − p n − 1 ( x ) − ( n − 1 ) p n − 2 ( x ) ) / n ,          ( n > 1 ) p_{n}\left ( x \right )=\left\{\begin{matrix}\;\;1, \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; (n=0)\\ \;\;x,\; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; (n=1)\\ ((2n-1)x-p_{n-1}\left ( x \right )-(n-1)p_{n-2}(x))/n,\; \; \; \; (n>1) \end{matrix}\right. pn​(x)=⎩⎨⎧​1,(n=0)x,(n=1)((2n−1)x−pn−1​(x)−(n−1)pn−2​(x))/n,(n>1)​

#includeusing namespace std;
float p(int n, int x)
{int t = 0;
	if (n == 0)
		return 1;
	else if (n == 1)
		return x;
	else if (n >1)
		return ((2*n-1)*x-p(n-1,x)-(n-1)*p(n-2,x))/n;
}
int main()
{int n, x;
	float result;
	cout<< "请输入勒让德多项式的结束与未知量:";
	cin >>n >>x;
	result = p(n, x);
	cout<< "值为:"<< result;
	return 0;
}
2.写一个函数验证哥德巴赫猜想。

一个不小于6的偶数可以表示为两个素数之和,如6=3+3,8=3+5,10=3+7,···,在主函数中输入一个不小于6的偶数n,然后调用函数gotbaha,在gotbaha函数中再次调用prime函数,prime函数的作用是判别一个数是否为素数。在gotbaha函数中输出以下形式的结果:
34=3+31。

#include#includeusing namespace std;
bool prime(int n)
{int i;
	for (i = 2; i< sqrt(n); i++)
	{if (n % i == 0)
			break;
	}
	if (i >sqrt(n))
		return true;
	else
		return false;
}
void gotbaha(int x)
{int j;
	for (j = 2; j<= x / 2; j++)
	{if(prime(j)==true&&prime(x-j)==true)
		{	cout<< x<< "="<< j<< "+"<< x - j;
			break;
		}
	}
}
void main()
{int n;
	cout<< "请输入一个不小与6的偶数:";
	cin >>n;
	gotbaha(n);
}
3.Hanoi(汉诺)塔问题是一个经典的数学问题。

有三个塔座A、B、C,开始时A座上有64个盘子,盘子大小互不相等,大的在下,小的在上。现每次移动一个盘子,在移动过程中小盘不能在大盘下方,要利用B塔座,将这64个盘子全部按“金字塔”形式移到C塔座。编程序打印出移动步骤。

     \;\; 首先分析一下,汉诺塔问题的重点在于如何利用B塔座将A塔座上的盘子全部放至C塔座。容易知道,n个盘子的移动需要 ( 2 n − 1 ) (2^n-1) (2n−1)步,但本题需要打印出每一步。
     \;\; 分析解题思路:将64个盘子按照从大到小顺序,由大到小依次排序123…不妨从最后一步反向分析,要将64个盘子移到C盘,则需要让64从A盘移到C盘,也就意味着1263需要全部位于B盘,且从小到大依次排序。于此,我们便将这64个盘子转化为了如何将63个盘子移到B盘,也就是将63个盘子借助C盘移到B盘再将64移到C盘,最后借助A盘将B盘的63个盘子全部移到C盘。

在这里插入图片描述
在这里插入图片描述
     \;\; 其实,汉诺塔的难点已经解释清楚了,但如何清晰简洁地写出一个程序还是不容易思考的⊙﹏⊙∥(即如何将每一个看似不同的步骤以其类似的特点进行整合,通过改变某一个或两个实参,来实现同一函数不同结果的过程)

可写程序如下:

void move(char a, char b)
{cout<< a<< "→"<< b<<" ";
}
void Hanoi(int n, char x, char y, char z)
{if (n == 1)
		move(x, z);
	else
	{Hanoi(n - 1, x, z, y);
		move(x, z);
		Hanoi(n - 1, y, x, z);
	}
}
int main()
{int n;
	cout<< "请输入盘数:";
	cin >>n;
	cout<< "步骤如下:\n";
	Hanoi(n, 'A', 'B', 'C');
	return 0;
}

为方便观察结果,我们输入6来尝试一下,则结果如下:

在这里插入图片描述
     \;\; 综上,函数巧妙地利用参数的改变,来实现将n个盘子 A → B C A\overset{B}{\rightarrow}C A→BC, A → C B A\overset{C}{\rightarrow}B A→CB,···      \;\; 这样,我们就通过短短24行代码写出了n个盘子所需的全部步骤。

三、总结

     \;\; 最后,希望我讲的足够清楚,帮到大家就好了( •̀ ω •́ )y,我会继续努力的。

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


网站名称:Episode3---【C语言]第二月度总结-创新互联
当前链接:http://abwzjs.com/article/pipjd.html