2 qq 32162235 qq_32162235 于 2016.05.10 23:16 提问

C语言初学妹子求大神解决程序错误问题,求正解

/*分别用while、do-while和for循环求:1!+2!+。。。+n!。
设计一个主界面,实现连续读入不同的n值并求解;*/
#include //用while实现
int main()
{
while(1)
{
int i=1,j=1,s=0,m=1;
int n;
printf("请输入n的值:\n");
scanf("%d\n",&n);
if(n<1)
break;
else
{
s=0;
while(j<=n)
{
while(i<=j)
{
m=m*i;
i++;
}
s+=m;
j++;
}
printf("阶乘的和为:%d\n",s);
}
}
return 0;
}

10个回答

shenshucong520
shenshucong520   2016.05.10 23:38
已采纳

scanf("%d\n",&n);把\n去掉程序正常的吗,其他循环逻辑一样的吗

qq_32162235
qq_32162235 去掉以后一切正常,谢谢!
一年多之前 回复
qq_32162235
qq_32162235 额(⊙o⊙)…,没注意这一点,谢谢,早上有课,明天我更正看看。
一年多之前 回复
oPrinceme
oPrinceme   2016.05.11 00:55

1.scanf后面\n是不应该加的。。
2.m和i用完之后都没有回复初始值。。
/*分别用while、do-while和for循环求:1!+2!+。。。+n!。
设计一个主界面,实现连续读入不同的n值并求解;*/

#include //用while实现
int main()
{
while(1)
{
int i=1,j=1,s=0,m=1;
int n;
printf("请输入n的值:\n");
scanf("%d",&n);

    if(n<1)
    break;
    else
    {
        s=0;
        while(j<=n)
        {
            while(i<=j)
            {
                m=m*i;
                i++;
            }
            s+=m;
            j++;
            m=1;
            i=1;
        }
        printf("阶乘的和为:%d\n",s);
    }
}
return 0;

}

oPrinceme
oPrinceme 回复蒲公英的伞: 给你举个例子 在j=3的时候 m=6 i=4 而等你 跑到j=4的时候 第二层while 只跑了一次 m=24 i=5 所以不恢复也可以,换句话讲,你把第二层while去掉也是对的。我只是针对你的逻辑来讲,你应该恢复下初始值,正巧你这个代码不用罢了。。
一年多之前 回复
qq_32162235
qq_32162235 谢谢!不过我试了一下,m,i,s不用恢复初始值好像也可以,为什么呢
一年多之前 回复
l_vaule
l_vaule   2016.05.11 08:58

#include
#include
using namespace std;
int f(int num)
{
int n=1;
int i=1;
while(i<=num)
{
n*=i++;
}
return n;
}
int f_(int n)
{
int i=1;
int num=0;
while(i<=n)
num+=f(i++);
return num;
}

int f2(int num)
{
int n=1;
int i=1;
do
{
n*=i++;
}while(i<=num);
return n;
}
int f2_(int n)
{
int i=1;
int num=0;
do{
num+=f(i++);
}while(i<=n);

return num;

}

int f3(int num)
{
int n=1;
int i=1;
for(i=1;i<=num;i++)
n*=i;
return n;
}
int f3_(int n)
{

int num=0;
for(int i=1;i<=n;i++)
{
num+=f3(i);
}
return num;
}

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
int n;
cin>>n;
cout <<"||"<<endl;
cout<<f_(n)<<endl;
cout<<f2_(n)<<endl;
cout<<f3_(n)<<endl;
return a.exec();
}

qq_32162235
qq_32162235 好长啊,有点看不懂……指针还没有学完,等学完了再来研究一下,谢谢帮忙。
一年多之前 回复
l_vaule
l_vaule   2016.05.10 23:26

代码写的好乱图片说明

qq_32162235
qq_32162235 谢谢
一年多之前 回复
l_vaule
l_vaule 挺上进的,我要睡觉了,明天早上把代码给你。
一年多之前 回复
qq_32162235
qq_32162235 抱歉啊,初学者,接触的知识太少,我会好好努力的!
一年多之前 回复
YXTS122
YXTS122   2016.05.10 23:42

while (j<=n)
{
i=1;
m=1;
while(i<=j)

qq_33437513
qq_33437513   2016.05.11 00:33

代码看的头大图片说明图片说明图片说明图片说明图片说明

Visual0522
Visual0522   2016.05.11 00:37

#include "stdio.h"
#include "conio.h"
main()
{

int i;
printf("请输入i的值:\n");
scanf("%d\n",&i);
float n,s=0,t=1;

for(n=1;n<=i;n++)

{

t*=n; s+=t;

}

printf("1+2!+3!...+N!=%e\n",s);

getch();
}

wyz649296016
wyz649296016   2016.05.11 00:58

#include "stdio.h" //用while实现
int main()
{
int temp_num = 1,cur_num=1, whole_result=0,temp_result=1;
int whole_num;
printf("请输入n的值:\n");
scanf("%u", &whole_num);
if(whole_num < 1)
{
return 0;
}
else
{
while(cur_num <= whole_num)
{
while(temp_num<=cur_num)
{
temp_result = temp_result*temp_num;
temp_num++;
}
whole_result += temp_result;
cur_num++;
temp_result=1;
printf("cur_num:%u\n", cur_num);
temp_num = 1;
}
printf("阶乘的和为:%d\n", whole_result);
}

return 0;

}

qq_32162235
qq_32162235 好像不能连续输入,而且结果有点小问题
一年多之前 回复
l_vaule
l_vaule   2016.05.11 09:02

项目建成c++了,你可以看下思路。。

ZGZ1002
ZGZ1002   2016.05.11 09:44

int main()
{
int temp_num = 1,cur_num=1, whole_result=0,temp_result=1;
int whole_num;
printf("请输入n的值:\n");
scanf("%u", &whole_num);
if(whole_num < 1)
{
return 0;
}
else
{
while(cur_num <= whole_num)
{
while(temp_num<=cur_num)
{
temp_result = temp_result*temp_num;
temp_num++;
}
whole_result += temp_result;
cur_num++;
temp_result=1;
printf("cur_num:%u\n", cur_num);
temp_num = 1;
}
printf("阶乘的和为:%d\n", whole_result);
}

return 0;
}

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!