Leon19960120 发表于 2021-11-6 22:03

老哥求解答

#include<stdio.h>
int main()
{
        int j, k, n;
        float f, s;
        scanf("%d", &n);
        s = 0; f = 1;
        for (k = 1; k < n; k++)
        {
                for (j = 1; j < k; j++)
                        f = f * k;
                s = s + f;
                printf("%.0f#", s);

        }return 0;
}

为什么答案是1#3#21#
1/3我能理解,21实在不能理解,求老师指教

kenxy 发表于 2021-11-6 23:00

本帖最后由 kenxy 于 2021-11-6 23:28 编辑

调试一下就知道了

青春丿易逝 发表于 2021-11-6 23:12

f的值依次为2,6,18
对应的是1×2=2,2×3=6,6×3=18

s对应1,1+2=3,3+18=21

日后再说、 发表于 2021-11-6 23:16

#include<stdio.h>
int main()
{
    int j, k, n;
    float f, s;
    scanf("%d", &n);
    s = 0; f = 1;
    for (k = 1; k < n; k++)
    {
      for (j = 1; j < k; j++)
            {   f = f * k;
                printf("%.0f---", f);
            }
      s = s + f;
      printf("%.0f#\n", s);

    }return 0;
}

在第二个for加个输出,这不就看的明明白白了嘛 18+3=21

1#
2---3#
6---18---21#   

Leon19960120 发表于 2021-11-6 23:38

对了 忘了说输入是4 ,就是n是4

Leon19960120 发表于 2021-11-6 23:56

日后再说、 发表于 2021-11-6 23:16
#include
int main()
{


我大概懂意思了:
我输入的n是4,第一次打印输出1#;
第二次是打印输出3#
第三次我以为循环一次,其实是循环两次,而且循环体是f=f*k,为什么不是(f=f*k;s=s+f;)这个地方不是很理解。
谢谢大佬

Leon19960120 发表于 2021-11-7 00:00

日后再说、 发表于 2021-11-6 23:16
#include
int main()
{


1#
2---3#
6---18---21#
老哥这个是输出窗口还是调试界面啥的

kenxy 发表于 2021-11-7 00:10

4楼说得很清楚了

日后再说、 发表于 2021-11-7 00:19

Leon19960120 发表于 2021-11-6 23:56
我大概懂意思了:
我输入的n是4,第一次打印输出1#;
第二次是打印输出3#


因为for的用法当中,就应该要有{},
for(初始化;判断;增值)
{循环体}
如果你不加{}的话,就默认为for后的第一条语句为{循环体},
也就是
      for (j = 1; j < k; j++)
            {   f = f * k;
         }

日后再说、 发表于 2021-11-7 00:20

Leon19960120 发表于 2021-11-7 00:00
1#
2---3#
6---18---21#


当n=4时的输出内容
页: [1] 2
查看完整版本: 老哥求解答