gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 18:41:45 26 4
gpt4 key购买 nike

我的应用程序应该采用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com