综合练习四
问题 A: 多项式求和
题目描述
多项式的描述如下:1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + ...,现在请你求出该多项式的前n项的和。
输入要求
输入数据由2行组成,首先是一个正整数m(m<100),表示测试实例的个数,第二行包含m个正整数,对于每一个整数(不妨设为n,n<1000),求该多项式的前n项的和
输出要求
对于每个测试实例n,要求输出多项式前n项的和。每个测试实例的输出占一行,结果保留2位小数。
假如输入
3
2 3 4
应当输出
0.50
0.83
0.58
#include<stdio.h> int main(void) { int m,n,a,i; int x; double sum,item; scanf("%d",&m); for(a=1;a<=m;a++){ scanf("%d ",&n); x=1; sum=0; item=1.0; for(i=1;i<=n;i++){ sum=sum+item; x=-x; item=x*1.0/(i+1); } printf("%.2f\n",sum); } return 0; }
问题 B: 计算矩阵各行的和
题目描述
输入2个正整数m和n(1≤m≤6,1≤n≤6),然后输入矩阵a(m行n列)中元素,分别计算并输出各行元素之和。
输入要求
有多组测试数据,第一行输入k,k为测试的矩阵组数,第二行输入m和n,分别表示矩阵的行数和列数,然后输入mxn的矩阵元素。
输出要求
每行输出矩阵各行的元素之和,每个数据之间以空格隔开。
假如输入
1
3 3
1 2 3
4 5 6
7 8 9
应当输出
6 15 24
#include<stdio.h> int main(void) { int k,m,n,i,b,j,sum; int a[6][6]; scanf("%d",&k); for(b=1;b<=k;b++){ scanf("%d %d",&m,&n); for(i=0;i<m;i++) for(j=0;j<n;j++) scanf("%d",&a[i][j]); for(i=0;i<m;i++){ sum=0; for(j=0;j<n;j++) sum=sum+a[i][j]; printf("%d ",sum); } } return 0; }
问题 C: 用泰勒展开式计算sin
题目描述
用泰勒展开式计算sin,泰勒展开式如下:
当最后一项的绝对值小于0.00001时,累加结束
输入要求
输入1个正整数x
输出要求
输出利用展开式算出的sin(x)值,保留6位小数
假如输入
30
应当输出
0.500000
提示const double PI=3.1415926;
#include<stdio.h> #include<math.h> #define P 3.1415926 double fact(int m); int main(void) { int a,m; double item,sum,b,c; double x,y; scanf("%lf",&y); x=P/180*y; sum=0; item=1.0; a=1; m=1; while(fabs(item)>=0.00001){ b=a*pow(x,m); c=fact(m); item=b/c; sum=sum+item; m=m+2; a=-a; } printf("%.6f\n",sum); return 0; } double fact(int m) { int z; double result; result=1; for(z=1;z<=m;z++) result=result*z; return result; }