Переменные i и j являются целыми числами, а переменная a запоминает двумерный массив из 5 строк и
5 столбцов, пронумерованных от 1 до 5, изначально все элементы которых имеют нулевые значения.
Не используя переменные, отличные от упомянутых, напишите последовательность инструкций
ниже, заменив многоточия так, чтобы после выполнения
получена последовательность, переменная A для запоминания соседней таблицы.
for(i=1; i<=5; i++)
for(j=1; j<=5; j++)
............
<4 4 4 4 4
4 3 3 3 3
4 3 2 2 2
4 3 2 1 1
4 3 2 1 0
я пробовал этот алгоритм, но он не работает
for(i = 1; i <= 5; i++)
for(j = 1; j <= 5; j++) {
int max_value;
if ((i - 1) > (j - 1))
max_value = i - 1;
else
max_value = j - 1;
a[i][j] = 4 - max_value;
Я отметил ваш вопрос c, поскольку вы не указали нам, какой язык программирования вы используете. Если я ошибаюсь, исправьте тег.
Если ваш входной массив представляет собой целые числа, вы инициализируете их значением 0, а не нулевым значением.
Понятно, что вы скопировали свое задание, но оно не соответствует коду, поэтому вы пытаетесь сгенерировать выходные данные или исключить оператор if? Или что-то еще? Пожалуйста, измените вопрос, чтобы уточнить его.
«null» не является допустимым целочисленным значением в C. Предполагается ли, что это означает ноль?
Если вам не разрешены переменные, кроме упомянутых (i и j и, возможно, A), то, похоже, ваш max_value не должен быть разрешен.
for (row=0; row<5; row++) for (col=0; col<5; col++) a[row][col] = MAX(4-row, 4-col);Возможно, вы сможете узнать больше, если попросите своего профессора или ассистента дать пару подсказок вместо того, чтобы просить Интернет сделать за вас домашнее задание.



Индексы массива c начинаются с 0, а не с 1. Если ваш входной массив равен int a[5][5], то вы отклоняетесь на единицу в обоих измерениях, что является неопределенным поведением.
Вы можете использовать условный оператор ?:, как показал вам @nabinsademba, в качестве альтернативы оператору if. Это по-прежнему условное присваивание, поэтому единственным эффектом является то, что оно выглядит немного более компактным:
#include <stdio.h>
int main() {
int a[5][5] = { 0 };
for(int i = 0; i < sizeof a / sizeof a[0]; i++)
for(int j = 0; j < sizeof a[0] / sizeof a[0][0]; j++) {
a[i][j] = 4 - (i > j ? i : j);
printf("%d%s", a[i][j], j < sizeof a[0] / sizeof a[0][0] - 1 ? ", " : "\n");
}
}
и вот пример вывода:
4, 3, 2, 1, 0
3, 3, 2, 1, 0
2, 2, 2, 1, 0
1, 1, 1, 1, 0
0, 0, 0, 0, 0
Если вам нужен результат, который вы показали, это немного другое задание:
#include <stdio.h>
int main() {
int a[5][5] = { 0 };
for(int i = 0; i < sizeof a / sizeof a[0]; i++)
for(int j = 0; j < sizeof a[0] / sizeof a[0][0]; j++) {
a[i][j] = 4 - (i < j ? i : j);
printf("%d%s", a[i][j], j < sizeof a[0] / sizeof a[0][0] - 1 ? ", " : "\n");
}
}
и:
4, 4, 4, 4, 4
4, 3, 3, 3, 3
4, 3, 2, 2, 2
4, 3, 2, 1, 1
4, 3, 2, 1, 0
Ну вот :
for(i = 1; i <= 5; i++) {
for(j = 1; j <= 5; j++) {
a[i-1][j-1] = 5 - (i < j ? i : j);
}
}
Nit: Если операторы не являются циклами