首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >求矩阵行和列的最大和,这是我得到的两个代码,一个是有效的,另一个是无效的,尽管数组初始化是相同的

求矩阵行和列的最大和,这是我得到的两个代码,一个是有效的,另一个是无效的,尽管数组初始化是相同的
EN

Stack Overflow用户
提问于 2014-03-26 20:18:27
回答 2查看 2.2K关注 0票数 0

在代码1中,数组运行时初始化工作正常,但在代码2中,尽管两个代码几乎相同,但情况并非如此

代码1:

代码语言:javascript
复制
#include<stdio.h>

int main()
{
    int n;
    scanf("%d",&n);
    int A[n][n],i,j;
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
            scanf("%d",&A[i][j]);
    }
    int sum=0, newsum=0;
    for(i=0;i<n;i++)
    {
        newsum = 0;
        for(j=0;j<n;j++)
        {  
            newsum = newsum + A[i][j];
        }
        if(sum < newsum)
        {
            sum = newsum;
        }
    }
    return 0;
}

代码2:

代码语言:javascript
复制
#include<stdio.h>

int main()
{
    int dim,i,j,k,h=0;
    scanf("%d",k);
    int array[k][k];
    int max[2k+2]={0};

    for(i=0;i<k;i++)
    {
        for(j=0;j<k;j++)
        {
            scanf("%d",&array[i][j]);
        }
    }
    //rows
    h=max[0];
    for(i=0;i<k;i++)
    {
        for(j=0;j<k;j++)
        {
            max[i]+=array[i][j];

        }
        if(max[i]>=h)
        {
            h=max[i];
        }   
    }
    //columns 
    for(j=0;j<k;j++)
    {
        for(i=0;i<k;i++)
        {
            max[j+k]+=array[i][j];
        }
        if(max[j+k]>=h)
        {
            h=max[j+k];
        }

    }  
    //diagonal_1
    for(i,j=0;j<k && i<k;j++,i++) 
    {
        max[2k]+=array[i][j];
    }
    for(i=0,j=k-1;j>=0&&i<k;j--,i++) 
    { 
        max[2k+1]+=array[i][j];
    }          
    if(max[2k]>=max[2k+1])
        max[2k]=max[2k]; 
    else
        max[2k]=max[2k+1];

    if(max[2k]>=h)
        printf("%d",max[2k]);
    else
        printf("%d",h);   

    return 0;
}        

发生的错误包括:

代码语言:javascript
复制
Program: In function 'main':
Program:11:9: error: fixed-point types not supported for this target
Program:48:6: warning: left-hand operand of comma expression has no effect[-       
Program:50:13: error: fixed-point types not supported for this target
Program:54:9: error: fixed-point types not supported for this  target    
Program:56:8: error: fixed-point types not supported for this target
Program:56:17: error: fixed-point types not supported for this target    
Program:57:5: error: fixed-point types not supported for this target 
Program:57:13: error: fixed-point types not supported for this target
Program:59:5: error: fixed-point types not supported for this target    
Program:59:13: error: fixed-point types not supported for this target 
Program:61:8: error: fixed-point types not supported for this target
Program:62:17: error: fixed-point types not supported for this target
Program:11:5: warning: unused variable 'max' [-Wunused-variable]
EN

回答 2

Stack Overflow用户

发布于 2014-03-26 20:48:39

你不能使用像int max2k+2={0}这样的变量来声明数组,因为数组的大小必须在编译期间确定。

票数 1
EN

Stack Overflow用户

发布于 2014-03-26 20:41:04

1.

代码语言:javascript
复制
int max[2k+2]={0};

你不能在C中使用2k,就像在数学中一样,这是无效的。您需要使用2*k。在你的代码中的多个地方也出现了同样的问题。

而C11,6.7.9明确指出,VLA不能有初始化器。

要初始化的实体的类型应为未知大小的数组或不是可变长度数组类型的对象类型。

所以你必须删除可变长度数组的初始值设定项。

2.

您的第一个scanf()缺少&

变化

代码语言:javascript
复制
scanf("%d",k); 

代码语言:javascript
复制
scanf("%d",&k);

3.

代码语言:javascript
复制
for(i,j=0;j<k && i<k;j++,i++) 

在这里,初始化部分的i什么也不做。你可能打算用1来初始化它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22660809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档