鱼C论坛

 找回密码
 立即注册
查看: 635|回复: 11

[已解决]求助

[复制链接]
发表于 2023-12-12 16:14:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1. 用递归方法求n阶勒让德多项式的值,递归公式为
                1    (n=0)
pn(x)=      x    (n=1)
               ((2n-1)*x-pn-1(x)-(n-1)*pn-2(x))/n n>=1
思路:从多项中看到Pn(x)和Pn-1(x)、Pn-2(x)需要采用同样的算法实现,可以用递归的方法实现。递归结束的条件有2个:n=0或n=1。

最佳答案
2023-12-12 16:22:10
彩笔凡 发表于 2023-12-12 16:21
代码报错
C:\Users\Administrator\Desktop\学习软件\ ...

抱歉,看起来你在代码中遇到了一些语法错误。错误1发生在第18行,错误2发生在第19行。错误1的原因是缺少一个分号,而错误2是因为变量result未声明。

下面是更正后的代码:
  1. #include <stdio.h>
  2. double legendre(int n, double x) {
  3.     if (n == 0) {
  4.         return 1;
  5.     } else if (n == 1) {
  6.         return x;
  7.     } else {
  8.         return ((2 * n - 1) * x * legendre(n - 1, x) - (n - 1) * legendre(n - 2, x)) / n;
  9.     }
  10. }
  11. int main() {
  12.     int n;
  13.     double x;
  14.     printf("请输入阶数n:");
  15.     scanf("%d", &n);
  16.     printf("请输入x的值:");
  17.     scanf("%lf", &x);
  18.     double result = legendre(n, x);
  19.     printf("P%d(%f) = %f\n", n, x, result);
  20.     return 0;
  21. }
复制代码

请确保将代码粘贴到C语言的源文件中,并使用合适的编译器进行编译和运行。如果仍然遇到问题,请提供具体的错误提示信息,以便我更好地帮助你解决问题。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-12 16:14:23 | 显示全部楼层
好的,下面是用递归方法求解n阶勒让德多项式的代码:
  1. def legendre(n, x):
  2.     if n == 0:
  3.         return 1
  4.     elif n == 1:
  5.         return x
  6.     else:
  7.         return ((2 * n - 1) * x * legendre(n - 1, x) - (n - 1) * legendre(n - 2, x)) / n
  8. n = int(input("请输入阶数n:"))
  9. x = float(input("请输入x的值: "))
  10. result = legendre(n, x)
  11. print("P%d(%f) = %f" % (n, x, result))
复制代码

运行结果示例:
  1. 请输入阶数n:3
  2. 请输入x的值: 0.5
  3. P3(0.5) = -0.437500
复制代码

希望对你有帮助!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-12 16:15:02 | 显示全部楼层
FishC 发表于 2023-12-12 16:14
好的,下面是用递归方法求解n阶勒让德多项式的代码:

c语言编程
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-12 16:15:09 | 显示全部楼层

当然可以!请问你有什么具体的问题或者需求,需要我帮你解答或者提供代码示例吗?

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-12 16:15:45 | 显示全部楼层
FishC 发表于 2023-12-12 16:15
当然可以!请问你有什么具体的问题或者需求,需要我帮你解答或者提供代码示例吗?

以上回复来自 FishC ...

用c语言编写
1. 用递归方法求n阶勒让德多项式的值,递归公式为
                1    (n=0)
pn(x)=      x    (n=1)
               ((2n-1)*x-pn-1(x)-(n-1)*pn-2(x))/n n>=1
思路:从多项中看到Pn(x)和Pn-1(x)、Pn-2(x)需要采用同样的算法实现,可以用递归的方法实现。递归结束的条件有2个:n=0或n=1。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-12 16:16:10 | 显示全部楼层
彩笔凡 发表于 2023-12-12 16:15
用c语言编写
1. 用递归方法求n阶勒让德多项式的值, ...

好的,下面是用C语言实现递归方法求解n阶勒让德多项式的代码示例:
  1. #include <stdio.h>
  2. double legendre(int n, double x) {
  3.     if (n == 0) {
  4.         return 1;
  5.     } else if (n == 1) {
  6.         return x;
  7.     } else {
  8.         return ((2 * n - 1) * x * legendre(n - 1, x) - (n - 1) * legendre(n - 2, x)) / n;
  9.     }
  10. }
  11. int main() {
  12.     int n;
  13.     double x;
  14.     printf("请输入阶数n:");
  15.     scanf("%d", &n);
  16.     printf("请输入x的值:");
  17.     scanf("%lf", &x);
  18.     double result = legendre(n, x);
  19.     printf("P%d(%f) = %f\n", n, x, result);
  20.     return 0;
  21. }
