Error: array type has incomplete element type - C (СИ)
Формулировка задачи:
в функции выдает ошибку
\arifm.c|4|error: array type has incomplete element type|
подправьте пожалуйста
main
функция
#include <stdio.h>
#include <stdlib.h>
#include "locale.h"
#include <time.h>
void arifm(int[], int, int);
int main()
{
int n,m,i,j; //n - строка m - столбец
setlocale(LC_CTYPE, "RUSSIAN");
printf("Введите размер квадратной матрицы n*n: ");
scanf("%d", &n);
m=n;
int mat[n][m];
srand(time(NULL));
for(i=0; i<m; i++)
{
for (j=0;j<n;j++)
{
printf(" %d", mat[i][j]=rand()%10);
}
printf("\n");
}
arifm((int) mat, n, m);
return 0;
}#include <stdio.h>
#include <stdlib.h>
void arifm(int mat[][] ,int n, int m)
{
int i, j;
double arr[n],sum=0.0;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++){
sum=sum+mat[j][i];// вычисление суммы элементов столбца
}
sum=sum-mat[i][i];// вычитание элемента столбца по главной диагонали
sum=sum/(n-1);//вычисление среднего арифметического
arr[i]=sum;//присваивание значение sum элементу массива
printf("среднее арифметическое столбцов: %.2f\n",arr[i]);
sum=0;
}
}Решение задачи: «Error: array type has incomplete element type»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <time.h>
#include <malloc.h>
void print(int** mat, int n, int m)
{
int i, j;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
printf("%d ",mat[i][j]);
printf("\n");
}
}
void arifm(int** mat, int n, int m)
{
int i, j;
double sum;
double* arr;
sum = 0.0;
arr = malloc(n*sizeof(double));
for(i=0;i<m;i++)
{
for(j=0;j<n;j++){
sum=sum+mat[j][i];// вычисление суммы элементов столбца
}
sum=sum-mat[i][i];// вычитание элемента столбца по главной диагонали
sum=sum/(n-1);//вычисление среднего арифметического
arr[i]=sum;//присваивание значение sum элементу массива
printf("среднее арифметическое столбцов: %.2f\n",arr[i]);
sum=0;
}
free(arr);
}
int main()
{
int** mat;
int n,m,i,j; //n - строка m - столбец
setlocale(LC_CTYPE, "RUSSIAN");
printf("Введите размер квадратной матрицы n*n: ");
scanf("%d", &n);
m = n;
mat = (int**) malloc( m * sizeof(int*));
for(i = 0; i < m; i++)
mat[i] = (int*) malloc( n * sizeof(int ));
srand(time(NULL));
for(i=0; i<m; i++)
{
for (j=0;j<n;j++)
{
printf(" %d", mat[i][j]=rand()%10);
}
printf("\n");
}
print(mat, n, m);
arifm(mat, n, m);
for(i=0;i<n;i++)
free (mat[i]);
free(mat);
return 0;
}
Объяснение кода листинга программы
- print - функция для вывода элементов матрицы на экран
- arifm - функция для вычисления среднего арифметического элементов столбцов матрицы
- main - функция, с которой начинается выполнение любой программы на языке C
- mat - двумерный массив (матрица), в котором будут храниться случайные числа
- n, m - переменные для хранения размеров матрицы
- i, j - переменные для хранения индексов элементов матрицы
- setlocale - функция для установки текущей локали
- printf - функция для вывода информации на экран
- scanf - функция для ввода информации с клавиатуры
- malloc - функция для выделения памяти под массив
- srand - функция для инициализации генератора случайных чисел
- rand - функция для генерации случайных чисел
- free - функция для освобождения памяти, выделенной под массив
- return - оператор, завершающий выполнение функции и возвращающий значение
- %d - спецификатор формата для вывода целых чисел
- %d - спецификатор формата для ввода целых чисел
- *nn** - размер матрицы в квадратных элементах
- m = n; - присваивание переменной m значение переменной n
- mat = (int) malloc( m sizeof(int));** - выделение памяти под массив указателей на матрицу
- for(i = 0; i < m; i++) - цикл для заполнения матрицы случайными числами
- mat[i] = (int) malloc( n sizeof(int )); - выделение памяти под массив значений матрицы
- printf(
%d, mat[i][j]=rand()%10); - вывод элемента матрицы на экран - printf(
\n); - переход на новую строку - print(mat, n, m); - вызов функции для вывода элементов матрицы на экран
- arifm(mat, n, m); - вызов функции для вычисления среднего арифметического элементов столбцов матрицы
- for(i=0;i<n;i++) - цикл для освобождения памяти под массив значений матрицы
- free (mat[i]); - освобождение памяти под массив значений матрицы
- free(mat); - освобождение памяти под массив указателей на матрицу
- return 0; - завершение выполнения функции и возврат значения 0