关于#C语言#的问题,如何解决?

如何修改使这段代码能在VC++2010学习版运行?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void Statistics();                              /* 统计数组中正、负、零的个数 */


void sortArray();                               /* 一维数组排序 */


void getRowAndCol( int arr[2] );                /* 获得二维数组的行数和列数 */


void initMatrix( int** arr, int row, int col ); /* 初始化数组 */


void matrixTranspose();                         /* 二维数组转置 */


void getSumAndAverage();                        /* 求和和平局值 */


void getMaxAndMin();                            /* 求最大值和最小值 */


void matrixMultiply();                          /* 两个二维数组相乘 */


void showMatrix( int** arr, int row, int col ); /* 打印二维数组 */


void addAndSub();                               /* 求二维数组的加法和减法 */


int main()
{
    char ch;
arraySystem:
    printf( "\n***********************数组应用系统***********************\n" );
    printf( "            1.统计一维数组的正数、负数和零的个数\n" );
    printf( "            2.一位数组排序\n" );
    printf( "            3.二维数组的转置\n" );
    printf( "            4.求二维数组的最大值和最小值\n" );
    printf( "            5.求二维数组行列的和以及平均值\n" );
    printf( "            6.两个二维数组的加法和减法运算\n" );
    printf( "            7.两个二维数组的乘法运算\n" );
    printf( "            8.退出系统\n" );
    printf( "********************请输入编号选择功能*********************\n" );
    ch = getchar();
    switch ( ch )
    {
    case '1':
        Statistics();
        break;
    case '2':
        sortArray();
        break;
    case '3':
        matrixTranspose();
        break;
    case '4':
        getMaxAndMin();
        break;
    case '5':
        getSumAndAverage();
        break;
    case '6':
        addAndSub();
        break;
    case '7':
        matrixMultiply();
        break;
    case '8':
        printf( "****************已经退出系统,欢迎下次使用!****************\n" );
        goto end;
        break;
    default:
        printf( "*****************输入错误,请输入1-8的数字!****************\n\n" );
        break;
    }
    getchar();
    goto arraySystem;
end:;
    return(0);
}


/*
 * 功能:统计一维数组的正数、负数、零的个数
 */
void Statistics()
{
    int    i;
    int    len;                                    /* 一维数组的长度 */
    int    posNum = 0, negNum = 0, zeroNum = 0;    /* 存储正数,负数,零的个数 */
    printf( "请输入数组的长度:" );
    scanf( "%d", &len );
    if ( len < 0 )
    {
        printf( "长度不能小于0!" );
        exit( 0 );
    }
    int nums[len]; /* 定义一维数组 */
    printf( "请输入数组数据,共%d个数据(数据用空格隔开):\n", len );
    for ( i = 0; i < len; i++ )
    {
        scanf( "%d", &nums[i] );
    }
    printf( "原数组:\n" );
    for ( i = 0; i < len; i++ )
    {
        printf( "%d ", nums[i] );
        if ( nums[i] > 0 )
        {
            posNum++;
        }else if ( nums[i] < 0 )
        {
            negNum++;
        }else{
            zeroNum++;
        }
    }
    printf( "\n" );
    printf( "正数的个数为:%d个\n", posNum );
    printf( "负数的个数为:%d个\n", negNum );
    printf( "零的个数为:%d个\n", zeroNum );
    printf( "\n" );
}


/*
 * 功能:一维数组排序(冒泡排序法)
 */
void sortArray()
{
    int    i, j, temp;
    int    len; /* 一维数组的长度 */
    printf( "请输入数组的长度:" );
    scanf( "%d", &len );
    if ( len < 0 )
    {
        printf( "长度不能小于0!" );
        exit( 0 );
    }
    int nums[len]; /* 定义一维数组 */
    printf( "请输入数组数据,共%d个数据(数据用空格隔开):\n", len );
    for ( i = 0; i < len; i++ )
    {
        scanf( "%d", &nums[i] );
    }
    printf( "原数组:\n" );
    for ( i = 0; i < len; i++ )
    {
        printf( "%d ", nums[i] );
    }
    for ( i = 0; i < len - 1; i++ )
    {
        for ( j = 0; j < len - 1 - i; j++ )
        {
            if ( nums[j] > nums[j + 1] )
            {
                temp        = nums[j];
                nums[j]        = nums[j + 1];
                nums[j + 1]    = temp;
            }
        }
    }
    printf( "\n排序后的数组:\n" );
    for ( i = 0; i < len; i++ )
    {
        printf( "%d ", nums[i] );
    }
    printf( "\n" );
}