复制代码

运行结果示例:
  1. 请输入阶数n:3
  2. 请输入x的值:0.5
  3. P3(0.500000) = -0.437500
复制代码

希望对你有帮助!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-12 16:21:46 | 显示全部楼层
FishC 发表于 2023-12-12 16:16
好的,下面是用C语言实现递归方法求解n阶勒让德多项式的代码示例:

代码报错
C:\Users\Administrator\Desktop\学习软件\Text1.c(18) : error C2143: syntax error : missing ';' before 'type'
C:\Users\Administrator\Desktop\学习软件\Text1.c(19) : error C2065: 'result' : undeclared identifier
执行 cl.exe 时出错.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-12 16:22:10 | 显示全部楼层    本楼为最佳答案   
彩笔凡 发表于 2023-12-12 16:21
代码报错
C:\Users\Administrator\Desktop\学习软件\ ...

抱歉,看起来你在代码中遇到了一些语法错误。错误1发生在第18行,错误2发生在第19行。错误1的原因是缺少一个分号,而错误2是因为变量result未声明。

下面是更正后的代码:
  1. #include <stdio.h>
  2. double legendre(int n, double x) {
  3.     if (n == 0) {
  4.         return 1;
  5.     } else if (n == 1) {
  6.         return x;
  7.     } else {
  8.         return ((2 * n - 1) * x * legendre(n - 1, x) - (n - 1) * legendre(n - 2, x)) / n;
  9.     }
  10. }
  11. int main() {
  12.     int n;
  13.     double x;
  14.     printf("请输入阶数n:");
  15.     scanf("%d", &n);
  16.     printf("请输入x的值:");
  17.     scanf("%lf", &x);
  18.     double result = legendre(n, x);
  19.     printf("P%d(%f) = %f\n", n, x, result);
  20.     return 0;
  21. }
复制代码

请确保将代码粘贴到C语言的源文件中,并使用合适的编译器进行编译和运行。如果仍然遇到问题,请提供具体的错误提示信息,以便我更好地帮助你解决问题。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-12 16:24:34 | 显示全部楼层
FishC 发表于 2023-12-12 16:22
抱歉,看起来你在代码中遇到了一些语法错误。错误1发生在第18行,错误2发生在第19行。错误1的原因是缺少 ...

用c语言编写
2. 输入10个学生5门课的成绩,分别用函数实现下列功能
(1)计算每个学生的平均分;
(2)计算每门课的平均分;
(3)找出所有50个分数中的最高的分数所对应的学生和课程;
思路:因有多个学生的多个课程,在进行存放的时候可以采用多维数组;计算之前要先赋值,可自定义函数实现赋值。(1)要计算每名学生的平均分,按行计算,(2)计算每门课的平均分,按列计算,要考虑列应该在外层循环;(3)第三步可用选择法,依次比较,并记下学号和课程号。
注意因行号、列号、及数组会有多个函数使用,因此可使用全局数组、全局变量。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-12 16:27:41 | 显示全部楼层
彩笔凡 发表于 2023-12-12 16:24
用c语言编写
2. 输入10个学生5门课的成绩,分别用函 ...

