RainbowMan 发表于 2020-4-9 12:45:56

关于C语言的程序设计问题

问题是:输入n(n<10)和a,计算下面数列前n项的和:

S=1/a+ (-2/aa) +(3/aaa).......+(n*(-1)^(n-1)/aaa...a)


下面是我编写的代码,程序没有报错,但是调试运行之后我输入a和n后回车没有任何反应,我也找不出问题,这是为什么啊??

# include<stdio.h>
# include<math.h>
double pow(double X,double Y);
int main()
{
        double S=0;
        double i,n,a,X,term=0,sum=0;
        scanf("%d %d\n",&a,&n);
        for(i=1;i<=n;i++)
        {
                X=pow(-1.0,i-1);
                term=term*10+a;
                sum=sum+term;
                S=S+(i*X/sum);
        }
        printf("S=%f\n",S);
        return 0;
}

zxcbcv 发表于 2020-4-9 12:50:32

本帖最后由 zxcbcv 于 2020-4-9 12:58 编辑

在 scanf("%d %d\n",&a,&n)中   \n前加个   \0   就行了


我也总出现这种情况 ,求哪位大神解释一下这问题呗

最后的魁拔 发表于 2020-4-9 13:03:42

你上面定义的是浮点型,输入的时候确实整型

sunrise085 发表于 2020-4-9 14:01:06

问题1、scanf内最好不要有格式化字符以外的其他字符。若有其他字符,你就需要严格按照你写在里面的字符进行输入,否则就会出错。
问题2、你定义的各个变量都是double类型,scanf和printf时格式化字符应该用%lf或者%f,最好是用%lf


还有一个建议,X其实不必这样写,因为在循环里面,可以每次乘以-1,不就改变其符号了么

# include<stdio.h>
int main()
{
    double S=0;
    double i,n,a,X=-1,term=0,sum=0;
    scanf("%lf%lf",&a,&n);
    for(i=1;i<=n;i++)
    {
      X*=-1;
      term=term*10+a;
      sum=sum+term;
      S=S+(i*X/sum);
    }
    printf("S=%lf\n",S);
    return 0;
}

sunrise085 发表于 2020-4-9 14:05:04

zxcbcv 发表于 2020-4-9 12:50
在 scanf("%d %d\n",&a,&n)中   \n前加个   \0   就行了




你需要好好研究一下scanf函数的用法
可以看看这个帖子
这个帖子中还连接了其他帖子,都是我针对scanf的一些解答。应该会对你和楼主有帮助。

zxcbcv 发表于 2020-4-9 15:02:21

sunrise085 发表于 2020-4-9 14:05
你需要好好研究一下scanf函数的用法
可以看看这个帖子
这个帖子中还连接了其他帖子,都是我针对scanf的 ...

3q
页: [1]
查看完整版本: 关于C语言的程序设计问题