phil.o
for(a=0;a<=b;a*a){
printf("%d\n",a);
a*a;
}
Первая проблема заключается в объявлении цикла for, вы просто выбрасываете
a
переменная только что получена от пользователя, и установите ее в ноль. Может быть, вы намеревались использовать
c
переменная вместо этого?
Вторая проблема заключается в том, что при написании выражения
a * a
- вы на самом деле ничего не делаете
к сама переменная. Вы просто ставите значение
a
затем сделайте это во второй раз, затем вызовите умножение, которое извлекает значения из стека и возвращает результат
к стеку На данный момент для нас ничего не изменилось.
a
сам по себе, который все еще сохраняет свое первоначальное значение. Если вы хотите, чтобы он запомнил новое значение, вы должны
назначить значение, которое находится в стеке к переменной, с помощью
a = a * a;
например, или
a *= a;
в более короткой версии.
Третья проблема связана с тем, сколько раз будет выполняться ваш цикл. В вашей реализации, если заданная мощность равна 6, вы бы выполнили цикл 7 раз, например (при условии, что вы исправите первую проблему).
- Либо вы запускаете счетчик на 0, а затем выполняете цикл до тех пор, пока счетчик не станет (мощность - 1),
- или вы начинаете с 1, а затем выполняете цикл до тех пор, пока счетчик не будет включен.
Общим стандартом в семействах языков Си является использование нулевых индексов, поэтому, вероятно, лучше всего придерживаться его.
В чистом виде:
for (counter = 0; counter < total; counter++) {
/* Zero-based iteration */
}
for (counter = 1; counter <= total; counter++) {
/* One-based iteration */
}
оба будут выполнять цикл желаемое количество раз (обратите внимание на все различия между ними, особенно на компаратор в тестовой части: первый-оператор меньше, а второй-оператор меньше или равен).
Это пахнет домашним заданием, поэтому я не буду писать код для вас. Я просто надеюсь, что они помогут вам справиться с вашими проблемами.