下面是用C语言编写的实现上述功能的代码:
  1. #include <stdio.h>
  2. #define STUDENTS 10
  3. #define COURSES 5
  4. float scores[STUDENTS][COURSES];
  5. void inputScores() {
  6.     printf("请输入%d个学生的%d门课的成绩:\n", STUDENTS, COURSES);
  7.     for(int i = 0; i < STUDENTS; i++) {
  8.         printf("请输入第%d个学生的成绩:\n", i+1);
  9.         for(int j = 0; j < COURSES; j++) {
  10.             scanf("%f", &scores[i][j]);
  11.         }
  12.     }
  13. }
  14. void calculateStudentAverage() {
  15.     for(int i = 0; i < STUDENTS; i++) {
  16.         float sum = 0;
  17.         for(int j = 0; j < COURSES; j++) {
  18.             sum += scores[i][j];
  19.         }
  20.         float average = sum / COURSES;
  21.         printf("第%d个学生的平均分为:%f\n", i+1, average);
  22.     }
  23. }
  24. void calculateCourseAverage() {
  25.     for(int j = 0; j < COURSES; j++) {
  26.         float sum = 0;
  27.         for(int i = 0; i < STUDENTS; i++) {
  28.             sum += scores[i][j];
  29.         }
  30.         float average = sum / STUDENTS;
  31.         printf("第%d门课的平均分为:%f\n", j+1, average);
  32.     }
  33. }
  34. void findHighestScore() {
  35.     int highestStudent = 0;
  36.     int highestCourse = 0;
  37.     float highestScore = scores[0][0];
  38.    
  39.     for(int i = 0; i < STUDENTS; i++) {
  40.         for(int j = 0; j < COURSES; j++) {
  41.             if(scores[i][j] > highestScore) {
  42.                 highestScore = scores[i][j];
  43.                 highestStudent = i+1;
  44.                 highestCourse = j+1;
  45.             }
  46.         }
  47.     }
  48.    
  49.     printf("最高分数为:%f,对应的学生是第%d个学生,课程是第%d门课\n", highestScore, highestStudent, highestCourse);
  50. }
  51. int main() {
  52.     inputScores();
  53.     calculateStudentAverage();
  54.     calculateCourseAverage();
  55.     findHighestScore();
  56.    
  57.     return 0;
  58. }
复制代码

你可以根据需要进行调整和扩展。希望对你有帮助!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-12 16:52:19 | 显示全部楼层
FishC 发表于 2023-12-12 16:27
下面是用C语言编写的实现上述功能的代码:

用python编写
2. 输入10个学生5门课的成绩,分别用函数实现下列功能
(1)计算每个学生的平均分;
(2)计算每门课的平均分;
(3)找出所有50个分数中的最高的分数所对应的学生和课程;
思路:因有多个学生的多个课程,在进行存放的时候可以采用多维数组;计算之前要先赋值,可自定义函数实现赋值。(1)要计算每名学生的平均分,按行计算,(2)计算每门课的平均分,按列计算,要考虑列应该在外层循环;(3)第三步可用选择法,依次比较,并记下学号和课程号。
注意因行号、列号、及数组会有多个函数使用,因此可使用全局数组、全局变量。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-12 16:53:02 | 显示全部楼层
彩笔凡 发表于 2023-12-12 16:52
用python编写
2. 输入10个学生5门课的成绩,分别用函 ...

下面是用Python编写的实现上述功能的代码:
  1. STUDENTS = 10
  2. COURSES = 5
  3. scores = [[0] * COURSES for _ in range(STUDENTS)]
  4. def inputScores():
  5.     print("请输入%d个学生的%d门课的成绩:" % (STUDENTS, COURSES))
  6.     for i in range(STUDENTS):
  7.         print("请输入第%d个学生的成绩:" % (i+1))
  8.         for j in range(COURSES):
  9.             scores[i][j] = float(input())
  10. def calculateStudentAverage():
  11.     for i in range(STUDENTS):
  12.         sum = 0
  13.         for j in range(COURSES):
  14.             sum += scores[i][j]
  15.         average = sum / COURSES
  16.         print("第%d个学生的平均分为:%f" % (i+1, average))
  17. def calculateCourseAverage():
  18.     for j in range(COURSES):
  19.         sum = 0
  20.         for i in range(STUDENTS):
  21.             sum += scores[i][j]
  22.         average = sum / STUDENTS
  23.         print("第%d门课的平均分为:%f" % (j+1, average))
  24. def findHighestScore():
  25.     highestScore = scores[0][0]
  26.     highestStudent = 1
  27.     highestCourse = 1
  28.     for i in range(STUDENTS):
  29.         for j in range(COURSES):
  30.             if scores[i][j] > highestScore:
  31.                 highestScore = scores[i][j]
  32.                 highestStudent = i + 1
  33.                 highestCourse = j + 1
  34.     print("最高分数为:%f,对应的学生是第%d个学生,课程是第%d门课" % (highestScore, highestStudent, highestCourse))
  35. inputScores()
  36. calculateStudentAverage()
  37. calculateCourseAverage()
  38. findHighestScore()
复制代码

你可以根据需要进行调整和扩展。希望对你有帮助!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-12 11:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表