Member 13211447 Ответов: 1

Как работает эта функция foo?


Эта программа на языке Си возьмет значения, хранящиеся в переменной a, и выведет их одно за другим.

#include <stdio.h>
   void foo(int n, int sum)
   {
     int k = 0, j = 0;

     if (n == 0)
       return;

     k = n % 10;
     j = n / 10;

     sum = sum + k;

     foo (j, sum);

     printf ("%d, ", k);
   }

   int main ()
   {
     int a = 2048, sum = 0;
     foo (a, sum);
     printf("\n");
     return 0;
   }


Выход:

2, 0, 4, 8,



Может ли кто-нибудь объяснить, как работает эта программа:

1) как он печатает значение, хранящееся в < a?

2) и в таком порядке: 2, 0, 4, 8, ?

3) Почему ценность сумма меняется, когда мы печатаем значения к?

Что я уже пробовал:

Когда функция foo выполняется:

1) впервые: n = 2048, k = 8, j = 204, sum = 8

2) во второй раз: n = 204, k = 4, j = 20, sum = 12

3) в третий раз: n = 20, k = 0, j = 2, sum = 12

4) в четвертый раз: n = 2, k = 2, j = 0, sum = 14

Если я заменю строку (присутствующую в функции foo):

printf ("%d, ", k);


с этим:

printf ("%d | %d, ", k, sum);


Выход:

2 | 14, 0 | 12, 4 | 12, 8 | 8,

1 Ответов

Рейтинг:
0

Patrice T

Цитата:
Может ли кто-нибудь объяснить, как работает эта программа:

Зачем объяснять вам словами, когда вы сами видите, что и как делает программа. Используйте отладчик, это невероятный инструмент обучения.

Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010-YouTube[^]
Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.