Тернарная условная операция - C (СИ)
Формулировка задачи:
Компилятор ругается на тернарные условные операции в 25 и 29 строке:
25 error: lvalue required as left operand of assignment
29 error: lvalue required as left operand of assignment
#include <stdio.h>
#include <stdlib.h>
int main()
{
/** Инициализация массива **/
printf("Enter n: "); //Введите n:
int n; //Создаем перменную n
scanf("%d", &n); //Считываем введённое число
if(!(n%2)){ // Если нечетное
printf("Error! 'n' doljno biti nechetnim...\n");//Ошибка!
system("pause"); //Для продолжения нажмите любую клавишу...
system("cls"); //Очистка CMD
return main(); //Вызываем main()
}
int arr[n][n]; // Если четное - создаем массив
/** Инициализация ячеек **/
// 1 - черные, 0 - белые
// Левый нижний угол всегда черный
int i, j; // i - строка, j - столбец
for( i = n-1; i > 0; i--){//Для столбца i...
switch(i%2){
case 0: // если четная строка...
for(j = 0; j < n; j++) j%2 ? arr[i][j] = 1 : arr[i][j] = 0;
//для четного столбца - 0 , для нечетного - 1
break;
case 1: // если нечетная строка...
for(j = 0; j < n; j++) j%2 ? arr[i][j] = 0 : arr[i][j] = 1;
//для четного столбца - 1 , для нечетного - 0
break;
}
}
/** Результат: вывод массива **/
for( i = 0; i < n; i++){ // Для строки i...
for( j = 0; j < n; j++) printf(" %d",arr[i][j]);// для стобца j выводим ячейку
printf("\n"); //переход на новую строку
}
}Решение задачи: «Тернарная условная операция»
textual
Листинг программы
j%2 ? (arr[i][j] = 1) : (arr[i][j] = 0);
Объяснение кода листинга программы
j % 2- операция взятия остатка от деления переменнойjна 2. Вернет 0, еслиjчетное, и 1, еслиjнечетное.(arr[i][j] = 1)- присваивает элементу массиваarr[i][j]значение 1.(arr[i][j] = 0)- присваивает элементу массиваarr[i][j]значение 0.- Выполняется тернарная условная операция: если результат операции
j % 2равен 0, то присваивается значение 1, иначе присваивается значение 0.