user-0 提问: c语言编程问题

回复:
user: user-1
content: 总的就是:注意第一个数，注意超数据类型范围检测这两点，可能楼主问的没这么深，，，

user: user-2
content: #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); }

user: user-3
content: 引用 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] 同意，这是正解！！

user: user-4
content: 有精度损失应该用数学公式来代替一下

user: user-5
content: 引用 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 更大

user: user-5
content: 引用 10 楼 自信男孩的回复:[quote=引用 8 楼 super_admi 的回复:] 这个题目的关键点，在于没有任何限制。换句话说，假如n值非常大，那么你用C语言内置的类型，就无法满足要求了。 并且，按照常理，这种题目往往就是考察无限迭代求近似值。我记得求pi值，也有这么一个类似的公式吧？那么，如果我想打出pi的小数点后100万位前的结果，怎么搞？  [quote=引用 6 楼 cfjtaishan 的回复:] [quote=引用 4 楼 super_admi 的回复:] 在我看来，这道题是比较麻烦的。 别卖关子了，把你的想法说出来吧[/quote][/quote]  对于一个初学编程的人，没必要考虑pi后100万位小数点的问题。再说你考虑100万位小数有什么意义，要搞科学研究，科学计算吗？  在这里提需求的，没那么高的要求吧 [/quote] 高精度算法，洛古有代码，自查

user: user-5
content: 引用 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] 用高精度，不然容易出错

user: user-6
content: 为什么分母都写2*i -1, 而没人写 2* i +1 呢？

user: user-7
content: 引用 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; }  还好有注释

user: user-7
content: 引用 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语言的写的。

user: user-8
content: 唉不会写啊啊

user: user-9
content: 先通分再计算。a2a3...an+....+a1a2...an-1/a1a2...an

user: user-10
content: #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；}

user: user-11
content: 引用 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; } 这样应该可以了

user: user-12
content: #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; }

user: user-13
content: 引用 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

user: user-13
content: 引用 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哦

user: user-14
content: #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; }   我也是初学者，这个程序你应该看得懂。

user: user-11
content: #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; }

user: user-15
content: 初来乍到，表示真心看不懂，目前计算机才一级，这是几级的考题啊？