/*
 * 功能:获去二维数组行数和列数
 */
void getRowAndCol( int arr[2] )
{
    printf( "请输入二维数组的行数:" );
    scanf( "%d", &arr[0] );
    printf( "请输入二维数组的列数:" );
    scanf( "%d", &arr[1] );
}


/*
 * 功能:打印二维数组
 */
void showMatrix( int** arr, int row, int col )
{
    int i, j;
    for ( i = 0; i < row; i++ )
    {
        for ( j = 0; j < col; j++ )
        {
            printf( "%-4d", *( (int *) arr + col * i + j) );
        }
        printf( "\n" );
    }
    printf( "\n" );
}


/*
 * 功能:初始化二维数组(矩阵),并打印出来
 * 输入:row 行数 col 列数
 * 输出:二维数组存储到arr中
 */

void initMatrix( int** arr, int row, int col )
{
    int i, j;
    for ( i = 0; i < row; i++ )
    {
        for ( j = 0; j < col; j++ )
        {
            scanf( "%d", ( (int *) arr + col * i + j) );
        }
    }
    printf( "\n" );
}


/*
 *  功能:二维数组转置
 */
void matrixTranspose()
{
    int    i, j;
    int    arr[2];
    getRowAndCol( arr );
    int    row = arr[0], col = arr[1];             /* 存储行数和列数 */
    int    matrix[row][col];                       /* 二维数组 */
    int    transpose[col][row];                    /* 定义存储转置后的二维数组 */
    printf( "请输入二维数组的数据,共%d个数(用空格隔开):\n", row * col );
    initMatrix( (int * *) matrix, row, col );       /* 初始化二维数组 */
    printf( "二维数组为:\n" );
    showMatrix( (int * *) matrix, row, col );
    /* 数组转置 */
    for ( i = 0; i < row; i++ )
    {
        for ( j = 0; j < col; j++ )
        {
            *(*(transpose + j) + i) = *(*(matrix + i) + j);
        }
    }
    printf( "转置后的二维数组为:\n" );
    showMatrix( (int * *) transpose, col, row );
}


/*
 * 功能:二维数组的加法和减法
 */
void addAndSub()
{
    int    i, j;
    int    arr[2];
    getRowAndCol( arr );
    int    row = arr[0], col = arr[1];             /* 存储行数和列数 */
    int    sum[row][col], sub[row][col];           /* 求和数组,求差数组 */
    int    matrix1[row][col], matrix2[row][col];   /* 二维数组 */
    printf( "\n" );
    printf( "请输入第一个数组,共%d个数(用空格隔开):\n", row * col );
    initMatrix( (int * *) matrix1, row, col );      /* 初始化二维数组 */
    printf( "请输入第二个数组,共%d个数(用空格隔开):\n", row * col );
    initMatrix( (int * *) matrix2, row, col );      /* 初始化二维数组 */
    printf( "\n" );
    for ( i = 0; i < row; i++ )
    {
        for ( j = 0; j < col; j++ )
        {
            sum[i][j]    = matrix1[i][j] + matrix2[i][j];
            sub[i][j]    = matrix1[i][j] - matrix2[i][j];
        }
    }
    printf( "第一个数组为:\n" );
    showMatrix( (int * *) matrix1, row, col );
    printf( "第二个数组为:\n" );
    showMatrix( (int * *) matrix2, row, col );
    printf( "求和为:\n" );
    showMatrix( (int * *) sum, row, col );
    printf( "差值为:\n" );
    showMatrix( (int * *) sub, row, col );
}


/*
 * 功能:两个二维数组(矩阵)相乘
 */
