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个盘子按照从大到小顺序,由大到小依次排序1
2
3
…不妨从最后一步反向分析,要将64个盘子移到C盘,则需要让64
从A盘移到C盘,也就意味着1
2
…63
需要全部位于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://pwwzsj.com/article/pipjd.html