C - 数组操作控制台应用程序以状态 0 终止

标签 c arrays

我的应用程序应该采用 double 组,找到偶数列元素的平均值,找到最大值,将平均值与 max/2 进行比较,如果平均值 > max/2,则将矩阵旋转 90 度。

代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>

int M = 4, N = 4;

int ** rotateArr(int arr[4][4]) {
    int D[4][4];
    int i, n;
    for(i=0; i <= 4; i++ ){
        for(n =0; n <= 4; n++){
            D[i][n] = arr[n][M - i + 1];
        }
    }
    return D;
}
int getAvg(int arr[4][4]) {
    int sum = 0, num = 0;
    int i, n;
    for(i=0; i <= 4; i += 2){
        for(n=0; n <= 4; n++){
            sum += arr[i][n];
            num += 1;
        }
    }
    return sum/num;
}

int ** getMax(int arr[4][4]) {
    int maxa = arr[0][0];
    int i, n;
    for(i=0; i <= 4; i++){
        for(n=0;  n <= 4; n++){
            if (maxa < arr[i][n]){
                maxa = arr[i][n];
            }
        }
    }
    return maxa;
}

int main()
{

    int S[4][4] = { { 1, 4, 10, 3 }, { 0, 6, 3, 8 }, { 7, 10 ,8, 5 },  { 9, 5, 11, 2}  };
    int maxa = 0;
    float avg = 0;

    avg = getAvg(S);
    maxa = getMax(S);
    int i , n;
    if (avg > maxa/2){
        S[4][4] = rotateArr(S);
        for(i=0; i <= 4; i+=2){
            for(n=0 ; n <= 4; n++){
                    printf("%d", S[i][n]);
            }
            printf("\n");
        }
    }

    getch();

    return 0;
}

应用程序不输出任何内容,只是在按键时结束

Process terminated with status 0 (0 minutes, 2 seconds)

最佳答案

您的代码存在很多问题。例如:

  • 所有循环的形式均为 for(i=0; i <= 4; i++ )条件应更改为 i < 4因为有效的数组索引是 0 到 3。
  • rotateArr函数返回一个指向局部变量的指针。你不能这样做。一种解决方案是接收输出数组作为参数并写入其中:

    void rotateArr(int arr[4][4], int output[4][4]) {
         ....
         output[i][j] = ...;
    }
    
  • int**int[4][4] 不同.
  • S[4][4] = ...尝试分配给无效元素。您似乎正在尝试分配给 S本身,这是无法完成的(您需要分配每个元素,或从另一个数组分配memcpy):

    int anArray[4][4];
    int anotherArray[4][4];
    memcpy(anArray, anotherArray, sizeof(anArray));
    
  • 在表达式 arr[n][M - i + 1] 中,第二个索引可能超出范围。考虑当 i==0 时会发生什么.

我建议您注意编译器警告,因为它们会捕获其中一些问题(在 GCC 编译器上使用 -Wall 选项)。另外,学习使用调试器。

关于C - 数组操作控制台应用程序以状态 0 终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19909277/

相关文章:

c - 如何解决这个匹配算法?

c - GCC 内联汇编没有将数据复制到输入寄存器

c++ - 将 vs printf 放在以下代码中?

javascript - 转换 Node 中的非统一时间戳?

c++ - 使用cstring数组c++循环获取用户输入

C 复利季刊

c - 全局变量不好(在这种情况下)吗?

javascript - 添加数组?

ruby - 将 ruby​​ 哈希转换为数组的最佳方法是什么

php - 为 jQuery 显示正确格式化数组