@David_138

Почему программа на языке Си показывает не тот ответ?

Почему вместо 2 я получаю 2147483645 если i у меня равняется i=2?
$ cat test0.c
#include<stdio.h> 
void main()
{
	int i,j=1,k=0;
	printf("Введите i="); scanf("%d",&i);
	while(j<=i)
	{
		k+=j; i++;
	}
	printf("Сумма ряда равна %d\n",k);
}

$ gcc -o test0 test0.c
$ ./test0
Введите i=2
Сумма ряда равна 2147483646
  • Вопрос задан
  • 130 просмотров
Решения вопроса 1
@LASHKOAG
Си, Робототехника, Linux, Телеметрия, Разработчик
while(j<=i)
i =2, a j =1 условие выполняется. Далее увеличивается i, a j как было равным 1 так и осталось, поэтому это условие будет всегда выполнятся. Потом наступит переполнение int , который может "дотикать" до 2147483646, затем переменная поменяет знак. На этом условие while(j<=i) прекратит выполняться. Выход из цикла, где j так и осталось 1, а i равно максимуму из диапазон предельных значений = 2147483646 (это в вашем случае; 32 битная операционная система)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
axifive
@axifive
Software Engineer
У вас j меньше i во всех случаях кроме последнего инкремента, где i становится отрицательным: -2147483648
Соотвественно вам показывается количество выполнений цикла
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
19 сент. 2021, в 10:22
10000 руб./за проект
19 сент. 2021, в 09:58
800 руб./в час
19 сент. 2021, в 09:51
1000 руб./за проект