白小木 发表于 2019-5-21 22:54:57

求阶乘

我想了一下,不考虑c语言的常识性问题,
我这样编写一个求10以内的阶乘代码可不可取,反正编译运行的结果是不对的
#include<stdio.h>

int main()
{
        int i,n,j;
       
        printf("请输入要求的值:\n");
        scanf("%d",&n,&j);
        j = 1;

        n = i;
        i == 1 ;
        while(i<=n)
        {
               
                j = j*i;
                i++;
        }
        printf("factorial of %d is: %.2f.\n ",n,j);

        return 0;
}

pheron 发表于 2019-5-21 23:01:53

第8行,去掉,&j
第12行,i=1
第19行,%.2f换成%d。
手机打的,不知道格式会不会乱

jackz007 发表于 2019-5-21 23:26:23

本帖最后由 jackz007 于 2019-5-21 23:28 编辑

      还是使用 for 循环比较有优势一些
#include <stdio.h>

int main()
{
      unsigned i , j , n                                 ;
      
      printf("请输入要求的值:\n")                           ;
      scanf("%d" , & n)                                    ;
      if(n > 0) {
                for(i = 1 , j = 1 ; i <= n ; i ++) j = j * i ;
                printf("factorial of %d is: %d.\n " , n , j) ;
      }
}

bin554385863 发表于 2019-5-21 23:29:36

有点迷,看不懂你上面的代码
#include <stdio.h>
void main()
{
    int n, Nn = 1;
    printf("请输入要求的值:\n");
    scanf("%d", &n);
    /*for循环求阶乘*/
    if (n >= 0)
    {
      if ((n == 0) || (n == 1))
      {
            Nn = 1;
      }
      else
      {
            for (int i = 1; i <= n; i++)
            {
                Nn = Nn * i;
            }
      }
      printf("for循环求阶乘:\nn! = %ld", Nn);
    }
    else
    {
      printf("ERROR:正负错误\n");
    }
}

白小木 发表于 2019-5-22 00:15:10

jackz007 发表于 2019-5-21 23:26
还是使用 for 循环比较有优势一些

后来我想了想,用了两种方式
(1)#include<stdio.h>

int main()
{
        int i,n,j;
       
        printf("请输入要求的值:\n");
        scanf("%d",&n);
        i = 1;

        j = 1;
       
        while(i<=n)
        {
               
                j = j*i;
                i++;
        }
        printf("factorial of %d is: %d\n ",n,j);

        return 0;
}
(2)
#include<stdio.h>

int main()
{
        int i ,n ;
        double sum = 1;
        scanf("%d",&n);
        for(i=1;i<=n;i++)
             sum = sum*i;
    printf("%d!=%.1f",n,sum);
    printf("\n");
       
       
        return 0;
}


第一种是纯属自己琢磨出来的

白小木 发表于 2019-5-22 00:16:15

pheron 发表于 2019-5-21 23:01
第8行,去掉,&j
第12行,i=1
第19行,%.2f换成%d。


谢谢,是这样的呢

白小木 发表于 2019-5-22 00:17:00

bin554385863 发表于 2019-5-21 23:29
有点迷,看不懂你上面的代码

谢谢,这个代码也挺好

白小木 发表于 2019-5-30 22:43:04

jackz007 发表于 2019-5-21 23:26
还是使用 for 循环比较有优势一些

g]刚刚又学了一种阶乘求法,感觉这个意思要更明了,嘻嘻{:5_109:}
#include<stdio.h>

int main()
{
        int cont;
do
   {
          int a , S = 1 , b=1 ;
       
          printf("请输入要求阶乘的数:"); scanf("%d",&a);
       
   do
           {
                S = S*b;
                b = b+1;
               
           } while (b <=a);
       
          printf("%d的阶乘为:%d\n",a,S);
          puts("是否继续?");
          printf("【Yes...0/No...9】\n");
          scanf("%d",&cont);
    } while ( cont == 0);
   
        return 0;
}

jackz007 发表于 2019-5-30 22:55:02

本帖最后由 jackz007 于 2019-5-30 23:05 编辑

      差不多所有使用 do ... while 循环的地方,都可以用 for 循环取代,用 for 可以在循环开始前对多个变量进行初始化,单次循环结束~开始交接的时候,还有机会调整多个变量的值,当然,还有循环条件的判断,所有的这些都可以写在同一个括号里面,只要用分号、逗号把它们隔开就可以了,和 do ...while 语句相比,代码会简洁许多。

白小木 发表于 2019-5-30 23:03:27

嗯呐,刚刚开始学,还望大佬,以后多多指教

白小木 发表于 2019-5-30 23:04:07

jackz007 发表于 2019-5-30 22:55
用 for 循环可以在循环开始前对多个变量进行初始化,单次循环结束~开始交接的时候,还有机会调整多个 ...

才刚学到变量初始化
页: [1]
查看完整版本: 求阶乘