Определить сумму нечетных элементов матрицы и найти строку с минимальной их суммой - C (СИ)
Формулировка задачи:
Здравствуйте, очень нужна помощь с написанием программы, для меня тема указателей очень больная, так как я не совсем понимаю ее. Суть задания какова:
В каждой строке прямоугольной матрицы, элементами которой являются целые положительные числа, определить сумму нечетных элементов и найти строку с минимальной их суммой.
Программу надо написать с использованием указателей, у меня пока получилось только вывод случайной матрицы, а вот с подсчетом суммы нечетных чисел как-то не очень, выдает ошибку в строке 41 :
error C2296: %: недопустимо, левый операнд имеет тип "double"
Сам код программы:
Буду признателен за помощь!
#include "stdio.h"
#include "math.h"
#include "conio.h"
#include "windows.h"
void input_matr(double **x,int m,int n,char *msg);
void output_matr(double **x,int m,int n,char *msg);
void wait_press_key(char *msg);
int main()
{
double **d,s;
int i,j,md,nd;
//Подключение кириллицы в консольном окне
SetConsoleOutputCP(1251);
SetConsoleCP(1251);
//Ввод размеров матрицы
printf("\nВведите размеры матрицы md, nd (на количество строк и столбцов ограничений нет)\n");
scanf_s("%d%d",&md,&nd);
//Создаем динамическую матрицу d с размерами md*nd*sizeof(double)
//на базе указателя на указатель **d.
d=(double **)malloc(md*sizeof(double *));//Создается массив указателей,
//в котором каждый элемент массива d[i] - это указатель на поле double,
//или указатель на одномерный массив double.
for(i=0;i<md;i++) //Создаются строки матрицы как одномерные массивы
d[i]=(double *)malloc(nd*sizeof(double));
input_matr(d,md,nd,"Ввод элементов матрицы d\n");
output_matr(d,md,nd,"Исходная матрица d\n");
wait_press_key("\nДля продолжения программы нажмите любую клавишу\n");
//В функции input_matr и output_matr матрицы передаются, как массив указателей
//(матрица с), и, как указатель на указатель (матрица d).
//Далее используется функция, которая обрабатывает строки матрицы как
//одномерные массивы. Определяем сумму нечетных чисел каждой строки.
for (i = 0; i < nd; i++)
{
s=0;
for (j = 0; j<md; j++)
if (d[i][j] % 2)
s+=d[i][j];
printf("%d ", s);
}
wait_press_key("\nДля продолжения программы нажмите любую клавишу\n");
}
void input_matr(double **x,int m,int n,char *msg)
{
int i,j;
srand((unsigned int) 100); //запускаем генератор псевдослучайных чисел
printf(msg);
for(i=0; i<m;i++)
for(j=0; j<n;j++)
//scanf("%lf",(*(x+i)+j)); //ввод матрицы с клавиатуры
x[i][j]=rand()%100; //заполнение случайными числами
}
//-------------------------------Печать матрицы
void output_matr(double **x,int m,int n,char *msg)
{
int i,j;
printf(msg);
for(i=0; i<m;i++)
for(j=0; j<n;j++)
printf("%7.2lf%c",x[i][j],j==n-1?'\n':' ');
}
//-------------------------------Определение суммы в строке матрицы
void wait_press_key(char *msg)
{
printf(msg);
_getch();
}
Ошибку выдает в строке 40, случайно не ту написал.
Решение задачи: «Определить сумму нечетных элементов матрицы и найти строку с минимальной их суммой»
textual
Листинг программы
for (i = 0; i < md; i++)
{
s=0;
for (j = 0; j<nd; j++)
{
if (d[i][j] % 2 ) s+=d[i][j];
printf("%d %d %d\n",d[i][j],d[i][j]%2,s);
}
printf("%d ", s);
}
Объяснение кода листинга программы
Вывод сумм нечетных элементов матрицы d и их порядковые номера: 1) Инициализация переменной s, которая будет хранить сумму нечетных элементов. 2) Перебор всех элементов матрицы d. 3) Проверка на нечетность элемента d[i][j] с помощью оператора % (остаток от деления). 4) Если элемент нечетный, то прибавляем его к переменной s. 5) Выводим на экран значение элемента d[i][j], его нечетность и текущую сумму s. 6) Выводим на экран текущую сумму s. 7) Переходим к следующей итерации цикла.