Если вы добавите некоторые промежуточные выходные данные отладки, вы обнаружите, где вы ошиблись:
#include <stdio.h>
#define N 5
int main()
{
int j = 0;
int i = 0;
int num1 = N;
int num2 = N - 1;
int sum = 0;
while (num2 != 0)
{
printf("1 -> num1=%d num2=%d sum=%d j=%d\n", num1, num2, sum, j);
while (j < num2)
{
sum += num1;
j++;
}
printf("2 -> num1=%d num2=%d sum=%d j=%d\n", num1, num2, sum, j);
j = 0;
printf("%d\n", sum);
printf("--------------\n");
--num2;
num1 = sum;
}
printf("--->%d", sum);
}
Это приводит к:
1 -> num1=5 num2=4 sum=0 j=0
2 -> num1=5 num2=4 sum=20 j=4
20
--------------
1 -> num1=20 num2=3 sum=20 j=0
2 -> num1=20 num2=3 sum=80 j=3
80
--------------
1 -> num1=80 num2=2 sum=80 j=0
2 -> num1=80 num2=2 sum=240 j=2
240
--------------
1 -> num1=240 num2=1 sum=240 j=0
2 -> num1=240 num2=1 sum=480 j=1
480
--------------
--->480
Здесь вы можете видеть, что проблема в том, чтоЗначение sum
переносится с каждого прохода через цикл, когда оно действительно должно каждый раз сбрасываться в 0.Поэтому добавьте
sum = 0;
вверху цикла while
.
Таким образом, ваш окончательный код станет:
#include <stdio.h>
#define N 5
int main()
{
int j = 0;
int i = 0;
int num1 = N;
int num2 = N - 1;
int sum = 0;
while (num2 != 0)
{
sum = 0;
while (j < num2)
{
sum += num1;
j++;
}
j = 0;
printf("%d\n", sum);
printf("--------------\n");
--num2;
num1 = sum;
}
printf("--->%d", sum);
}
Удачи.