c语言修改,求大神帮忙实在不会!!!

时间:2022-01-16 14:11:05
 #include<stdio.h>
  void main()
  {
int a,b,n,l[n],i[n],s[15]={0};
printf("请输入起点距 河底高程 测点个数:");
scanf("%f£¬%f£¬%d",&l[n],&i[n],&n); 
int A[n][15];
int h[15] = {742,752,762,772,782,792,802,812,822,832,842,852,862,872,882};
a>=1 && a<=15;
b>=1 && b<=n;
    if(h[a]<=i[b],h[a]<=i[b+1])
A[b][a]=0;
else if(h[a]>=i[a],h[a]>=i[b+1])
A[b][a]=(l[b+1]-l[b])*(2*h[a]-i[b]-i[b+1])/2;
else if(h[a]<=i[b])
A[b][a]=(l[b+1]-l[b])*(h[a]-i[b+1])*(h[a]-i[b+1])/(i[b]-i[b+1])/2;
else
A[b][a]=(l[b+1]-l[b])*(h[a]-i[b])*(h[a]-i[b])/(i[b+1]-i[b])/2; 
for (a= 0; a < n; a++);
{
        s[a]=s[a]+A[b][a];
}
printf("过水断面面积s=%8.2f\n",s[15]);  
}

显示的错误有
- Win32 Debug--------------------
Compiling...
cpp(4) : error C2057: expected constant expression
cpp(4) : error C2466: cannot allocate an array of constant size 0
cpp(4) : error C2133: 'l' : unknown size
cpp(4) : error C2057: expected constant expression
cpp(4) : error C2466: cannot allocate an array of constant size 0
cpp(4) : error C2133: 'i' : unknown size
cpp(7) : error C2057: expected constant expression
cpp(7) : error C2466: cannot allocate an array of constant size 0
cpp(7) : error C2133: 'A' : unknown size

º

8 个解决方案

#1


这几个定义都是不行的int l[n],i[n],int A[n][15];里面的n必须是个常量
比如int l[5];
或者
const int nn = 5;
int i[nn]; 

#2


一堆错误 c语言修改,求大神帮忙实在不会!!!

#3


数组必须定义为确定长度

#4



const int n =4; // 在申明l[n],i[n]之前,需要给n一个常值
int a,b,l[n],i[n],s[15]={0};



a>=1 && a<=15;                // 编译没有问题,但是不知道要干什么用!
b>=1 && b<=n;                  // 编译没有问题,但是不知道要干什么用!

#5


但是有一个问题,我做的是很多断面,每个断面n不一样,怎么办?

#6


malloc、free

new[]、delete[]

#7


如果数组大小是运行时才能确定,需要动态分配内存
另外int a,b,n, l[n],i[n],s[15]={0}; 这里l都不知道分配的是多大!

#8


#include <stdio.h>
void main() {
    int a,b,c,n,l[16],i[16],s[16]={0};
    int A[16][15];
    int h[15] = {742,752,762,772,782,792,802,812,822,832,842,852,862,872,882};
    printf("测点个数n:\n");
    scanf("%d",&n);
    if (n<2 || 15<n) {
        printf("2<=n<=15\n");
        return;
    }
    printf("请输入起点距 河底高程:\n");
    scanf("%d%d",&l[n],&i[n]);
    for (a=1;a<=15;a++) {
        for (b=1;b<=n;b++) {
            if(h[a]<=i[b] && h[a]<=i[b+1])
                A[b][a]=0;
            else if(h[a]>=i[a] && h[a]>=i[b+1])
                A[b][a]=(l[b+1]-l[b])*(2*h[a]-i[b]-i[b+1])/2;
            else if(h[a]<=i[b])
                A[b][a]=(l[b+1]-l[b])*(h[a]-i[b+1])*(h[a]-i[b+1])/(i[b]-i[b+1])/2;
            else
                A[b][a]=(l[b+1]-l[b])*(h[a]-i[b])*(h[a]-i[b])/(i[b+1]-i[b])/2;
            for (c=0;c<n;c++) {
                s[c]=s[c]+A[b][a];
            }
        }
    }
    printf("过水断面面积s=%d\n",s[15]);
}

#1


这几个定义都是不行的int l[n],i[n],int A[n][15];里面的n必须是个常量
比如int l[5];
或者
const int nn = 5;
int i[nn]; 

#2


一堆错误 c语言修改,求大神帮忙实在不会!!!

#3


数组必须定义为确定长度

#4



const int n =4; // 在申明l[n],i[n]之前,需要给n一个常值
int a,b,l[n],i[n],s[15]={0};



a>=1 && a<=15;                // 编译没有问题,但是不知道要干什么用!
b>=1 && b<=n;                  // 编译没有问题,但是不知道要干什么用!

#5


但是有一个问题,我做的是很多断面,每个断面n不一样,怎么办?

#6


malloc、free

new[]、delete[]

#7


如果数组大小是运行时才能确定,需要动态分配内存
另外int a,b,n, l[n],i[n],s[15]={0}; 这里l都不知道分配的是多大!

#8


#include <stdio.h>
void main() {
    int a,b,c,n,l[16],i[16],s[16]={0};
    int A[16][15];
    int h[15] = {742,752,762,772,782,792,802,812,822,832,842,852,862,872,882};
    printf("测点个数n:\n");
    scanf("%d",&n);
    if (n<2 || 15<n) {
        printf("2<=n<=15\n");
        return;
    }
    printf("请输入起点距 河底高程:\n");
    scanf("%d%d",&l[n],&i[n]);
    for (a=1;a<=15;a++) {
        for (b=1;b<=n;b++) {
            if(h[a]<=i[b] && h[a]<=i[b+1])
                A[b][a]=0;
            else if(h[a]>=i[a] && h[a]>=i[b+1])
                A[b][a]=(l[b+1]-l[b])*(2*h[a]-i[b]-i[b+1])/2;
            else if(h[a]<=i[b])
                A[b][a]=(l[b+1]-l[b])*(h[a]-i[b+1])*(h[a]-i[b+1])/(i[b]-i[b+1])/2;
            else
                A[b][a]=(l[b+1]-l[b])*(h[a]-i[b])*(h[a]-i[b])/(i[b+1]-i[b])/2;
            for (c=0;c<n;c++) {
                s[c]=s[c]+A[b][a];
            }
        }
    }
    printf("过水断面面积s=%d\n",s[15]);
}