? ? 【问题描述】
已知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) = 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;
}
? ? 前几题不会太难,主要在于理解,写代码前分析清楚,思路找明白很重要。