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

发布时间:2024年01月14日
第一题:
?泰勒展开式求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  <bits/stdc++.h>
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)="<<fixed<<setprecision(5)<<sum;	
	
	return 0;
}
第一题变式:
泰勒展开式求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  <bits/stdc++.h>
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)="<<fixed<<setprecision(5)<<sum;	
	
	return 0;
}
本题主要知识点:

? ? (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<n<3000),输出n!末尾0的个数。

【输入形式】

5

【输出形式】

1

【输入形式】

25

【输出形式】

6

代码:
#include <bits/stdc++.h>
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<n<3000),输出n!最后不等于0的两位数。

【输入形式】

5

【输出形式】

12

【输入形式】

7

【输出形式】

04

?代码:
#include <stdio.h>
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<n<27),代表要打印图形的高度,要求打印出下列图形。

【输入形式】

3

【输出形式】

代码:
#include <stdio.h>

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<n<27),代表要打印图形的高度,要求打印出下列图形。

【输入形式】

3

【输出形式】

代码:?
#include <stdio.h>

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;
}
上半张试卷总结:

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

文章来源:https://blog.csdn.net/2301_80284843/article/details/135575135
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。