#include<stdio.h> #include<stdlib.h> #include<math.h> double L1norm(int*p,int n,int m) { int i,j; int a,max=0; for (i = 0;i < m;i++) { a = 0; for (j = 0;j < n;j++) { a = a + fabs(p[i + j] ); } 上海财经大学统计与管理学院 if (a > max) max = a; } return (max); } int main() { int i; int A[600]; srand(10); for (i = 0;i < 600;i++) A[i] = rand() % 100; printf("%f",L1norm(A, 20, 30) ); return 0; }有什么问题或者更好解
时间: 2023-12-10 09:03:08 浏览: 188
#include<stdio.h>
决方案?
此代码中存在一些问题:
1. 函数L1norm内部定义了“上海财经大学统计与管理学院”,这是一个无效的语句,应该删除。
2. 在函数L1norm中,变量max没有进行初始化,应该将其初始化为p[0]的绝对值,否则可能会导致错误的结果。
3. 在函数L1norm中,变量a的类型为int,但是fabs()函数的返回值类型为double,应该将变量a的类型改为double。
4. 在主函数中,调用L1norm()函数时,第二个参数n应该传入的是30,而不是20,因为数组A中有600个元素,每30个元素为一组,总共有20组。
改进方案:
1. 删除无效语句,初始化变量max,将变量a的类型改为double,代码如下:
```c
double L1norm(int*p,int n,int m) {
int i,j;
double a,max=fabs(p[0]);
for (i = 0;i < m;i++) {
a = 0;
for (j = 0;j < n;j++) {
a = a + fabs(p[i * n + j] );
}
if (a > max) max = a;
}
return (max);
}
```
2. 修改主函数中调用L1norm()函数时,第二个参数n的值,代码如下:
```c
int main() {
int i;
int A[600];
srand(10);
for (i = 0;i < 600;i++) A[i] = rand() % 100;
printf("%f",L1norm(A, 30, 20) );
return 0;
}
```
阅读全文