#c
#c
Вопрос:
Вот мой код:
#include <stdio.h>
void main() {
int n, f = 1;
printf("enter any number: ");
scanf("%d", amp;n);
while (n > 0) {
f = f * n;
n = n - 1;
}
printf("factorial of %d is %d", n, f);
}
И это дает мне результат:
введите любое число: 5 факториал от 0 равен 120
Комментарии:
1.
n
в вашей программе снижается до нуля. Поэтому неудивительно, что печатается ноль.2. По сути, вы печатаете свой счетчик, вместо того, чтобы печатать переменную для того, что вы читаете (поскольку вы изменили ее на несуществующую). Создайте переменную копирования или печатайте постепенно
3. Вы всегда должны проверять значение, возвращаемое scanf, даже в таких тривиальных случаях, как этот. Эта программа демонстрирует неопределенное поведение при вводе «foo».
4. Возможно, вы не захотите печатать 1, когда пользователь вводит отрицательное число.
Ответ №1:
Просто сохраните исходный ввод:
#include<stdio.h>
void main()
{
int n,n1,f=1;
printf("enter any number: ");
scanf("%d",amp;n1);
n = n1;
while(n>0)
{
f=f*n;
n=n-1;
}
printf("factorial of %d is %d",n1,f);
}
Ответ №2:
Я бы предпочел использовать для этого цикл for. Это позволяет вам объявлять локальную переменную для цикла, которую вы можете инициализировать n
, не влияя на значение n
:
#include <stdio.h>
int main(int argc, char *argv[]) {
int n, f=1;
printf("enter any number: ");
scanf("%d",amp;n);
for (int i=n; i>0; i--)
f *= i;
printf("factorial of %d is %dn", n, f);
}
Комментарии:
1. Я уже успешно выполнил это с помощью цикла for, но я хочу сделать это с помощью цикла while
Ответ №3:
C имеет синтаксис, который позволяет вам определять новую переменную для вашего цикла, которая исчезнет после завершения вашего цикла. Это позволяет запускать цикл без изменения пользовательского ввода внутри цикла.
scanf("%d",amp;n);
for (int i = n; i > 0; i--)
{
f=f*i;
}
Некоторым людям for
больше нравятся циклы, чем while
циклы, потому что у них больше «структуры» — весь код, связанный с организацией циклов, находится в одной строке кода.
Ответ №4:
то, что вы делаете, это «n = n-1;» из-за этой строки значение n становится равным нулю в конце, поэтому сохраните значение n в какой-либо переменной, а затем напечатайте в последней
#include<stdio.h>
void main()
{
int n,f=1, k;
printf("enter any number: ");
scanf("%d",amp;n);
k=n;// do this
while(n>0)
{
f=f*n;
n=n-1;
}
printf("factorial of %d is %d",k,f);
}
Ответ №5:
Поскольку вам нужно значение n
после цикла, вы не должны изменять n
его в while
цикле, а использовать временную переменную i
для перечисления факторов.
Также обратите внимание, что main()
имеет возвращаемый тип int
и возврат 0
при успешном выходе.
Вот модифицированная версия:
#include <stdio.h>
int main() {
int n, f = 1;
printf("enter any number: ");
if (scanf("%d", amp;n) == 1) {
int i = n;
while (i > 1) {
f = f * i;
i = i - 1;
}
printf("factorial of %d is %d", n, f);
}
return 0;
}
Ответ №6:
n всегда будет равно 0 в конце цикла while. Вы не можете напечатать старое значение, если используете n в качестве счетчика. Создайте отдельную переменную и используйте ее в качестве счетчика в цикле while.