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 去掉以后一切正常,谢谢!
大约 2 年之前 回复
qq_32162235
qq_32162235 额(⊙o⊙)…,没注意这一点,谢谢,早上有课,明天我更正看看。
大约 2 年之前 回复
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去掉也是对的。我只是针对你的逻辑来讲,你应该恢复下初始值,正巧你这个代码不用罢了。。
大约 2 年之前 回复
qq_32162235
qq_32162235 谢谢!不过我试了一下,m,i,s不用恢复初始值好像也可以,为什么呢
大约 2 年之前 回复
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 好长啊,有点看不懂……指针还没有学完,等学完了再来研究一下,谢谢帮忙。
大约 2 年之前 回复
l_vaule
l_vaule   2016.05.10 23:26

代码写的好乱图片说明

qq_32162235
qq_32162235 谢谢
大约 2 年之前 回复
l_vaule
l_vaule 挺上进的,我要睡觉了,明天早上把代码给你。
大约 2 年之前 回复
qq_32162235
qq_32162235 抱歉啊,初学者,接触的知识太少,我会好好努力的!
大约 2 年之前 回复
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 好像不能连续输入,而且结果有点小问题
大约 2 年之前 回复
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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
机器人运动正逆解
http://blog.sina.com.cn/s/blog_131fa47b20102whij.html
利用C语言求解一元二次方程组的解
题目:求一元二次方程的解。 注意:a,b,c是浮点数,浮点数判断是否等于0. 因为浮点数在内存中的存储方式使得,有些浮点数在内存中无法精确存储,这样就会使得浮点数的精度丢失。 因此在浮点数与0作比较时,设置适当的精度,误差在此范围内,便可认为其=0.
关于欧几里得及其扩展算法(C语言实现)
    作为新人Acmer,这两天刚刚学习了欧几里得(扩展算法),为方便以后复习,特地记录一下此算法,作为个人笔记。因水平有限,如有纰漏,日后再完善!    1.首先我们知道,欧几里得算法是求两个正整数a,b的最大公因数gcd(a,b),这里不妨设(a&amp;gt;b&amp;gt;0).先附上代码:int gcd(int a,int b) { if(b==0) return a; else r...
扩展欧几里德算法解线性方程ax+by=c [模板]
扩展欧几里德算法 [模板]
c语言正定矩阵求逆算法实现
c语言正定矩阵求逆c语言正定矩阵求逆c语言正定矩阵求逆c语言正定矩阵求逆c语言正定矩阵求逆c语言正定矩阵求逆c语言正定矩阵求逆c语言正定矩阵求逆c语言正定矩阵求逆
用C语言程序实现黎曼和求定积分
用C语言程序实现黎曼和求定积分
三种方法求最大公约数(C语言版)
问题描述:用三种方法求两个的整数的最大公约数。 算法分析: 1.相减法:输入两整数a和b,(1)如果a>b,a=a-b;(2)如果a  (4)如果a!=b,则再执行(1)或(2) 程序实现如下图: 2.穷举法:输入两个整数a和b,(1)定义c;(2)如果a>b,则c=b;(3)如果a      (4)如果a%c||b%c!=0,则执行c--;(5)如果a%c&&b%c==0,则
【C语言】求1-3+5-7+...-99+101的值。
原式可以写成:(1+5+...)-(3+7+...) #include main() { int i,j,sum1=0,sum2=0; { for(i=1;i<=101;i+=4)sum1+=i; for(i=3;i<=99;j+=4)sum2+=j; } printf("sum=%d",sum1-sum2); }
c语言实现矩阵求逆程序
c实现矩阵求逆程序。希望对大家有所帮助。
求一个数在计算机中存储的二进制补码的c语言程序
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main() { int num = 0,i=0,n=1; while (n) { printf("请输入一个整数\n"); scanf("%d", &num); for (int i = 31; i >= 0; i--)