c语言编程问题

锦韵星寒 2018-10-25 10:29:26
各位大神,这道c语言编程题不会做,求教 输入一个整数n,输出数列1+1/3+1/5+……前n项的和
...全文
1291 37 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
37 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
总的就是:注意第一个数,注意超数据类型范围检测这两点,可能楼主问的没这么深,,,
都布吉岛 2018-11-17
  • 打赏
  • 举报
回复
#include<stdio.h>
void main()
{int n,s;
float sum=0;
scanf("%d",&n);
for(s=1,s<=n,s++)
{
sum+=1/(2*s-1);
}
printf("%f",sum);
}
jiaoyun007 2018-11-17
  • 打赏
  • 举报
回复
引用 3 楼 cfjtaishan 的回复:
[quote=引用 2 楼 boxmanstan 的回复:] [quote=引用 1 楼 yeshenyuege 的回复:] int n;int sum;for(int i=0;i<=n;i++)sum+=1/(2i-1)
变量类型不对,结果肯定是错的,再改一下 [/quote] 这是伪代码吧,正式的代码2i是什么?还是2 * i?
#include <stdio.h>

int main(void)
{
    int n, i;
    float sum = 0;

    scanf("%d", &n);

    for (i = 1; i < n; i++) {
        printf("%d/%d + ", 1, 2 * i -1);
        sum += 1.0 /(2 * i - 1);
    }
    printf("%d/%d", 1, 2 * n -1);
    sum += 1.0 /(2 * n - 1);

    printf(" = %f\n", sum);
    return 0;
}
参考一下吧[/quote] 同意,这是正解!!
-lyslyslys 2018-11-17
  • 打赏
  • 举报
回复
有精度损失应该用数学公式来代替一下
qq_43001187 2018-11-13
  • 打赏
  • 举报
回复
引用 13 楼 qq_42808787的回复:
int main()
{
unsigned int n,i,j;
double sum;
puts("请输入一个1到2G的整数");
scanf("%d",&n);
i=1,j=1;
while(i++<=n)
{
sum+=1/j;
j+=2;
}
printf("%lf",sum);
return 0;
}
unsigned long long 更大
qq_43001187 2018-11-13
  • 打赏
  • 举报
回复
引用 10 楼 自信男孩的回复:
[quote=引用 8 楼 super_admi 的回复:]
这个题目的关键点,在于没有任何限制。换句话说,假如n值非常大,那么你用C语言内置的类型,就无法满足要求了。
并且,按照常理,这种题目往往就是考察无限迭代求近似值。我记得求pi值,也有这么一个类似的公式吧?那么,如果我想打出pi的小数点后100万位前的结果,怎么搞?

[quote=引用 6 楼 cfjtaishan 的回复:]
[quote=引用 4 楼 super_admi 的回复:]
在我看来,这道题是比较麻烦的。

别卖关子了,把你的想法说出来吧[/quote][/quote]

对于一个初学编程的人,没必要考虑pi后100万位小数点的问题。再说你考虑100万位小数有什么意义,要搞科学研究,科学计算吗?

在这里提需求的,没那么高的要求吧
[/quote] 高精度算法,洛古有代码,自查
qq_43001187 2018-11-13
  • 打赏
  • 举报
回复
引用 3 楼 自信男孩的回复:
[quote=引用 2 楼 boxmanstan 的回复:]
[quote=引用 1 楼 yeshenyuege 的回复:]
int n;int sum;for(int i=0;i<=n;i++)sum+=1/(2i-1)


变量类型不对,结果肯定是错的,再改一下
[/quote]
这是伪代码吧,正式的代码2i是什么?还是2 * i?

#include <stdio.h>

int main(void)
{
int n, i;
float sum = 0;

scanf("%d", &n);

for (i = 1; i < n; i++) {
printf("%d/%d + ", 1, 2 * i -1);
sum += 1.0 /(2 * i - 1);
}
printf("%d/%d", 1, 2 * n -1);
sum += 1.0 /(2 * n - 1);

printf(" = %f\n", sum);
return 0;
}

参考一下吧[/quote] 用高精度,不然容易出错
英雄@末路 2018-10-29
  • 打赏
  • 举报
回复
为什么分母都写2*i -1, 而没人写 2* i +1 呢?
zy010101 2018-10-28
  • 打赏
  • 举报
