簡體   English   中英

我的 C 查找階乘的程序沒有給我想要的結果

[英]my C program to find factorial is not giving me my desired result

這是我的代碼:

#include <stdio.h>

void main() {
    int n, f = 1;
    printf("enter any number: ");
    scanf("%d", &n);
    while (n > 0) {
        f = f * n;
        n = n - 1;
    }
    printf("factorial of %d is %d", n, f);
}

它給了我一個結果:

enter any number: 5
factorial of 0 is 120

只需保存原始輸入:

#include<stdio.h>
void main()
{
    int n,n1,f=1;
    printf("enter any number: ");
    scanf("%d",&n1);
    n = n1;
    while(n>0)
    {
        f=f*n;
        n=n-1;
    }
    printf("factorial of %d is %d",n1,f);
}

我更願意為此使用 for 循環。 它允許您為循環聲明一個局部變量,您可以將其初始化為n而不會影響n的值:

#include <stdio.h>

int main(int argc, char *argv[]) {
    int n, f=1;

    printf("enter any number: ");
    scanf("%d",&n);

    for (int i=n; i>0; i--)
        f *= i;

    printf("factorial of %d is %d\n", n, f);
}

C 的語法允許您為循環定義一個新變量,該變量將在循環完成后消失。 這使您可以在不更改循環內用戶輸入的情況下運行循環。

scanf("%d",&n);
for (int i = n; i > 0; i--)
{
    f=f*i;
}

有些人更喜歡for循環而不是while循環,因為它們有更多的“結構”——所有與循環組織相關的代碼都在一行代碼中。

你正在做的是“n=n-1;” 由於這一行,n 值在最后變為零,因此將 n 值保存在某個變量中,然后在最后打印

#include<stdio.h>
void main()
{
int n,f=1, k;
printf("enter any number: ");
scanf("%d",&n);
k=n;// do this
while(n>0)
{
    f=f*n;
    n=n-1;
}
printf("factorial of %d is %d",k,f);
}

由於循環后需要n的值,所以在while循環中不要修改n ,而是用一個臨時變量i來枚舉因子。

另請注意, main()的返回類型為int並在成功退出時返回0

這是修改后的版本:

#include <stdio.h>

int main() {
    int n, f = 1;
    printf("enter any number: ");
    if (scanf("%d", &n) == 1) {
        int i = n;
        while (i > 1) {
            f = f * i;
            i = i - 1;
        }
        printf("factorial of %d is %d", n, f);
    }
    return 0;
}

n 在 while 循環結束時始終為 0。 如果將 n 用作計數器,則無法打印舊值。 創建一個單獨的變量並將其用作 while 循環中的計數器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM