Я пытаюсь выяснить, правильно ли я понимаю, как работает эта простая программа.Это работает, я просто хочу убедиться, что я понимаю, почему.
#include <stdio.h>
int main(){
int x, y = 0, z;
x = 123;
while(x != 0){
z = x % 10;
y = y * 10 + z;
x /= 10;
}
printf(">>> %d", y);
return 0;
}
output
>>> 321
Я думаю, что это так.
Так что "x" был первоначально объявлен со значением 123, принимаетсяцикл вместе с условием, что состояние при x не равно 0, программа продолжается.
Цикл начинается и из исходного объявления «x» берет то, что находится в памяти 123, а «z» присваивается значение: остатокиз следующих операций;123% 10 = 12,3, оставляя "z", содержащее 3
. Таким образом, последнее число становится первым числом, которое теперь содержит память 12.
"y" берет то, что находится в памяти 12, и умножаетсяк 10 в сумме 120 добавляется к «z», что равно 3, поэтому память теперь содержит 123.
Тогда «x» занимает то, что находится в памяти 123/10
, в сумме 12,3 = 12. Таким образом, память теперь содержит 12
Цикл начинается с предыдущей итерации «x» принимает то, что находится в памяти 12, а «z» присваивается значение: остаток после операций;12% 10 = 2.
Здесь число от второго до последнего становится вторым числом.Таким образом, память теперь содержит 1.
Тогда «y» берет то, что находится в памяти 1 * 10 = 10 2, что является «z», поэтому память теперь содержит 12.
Тогда «x» берет то, чтонаходится в памяти 12/10 = 1,2 и возвращает только частное 1. Таким образом, память теперь содержит 1.
Цикл начинается с предыдущей итерации «x» принимает то, что находится в памяти 1, а «z» присваивается значение:остаток от следующих операций;1% 10 = 0,1, оставляя z, содержащий 1.
Именно здесь первое число становится последним числом.Таким образом, память теперь содержит 0.
"y" берет то, что находится в памяти, 0 * 10 = 0 + 1, что является "z".таким образом, память теперь содержит 1.
«x» берет то, что находится в памяти, 1/10 = оператор деления 0.1 возвращает только частное.Таким образом, память теперь содержит 0.
Теперь "x" = 0, так как условие выполнено, и программа прерывается.
Так что если кто-нибудь скажет мне, прав ли я, или объяснит мне, где я ошибся, и поможет мне правильно понять концепции, я был бы очень признателен за их понимание.
Спасибо.