大学期末考前复习卷(上)

第一题:
 泰勒展开式求sin(x)

    【问题描述】

已知sin(x)的泰勒展开式为:

sin(x) = x/1! - x^3/3! + x^5/5! - x^7/7! + ……

当某一项的绝对值小于ξ时,停止计算。

输入x及ξ的值,输出sin(x)的值,小数点后保留5位小数。

【输入形式】

1.7 0.1

【输出形式】

sin(x) = 0.99949

代码:
#include  
using namespace std;
int main()
{
	double x,mi,jc=1,g,sshu,sum=0,h=2;
	cin>>x>>g;	
    for(int i=1;;i=i+2)
    {
    	mi = pow(x,i);
    	for(double j=2;j<=i;j++)
    	{
    		 jc=jc*j;
		}
		
		sshu=mi/jc;
		jc=1;
		if((fabs(sshu))<(g))break;
		sum=pow(-1,h)*(sshu)+sum;
		h++;	
	}
	cout<<"sin(x)="<
第一题变式:
泰勒展开式求cos(x)

【问题描述】

已知cos(x)的泰勒展开式为:

cos(x) = x^0/0! - x^2/2! + x^4/4! - x^6/6! + ……

当某一项的绝对值小于ξ时,停止计算。

输入x及ξ的值,输出cos(x)的值,小数点后保留5位小数。

【输入形式】

1.7 0.1

【输出形式】

cos(x) = -0.09700

代码:
#include  
using namespace std;
int main()
{
	double x,mi,jc=1,g,sshu,sum=0,h=2;
	cin>>x>>g;	
    for(int i=0;;i=i+2)
    {
    	mi = pow(x,i);
    	for(double j=1;j<=i;j++)
    	{
    		 jc=jc*j;
		}
		
		sshu=mi/jc;
		jc=1;
		if((fabs(sshu))<(g))break;
		sum=pow(-1,h)*(sshu)+sum;
		h++;	
	}
	cout<<"cos(x)="<
本题主要知识点:

    (1)灵活运用for循环(遇到break;跳出for循环)

 for(int i=0;;i=i+2)          // 遇到break;跳出循环

      (2)绝对值函数

fabs();

     (3)变号

int n=2;
pow(-1,h);
h++;
第二题: 

.阶乘末尾0的个数

【问题描述】

输入正整数n(2

【输入形式】

5

【输出形式】

1

【输入形式】

25

【输出形式】

6

代码:
#include 
using namespace std;
int main()
{
	int n, sum = 0, i, t;
	scanf("%d", &n);
	for(i = 5; i <= n; i += 5)
	{t = i;
		while(t % 5 == 0)
		{
			sum ++;
			t /= 5;
		}
	}
	printf("%d", sum);
	return 0;
}
本题主要在于理解,代码很简单的 :           

              /*

  n! = 1 * 2 * 3 * … * n

 其中每个乘数可以分解为质因子的积,如4=2*2,15=3*5。

 由此上式可以写成若干个质数的积,而在所有质数中,只有2*5=10,最终结果末尾会多加一个0。

而2出现的频率显然高于5出现的频率,所以,我们可以找到从1~n的每个数中,5作为因子的个数。

如15中包含一个5,最终结果里末尾0的个数加1,25包含2个5,最终结果里末尾0的个数加2。

               */

第二题变式:
   阶乘的尾数

【问题描述】

输入正整数n(2

【输入形式】

5

【输出形式】

12

【输入形式】

7

【输出形式】

04

 代码:
#include 
int main()
{
int n, sum = 1, i;
scanf("%d", &n);
//计算n!最后不等于0的两位数,结果存于sum中。
for(i = 2; i <= n; i ++)
{
sum *= i;
while(sum % 10 == 0)
sum /= 10;
sum %= 100;
}
printf("%02d", sum);
return 0;
}
	
 本题也是注意理解,代码很简单,理解题目非常重要

第三题:
打印右字母三角形

【问题描述】

输入一个正整数n(0

【输入形式】

3

【输出形式】

大学期末考前复习卷(上)_第1张图片

代码:
#include 

int main()
{
int n, i, j;
char c = 'A';
scanf("%d", &n);
for(i = 0; i < n; i ++)	
{
c = 'A';
for(j = 0; j < n - i - 1; j ++)
	printf(" ");
	for(j = 0; j <= i; j ++)
	printf("%c", c+j);
	printf("\n");
	}
return 0;
}
本题主要知识点:

     (1)递减空格

for(j = 0; j < n - i - 1; j ++)
	printf(" ");

递减时for循环中第一个条件为初始值(比较小),第二个条件为递减值,第三个条件x++

递增时for循环中第一个条件为初始值(比较小),第二个条件为递增值 ,第三个条件x++,x--时相反

     (2)充分运用ascll码

char c = 'A';
c = 'A';
for(j = 0; j <= i; j ++)
	printf("%c", c+j);

   (3)还有一种方法,就是将A---Z  26个字母储存在数组中,然后输出。

第三题变式: 

打印右字母三角形

【问题描述】

输入一个正整数n(0

【输入形式】

3

【输出形式】

大学期末考前复习卷(上)_第2张图片

代码: 
#include 

int main()
{
	int n, i, j;
	char c = 'A';
	scanf("%d", &n);

	for(i = 0; i < n; i ++)	
	{
		c = 'A';
		for(j = 0; j < n - i; j ++)
			printf("%c", c+j);
		printf("\n");
	}
	return 0;
}
上半张试卷总结:

    前几题不会太难,主要在于理解,写代码前分析清楚,思路找明白很重要。

你可能感兴趣的:(大一新生C/C++入门程序作业,算法)