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