超星高级语言程序设计实验作业 (实验02 分支与循环程序设计)(三)

超星高级语言程序设计实验作业

实验02 分支与循环程序设计(三)

注:以下内容仅供交流,代码都是本人自己写的,还请同学们先自己编写再进行交流。

11.勒让德多项式

题目描述:编一个程序,输入x、n,计算勒让德(Legendre)多项式的第 n 项。

在这里插入图片描述
输入:一个浮点数和一个整数,分别对应x和n(0<=n<=20)。
输出:一个浮点数,即勒让德多项式第n项的值,注意小数点后保留到第2位。
样例1:
输入:3.4 2
输出:16.84
样例2:
输入:3.4 10
输出:30143685.82
样例3:
输入:3.4 21
输出:23525972077722828.00

#include<stdio.h>
double lr(int n, double x) {
	double p=0, p1, p2;
	int k;
	if (n == 0) p = 1;
	else if (n == 1) p=x;
	else{
		p2 = x; p1 = 1;
		for (k = 2; k <= n; k++){
			p = ((2 * k - 1) / (double)k) * x * p2 - ((k - 1) / (double)k) * p1;
			p1 = p2;
			p2 = p;
		}
	}
	return p;
}
int main() {
	double x,sum=0;
	int n;
	scanf_s("%lf %d", &x, &n);
	sum = lr(n, x);
	printf("%.2lf", sum);
	return 0;
}

这道题MOOC上也有,但是它们不一样😭
有很多小伙伴 (包括我) 在这道题上卡了很长时间,用头发😅总结出来超星上大部分的浮点型都是用double类型用float精度不够最后几位会不一样😱
这道题代码可以用来过OJ但是最后一个样例结果不太一样。😣还要修改

12.数字金字塔

题目描述:编程序,制打印如下所示的n行数字金字塔(n由用户从键盘输入)。

在这里插入图片描述

1 2 3 4 5 6 7 8 9 0 9 8 7 6 5 4 3 2 1
输入:一个正整数 n (≤10).
输出:如上所示的类似数字金字塔。输出由数字 0~9构成的n行数字三角矩阵:其中第一行有1个数,第二行有3个数,依次类推,每个数字占用2位英文字符宽度,宽度不足2位的的在数字左侧补空格;整个数字三角阵,除必要的空格、数字、回车换行符,无多余字符。
样例1:
输入:1
输出:
1
样例2:
输入:3
输出:
1
1 2 1
1 2 3 2 1

#include<stdio.h>
int outl(int n) {
	int i;
	for ( i = 1; i < n; i++){
		printf("%2d", i);
	}
	if (n == 10) printf(" 0");
	else printf("%2d",n);
	for (i=i-1; i >0; i--){
		printf("%2d", i);
	}
	return 0;
}
int kongg(int n,int i) {
	int k;
	for ( k=1;k  <= (n-i) ; k++){
		printf("  ");
	}
	return 0;
}
int main() {
	int n,i;
	int out;
	scanf_s("%d", &n);
	for ( i = 1; i <=n; i++){
		out = kongg(n, i);
		out = outl(i);
		if (i < n) printf("\n");
	}
	return 0;
}

题目要求是最中间的列对齐。

13.计算 e^x

题目描述:请计算上述序列前100项的和
GJBook3-04-02.jpg

输入:一个浮点数,对应x值。
输出:一个浮点数,即e^x的近似值,小数点后保留到第2位。
注:本题不允许使用math.h头文件和相关的pow和exp等函数。
样例1:
输入:0
输出:1.00
样例2:
输入:4.3
输出:73.70

#include<stdio.h>
float gx(float x, int n) {
	int i; float sum=1;
	for ( i = 1; i <= n; i++){
		sum = sum * x / i;
	}
	return sum;
}
int main() {
	float x,m=0,out=0;
	scanf_s("%f", &x);
	for (size_t i = 0; i <= 100; i++){
		m = gx(x, i);
		out = out + m;
	}
	printf("%.2f", out);
	return 0;
}

唯一要注意的就是不能用math.h

14.公式累乘

题目描述:用如下的展开式计算当n为某给定值时,圆周率π的值。

GJBook3-04-0102.jpg

输入:一个正整数n (n<100000)
输出:一个浮点数,保留小数点后10位。
样例1:
输入:1000
输出:3.1408077460
样例2:
输入:10000
输出:3.1415141187

#include<stdio.h>
double gx(double i) {
	double jieg;
	jieg = 4 * i * i / (2 * i - 1) / (2 * i + 1);
	return jieg;
}
int main() {
	int n,i;
	double sum;
	scanf_s("%d", &n);
	sum = 2;
	for ( i = 1; i <= n; i++){
		sum = sum * gx(i);
}
	printf("%.10lf", sum);
	return 0;
}

15.公式累加

题目描述:用如下的展开式计算当n为某给定值时,sh(x)的值。
Exp02-Enhance03.jpg
编写程序,对上面的公式读入x,输出序列的和直到尾项 小于10^-5。
输入:一个浮点数作为x的值
输出:一个浮点数,保留小数点后6位。
样例1:
输入:1
输出:1.175198
样例2:
输入:1.5
输出:2.129277

#include<stdio.h>
#include<math.h>
double fm( double x, double n) {
	double sum=1; 
	int i;
	for (i=1;i<=2*n+1; i++){
		sum = sum * x / i;
	}
	return sum;
}
int main() {
	double out, m;
	double x;
	int i = 1;
	scanf_s("%lf", &x);
	out = 0; m = x;
	for (i = 1;fabs(m)>=1e-5; i++){
		out = out + m;
		m = fm(x, i);
}
printf("%.6lf", out);
return 0;
}

这道题啊,卡了一个星期测试的时候结果跟给的样例一样,但是提交后是有两个通过三个不通过,我想了一个星期都没事想出来,最后问了老师
我 犯 了 个 低 级 的 错 误

for (i = 1;fabs(m)>=1e-5; i++)

这句中是判断最后一项是否小于10^-5,应该写成1e-5结果我写成10e-5了😭,还有最后一项的值m可能小于0,因此要写绝对值
希望年轻人耗子尾汁,不要犯我这样的错误。😬

  • 24
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值