回复
引用 12 楼 赵4老师的回复:
#include <stdio.h>
long a=10000;
long b;
long c=2800;
long d;
long e;
long f[2801];
long g;
int main() {
for(;b-c;) f[b++]=a/5;
// while (1) {
// if (0==b-c) break;
// f[b]=a/5;
// b++;
// }

//f[0 - 2800] = 10000/5
for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)
for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b);
// while (1) {
// d=0;
// g=c*2;
// if (0==g) break;
// b=c;
// while (1) {
// d+=f[b]*a;
// f[b]=d%--g;
// d/=g--;
// --b;
// if (0==b) break;
// d*=b;
// }
// c-=14;
// printf("%.4d",e+d/a);
// e=d%a;
// }

return 0;
}
还好有注释
zy010101 2018-10-28
  • 打赏
  • 举报
回复
引用 12 楼 赵4老师的回复:
#include <stdio.h>
long a=10000;
long b;
long c=2800;
long d;
long e;
long f[2801];
long g;
int main() {
for(;b-c;) f[b++]=a/5;
// while (1) {
// if (0==b-c) break;
// f[b]=a/5;
// b++;
// }

//f[0 - 2800] = 10000/5
for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)
for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b);
// while (1) {
// d=0;
// g=c*2;
// if (0==g) break;
// b=c;
// while (1) {
// d+=f[b]*a;
// f[b]=d%--g;
// d/=g--;
// --b;
// if (0==b) break;
// d*=b;
// }
// c-=14;
// printf("%.4d",e+d/a);
// e=d%a;
// }

return 0;
}
赵4老师的代码每次都让我感觉这不是C语言的写的。
2018-10-28
  • 打赏
  • 举报
回复
唉不会写啊啊
chenyinheng30 2018-10-28
  • 打赏
  • 举报
回复
先通分再计算。a2a3...an+....+a1a2...an-1/a1a2...an
小鱼编程 2018-10-28
  • 打赏
  • 举报
回复
#include<stdio.h> int main() { int n,i; float sum=0,a; scanf("%d",&n); for(i=1;i<=n;i++) { a=1.0/(i+2); sum+=a; } printf("%f\n",sum); return 0;}
Jonathan_Wan 2018-10-28
  • 打赏
  • 举报
回复
引用 20 楼 Franks_Wan 的回复:
#include <iostream>
using namespace std;
int main()
{
int n;
cin>>n;
double sum=0.0;
double mid;
for(int i=1;i<=n;i++)
{
mid=2*i-1;
sum+=1.0/mid;
}
cout<<sum;
}

这样应该可以了
只小萌新 2018-10-28
  • 打赏
  • 举报
回复
#include<stdio.h>
int main()
{
int i=1,n;
double sum=0,k=1;
do
{
sum=sum+k;
i=i+1;
if(n%2==0)
{
k=(double)(-1)/(2*i-1);
printf("%lf",k);
}

else
{
k=(double)1/(2*i-1);
printf("%lf",k);
}

}while(i<=n);
printf("%.2lf",sum);
return 0;
}
自信男孩 2018-10-27
  • 打赏
  • 举报
回复
引用 20 楼 Franks_Wan 的回复:
#include <iostream>
using namespace std;
int main()
{
int n;
cin>>n;
double sum=0.0;
for(int i=1;i<=n;i++)
sum+=1/(2*i-1);
cout<<sum;
}

虽然简单,不过也建议你自己运行一下你的程序看是否符合要求。
1 / (2 * i - 1)在当i为2时,结果都是0
自信男孩 2018-10-27
  • 打赏
  • 举报
回复
引用 13 楼 qq_42808787 的回复:
int main()
{
unsigned int n,i,j;
double sum;
puts("请输入一个1到2G的整数");
scanf("%d",&n);
i=1,j=1;
while(i++<=n)
{
sum+=1/j;
j+=2;
}
printf("%lf",sum);
return 0;
}

你的代码是否运行过1/j这样的运算可不是按照浮点数的,因为1和j都是无符号数,所以得到的结果(当j不为0)都是0哦
iTXCode 2018-10-27
  • 打赏
  • 举报
回复
#include<stdio.h> double fun(int n) { int i=1; double j=0,sum=0; int count=0; while(count<n) { j=1.0/i; /*此处 / 的特点是两个操作数一个是浮点数类型的话结果才是浮点数类型,不然得到的结果是整数。*/ i=i+2; sum+=j; count++; } return sum; } int main() { int n; double ret=0; scanf("%d",&n); ret=fun(n); printf("%f\n",ret); return 0; } 我也是初学者,这个程序你应该看得懂。
Jonathan_Wan 2018-10-27
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;
int main()
{
int n;
cin>>n;
double sum=0.0;
for(int i=1;i<=n;i++)
sum+=1/(2*i-1);
cout<<sum;
}
天涯渐离 2018-10-27
  • 打赏
  • 举报
回复
初来乍到,表示真心看不懂,目前计算机才一级,这是几级的考题啊?
加载更多回复(17)

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