void matrixMultiply()
{
    int    i, j, k;
    int    row1, col1, row2, col2; /* 分别存储两个二维数组的行数和列数 */
    printf( "请输入第一个二维数组的行数:" );
    scanf( "%d", &row1 );
    printf( "请输入第一个二维数组的列数:" );
    scanf( "%d", &col1 );
    printf( "请输入第二个二维数组的行数:" );
    scanf( "%d", &row2 );
    printf( "请输入第二个二维数组的列数:" );
    scanf( "%d", &col2 );
    /* 判断相乘条件是否成立,矩阵相乘条件:矩阵1的列数要等于矩阵2的行数 */
    if ( col1 != row2 )
    {
        printf( "相乘条件不成立!" );
        exit( 0 );
    }
    int    matrix1[row1][col1], matrix2[row2][col2];       /* 两个二维数组 */
    int    result[row1][col2];                             /* 存储相乘结果 */
    printf( "\n" );
    printf( "请输入第一个二维数组,共%d个数(用空格隔开):\n", row1 * col1 );
    initMatrix( (int * *) matrix1, row1, col1 );            /* 初始化第一个二维数组 */
    printf( "请输入第二个二维数组,共%d个数(用空格隔开):\n", row2 * col2 );
    initMatrix( (int * *) matrix2, row2, col2 );            /* 初始化第二个二维数组 */
    for ( i = 0; i < row1; i++ )
    {
        for ( j = 0; j < col2; j++ )
        {
            int sum = 0;
            for ( k = 0; k < col1; k++ )
            {
                sum += matrix1[i][k] * matrix2[k][j];
            }
            result[i][j] = sum;
        }
    }
    printf( "第一个二维数组为:\n" );
    showMatrix( (int * *) matrix1, row1, col1 );
    printf( "第二个二维数组为:\n" );
    showMatrix( (int * *) matrix2, row2, col2 );
    printf( "两个二维数组相乘的结果为:\n" );
    showMatrix( (int * *) result, row1, col2 );
}


/*
 * 功能:求每行和每列的总和和平均值
 */
void getSumAndAverage()
{
    int    i, j;
    int    arr[2];
    getRowAndCol( arr );
    int    row = arr[0], col = arr[1];             /* 存储行数和列数 */
    int    sumRow[row], sumCol[col], sum = 0;      /* 存储每行总和,每列总和,总和 */
    int    matrix[row][col];                       /* 二维数组 */
    printf( "请输入二维数组的数据,共%d个数(用空格隔开):\n", row * col );
    initMatrix( (int * *) matrix, row, col );       /* 初始化二维数组 */
    printf( "二维数组为:\n" );
    showMatrix( (int * *) matrix, row, col );
    for ( i = 0; i < row; i++ )
    {
        sumRow[i] = 0;
    }

    for ( i = 0; i < col; i++ )
    {
        sumCol[i] = 0;
    }

    for ( i = 0; i < row; i++ )
    {
        for ( j = 0; j < col; j++ )
        {
            sumRow[i]    += matrix[i][j];        /* 求每行的总和 */
            sumCol[j]    += matrix[i][j];        /* 求每列的总和 */
            sum        += matrix[i][j];        /* 求所有的总和 */
        }
    }
    /* 打印结果 */
    for ( i = 0; i < row; i++ )
    {
        printf( "第%d行的总和为%d,平均值为%.2f\n", i + 1, sumRow[i], ( (float) sumRow[i]) / row );
    }

    printf( "\n" );
    for ( i = 0; i < col; i++ )
    {
        printf( "第%d列的总和为%d,平均值为%.2f\n", i + 1, sumCol[i], ( (float) sumCol[i]) / col );
    }
    printf( "\n" );
    printf( "总和为:%d,总平局值为:%.2f\n", sum, ( (float) sum) / (row * col) );
}


/*
 * 功能:求二维数组的最大值和最小值
 */
void getMaxAndMin()
{
    int    i, j;
    int    max, min;                               /* 存储最大最小值 */
    int    arr[2];
    getRowAndCol( arr );
    int    row = arr[0], col = arr[1];             /* 存储行数和列数 */
    int    matrix[row][col];                       /* 二维数组 */
    printf( "请输入二维数组的数据,共%d个数(用空格隔开):\n", row * col );
    initMatrix( (int * *) matrix, row, col );       /* 初始化二维数组 */
    printf( "二维数组为:\n" );
    showMatrix( (int * *) matrix, row, col );
    max    = matrix[0][0];
    min    = matrix[0][0];
    for ( i = 0; i < row; i++ )
    {
        for ( j = 0; j < col; j++ )
        {
            if ( max < matrix[i][j] )
                max = matrix[i][j];
            if ( min > matrix[i][j] )
                min = matrix[i][j];
        }
    }
    printf( "最大值为:%d\n", max );
    printf( "最小值为:%d\n", min );
}




程序运行报错吗?
在vscode中运行及测试都是正常的。

粘贴上去 不对的地方改一下就行

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^