сумму элементов каждой из строк массива
Со стандартного устройства ввода в первой строке вводятся 2 целых числа M и N – соответственно количество строк и столбцов двумерного массива: 1<=M<=100, 1<=N<=100. В следующих M строках вводятся ровно по N элементов – значения элементов двумерного массива. Все значения в массиве от -100 до 100 Требуется вывести через пробел M чисел, i-ое из которых – это сумма элементов i-й строки массива A. Выводить пробел в конце строки не нужно. Sample Input 4 3 1 2 3 5 6 7 3 4 5 4 8 6 Sample Output 6 18 12 18
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
int tr (int**, int, int);
int main () {
int a[100][100];
int n, i, j, m;
int **p;
scanf("%d %d", &m, &n);
for(int i=0; i<m; i++) {
for(int j=0; j<n; j++) {
scanf("%d", &a[i][j]);
}
}
p=(int**)malloc(m*sizeof(int));
p=(int**)malloc(n*sizeof(int));
for(int i=0; i<m; i++)
for(int j=0; j<n; j++)
p[i]=(int*)malloc(m*sizeof(int));
for(int i=0; i<m; i++)
for(int j=0; j<n; j++)
p[j]=(int*)malloc(n*sizeof(int));
for(int i=0; i<m; i++)
for(int j=0; j<n; j++)
p[i][j]=a[i][j];
int t=tr(p,m,n);
for(int i=0; i<m; i++)
{
printf("%d ", t);
}
return 0;
}
int tr(int**p, int m, int n) {
int t, i, j;
t=0;
for(int i=0; i<m; i++)
for(int j=0; j<n; j++)
t+=p[i][j];
return t;
}
Проблема кода в том, что он считает сумму всех элементов массива, а не строк. Как изменить код, чтобы считал сумму элементов именно стро?Еще проблема в том, что надо последний элемент вывести без пробела, скорее всего надо это сделать с помощью if/else или тернарного оператора, но пока нет мыслей как это сделать. Заранее спасибо за помощь
Ответы (2 шт):
Может, ограничиться этим? Без всей кучи malloc'ов и прочих ненужных вещей?
int main()
{
int M, N;
scanf("%d %d",&M, &N);
for(int i = 0; i < M; ++i)
{
int sum = 0;
for(int j = 0; j < N; ++j)
{
int k;
scanf("%d",&k);
sum += k;
}
printf("%d ",sum);
}
}
Ах, да! последний пробел не выводить... Замените printf на этот:
printf("%d%s",sum,(i==M-1) ? "" : " ");
Немного заморочился. Я думаю примерно так должен выглядеть твой код =) :
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
typedef struct {
int* mtrx;
int rows;
int cols;
} Matrix;
void scan_number(int* const num, const int min, const int max);
void print_matrix(const Matrix* const matrix, const char* delim);
void randfill_matrix(Matrix* const matrix, const int min, const int max);
int main()
{
int rows, cols;
puts("Enter the number of rows:");
scan_number(&rows,1,100);
puts("Enter the number of cols:");
scan_number(&cols,1,100);
Matrix matrix;
matrix.rows = rows;
matrix.cols = cols;
matrix.mtrx = (int*)malloc(sizeof(int) * rows * cols);
randfill_matrix(&matrix,-100,100);
print_matrix(&matrix," ");
free(matrix.mtrx);
return 0;
}
void scan_number(int* const num, const int min, const int max)
{
do {
scanf("%d",num);
if (*num >= min && *num <= max)
break;
else {
puts("Failure. Number out of range");
printf("The range of valid values: [%d;%d]",min,max);
}
} while(1);
}
void print_matrix(const Matrix* const matrix, const char* delim)
{
for (int row = 0; row < matrix->rows; ++row)
for(int col = 0; col < matrix->cols; ++col)
printf("%d%s",matrix->mtrx[row*matrix->cols+col],
((col==matrix->cols-1)?"\n":delim));
}
void randfill_matrix(Matrix* const matrix, const int min, const int max)
{
const int range = max > min ? max - min : min - max;
const int shift = max > min ? min : max;
srand(time(NULL));
for (int row = 0; row < matrix->rows; ++row)
for(int col = 0; col < matrix->cols; ++col)
matrix->mtrx[row*matrix->cols+col] = rand() % (range+1) + shift;
}