2014-09-02 2 views
-3

Сегодня, когда я пытаюсь решить простую двумерную математическую функцию, используя C. Однако результат, который я получил, выглядит смешно. Код здесь:арифметический порядок в программировании на языке С

int main() 
{ 
    int x, y; 

    x = 10 - y; 
    y = x - 2; 
    printf("the x and y would be %d, %d ", x, y); 
    return 0; 
} 

Так как вы можете видеть, что ответ будет легко вычислить, как x=6 и y=4 но программа перечисленных выше дает мне x=8 и y=6. Похоже, что программа каким-то образом получила значение y как 6, а затем проигнорировала первое уравнение и сразу положила 6 во второе уравнение, затем получим значение x. Приятно видеть это. Надеюсь, кто-нибудь может объяснить мне причину!

+6

Ваш код имеет неопределенное поведение: 'y' не имеет значения! –

+0

Отсутствует ';' строка 'x ='. – xxbbcc

+0

@ KerrekSB но как? Я сделал то же самое и для x и y, я думаю ... – user1579701

ответ

2

Язык C не решает уравнений. На этом языке нет такой возможности. Язык C оценивает выражения.

Поскольку вы никогда не инициализировали свои переменные, как x, так и y первоначально содержат значения мусора. Ваше первое выражение x = 10 - y означает: вычесть значение мусора из 10 и сохранить его в x.

Тот факт, что ваш y начал свою жизнь с величиной мусора из 2 в нем (что дает вам 8 в x) это просто случайное совпадение. Я на самом деле удивлен, что у вас есть такая красивая фигня. Обычно это нечто гораздо более ужасное.

+0

ох, похоже, я совершил большую ошибку здесь. Спасибо за объяснение очень! Теперь я это понимаю. – user1579701

+1

Похоже, что 'y' началось как 2. Я не знаю, помогает ли кто-то C-хозяину понять, почему это началось именно так, а не что-то ужасное. – Teepeemm

+0

@Teepeemm: Да, хорошая точка. – AnT

5

Причина - основное непонимание императивного языка программирования. Язык C не является решателем уравнения. '=' означает назначение, а не уравнение.

+0

поэтому я должен заменить все знаки '=' на '=='? или это уравнение на самом деле не приемлемо в C ... – user1579701

+0

@ user1579701 Это невозможно сделать в C. (Ну, это было бы возможно *, но это потребовало бы большой работы, а не двух простых уравнений.) – Teepeemm

Смежные вопросы