C语言编程数列求和

就是有一个数列:2/1,3/2,5/3,8/5,13/8,21/13……求前29项之和。我在度娘搜到这个答案:#include<stdio.h>
void main()
{
int a = 1, b = 2, c, i;
double sum = 2;
for( i=1; i<10; i++ )
{
c = a + b, a = b, b = c;
sum += double(b) / a;
}
printf("数列前十项和为:%f\n", sum);
}
但是sum+=double(b)/a看不懂。我把那个加好去掉之后,也能编译成功。但我还是想不明白这个式子怎么表示累加的过程。他不是仅仅定义sum=b/a而已吗?

第1个回答  2013-02-18
这是c语言的语法啊 sum += double(b) / a 等同于 sum = sum + double(b) / a
右边的sum表示变量sum的地址 因为在等号的左边所以也称作左值
所以是把 sum的值加上 转换成double类型的b和a的商 储存于 sum变量的地址中
明白了吗?
第2个回答  2013-02-18
+=的意思就在字面上表示出来了,
inta+=intb表示inta=inta+intb, C语言的简洁
那句代码就是sum = sum + (double(b) / a)
基础还是要打扎实追问

理解了一点。但是这个式子不简便的写法是什么呢?sum=double(b)/a+?还有为什么括号只括起了b而没有像这个样子(b/a)?实再不太好理解,麻烦详细说一下,我是初学者。

追答

b声明为了int类型, a也是int类型, 结果也是整型, 那么程序就不正确了. 这里的语法是C风格的强制类型转换, 可以写作(double)b也可以写作double(b), 目的是迫使编译器以浮点类型对待b, 这样算出来的sum类型也是一个浮点值. 其实不光可以对b做转换, 对a做强制浮点转换或者a和b都做都是可以的, 不过只要一个就够了.
计算中有一个操作数是浮点就会使用浮点计算指令, 如果两个都是整型就使用整型计算指令, 得不到浮点结果

本回答被提问者采纳
第3个回答  2007-07-15
for(a=1,a<11,a++)
for(b=a+1,b<12,b++)
for(c=b+1,a<13,a++)
for(d=c+1,d<14,d++)
for(e=d+1,a<15,e++)
{
printf("m="%d,a+b+c+d+e);
}

给你个思路,代码可能有错,很久没写c了~
第4个回答  2007-07-15
#include<stdio.h>
main()
{
int a,b,c,d,e,m;

for(a=b=c=d=e=1; a<15;a++)
for(;b<15;b++)
for(;c<15;c++)
for(;d<15;d++)
for(;e<15;e++)
{
{
if(a!=b!=c!=d!=!e)
m=a+b+c+d+e;
}
printf("m=%d ",m);
}
getch();
}
应该对吧我没怎么算
第5个回答  2007-07-15
利用全排列

#include<stdio.h>

void swap(int a[], int x, int y) {
int temp = a[x];
a[x] = a[y];
a[y] = temp;
}

int sum(int array[], int n, int k) {
if (n == k) {
int out[5], i;
for (i = 0; i < 5; i++) {
out[i]=array[i];
}
printf("%d+%d+%d+%d+%d=%d\n",out[0], out[1], out[2], out[3], out[4],out[0] + out[1] + out[2] + out[3] + out[4]);
} else {
int j;
for (j = k; j < n; j++) {
swap(array, k, j);
sum(array, n, k + 1);
swap(array, j, k);
}
}
}

int main(){
int i, j;
for(i=0;i<15-4;i++){
int in[5];
for(j=0;j<5;j++){
in[j]=i+1+j;
}
sum(in, 5, 0);
}
}

c语言如何对一个数列求和?
在C语言中,可以使用循环语句和条件语句来实现对序列2-4+6-8+…+98-100的求和。可以通过判断当前项的值和前一项的值符号是否相同来实现正负号的交替。以上代码中,我们定义了变量 i、sum、sign 和 term,其中 i 表示循环计数器,sum 表示求和的结果,sign 表示正负号,term 表示当前项的值。在循环...

如何用c语言实现数列的求和?
如何用c语言实现数列的求和?--- 你一项一项的相加,就可以求出数列的和。

c语言从2加4加到2n的求和s大于20232024的最小正整数
s = 2 + 4 + 6 + ... + 2n > 20232024 这是一个等差数列求和问题。等差数列的求和公式为:s = n * (a1 + an) \/ 2 在这个问题中,首项 a1 = 2,尾项 an = 2n,公差 d = 2。我们可以将公式写为:s = n * (2 + 2n) \/ 2 我们需要找到最小的正整数 n,使得 s > 2023...

C语言编程:有一分数序列:2\/1,3\/2,5\/3,8\/5,13\/8,21\/13...求出这个数列...
public class Demo11 { public static void main(String[] args) { double sum=2\/1;double m=2;\/\/定义分子 double n=1;\/\/定义分母 for(int i=2;i<=20;i++){ m=m+n;n=m-n;sum+=(double) m\/n; \/\/将分子的类型强制转换成double,否则两个int相除,结果还是int会将小数点后都舍...

求C语言编写等差数列求和的代码?
等差数列求和求和有两种方法,第一种是数值循环相加,第二种是利用公式:Sn=n*a+n*(n-1)*d\/2,其中a为数列首项代码如下:include <stdio.h> int main(void){ int a,m,d,sum;int s=0,n=1;do { printf("清输入等差数列首项值a,项数m,数列差值d\\n");scanf("%d,%d,%d",&a,&m...

求C语言的代码:输入一个整数n计算数列1\/1,2\/2,3\/3,4\/5,5\/8,6\/13...
int main( void ){ int n; \/\/ 项数 float sum = 0; \/\/和 printf( "输入一个整数:\\n" );scanf( "%d", &n );if ( n < 0 ) \/\/ 处理错误输入 { printf( "error\\n" );return 0;} else { int m_1 = 0;int m_2 = 1;for ( int i = 1; i <=n ; i ++ ){ sum...

C语言交错数列求和
int main(int argc,char *argv[]){ int n,k,i;double s,t;printf("Enter n(int 0<n)...\\nn=");if(scanf("%d",&n)!=1 || n<1){ printf("Input error, exit...\\n");return 0;} for(s=t=0,k=i=1;i<=n;i++,k+=2)s += i&1 ? i\/(k+0.0) : -i\/(k+0...

C语言中编程计算1至100以内的奇数和偶数并分别求和,求代码
C语言中编程计算1至100以内的奇数和偶数并分别求和 include<stdio.h> void main(){ int i,sumA=0,sumB=0;for(i=1;i<=100;i++){ if(i%2!=0){ sumA++;}else{ sumB++;} } printf("100以内的奇数和是:%d,偶数和是:%d",sumA,sumB);} 分别计算100以内的奇数和与偶数和的程序...

c语言数列求和 2\/1+3\/2+5\/3+8\/5………求前n项之和
include "stdio.h"int main(void){ int n,i,a,b;double sum;while(1){printf("Input n(int n>0)...\\nn=");if(scanf("%d",&n) && n>0)break;printf("Error, must n>0: ");}for(sum=0.0,a=1,b=2,i=1;i<=n;i++){sum+=b\/(a+0.0);b+=a;a=b-a;}printf(...

c语言编程问题:一分之一加到n分之一,求和
调和数列是自然数的倒数组成的数列,即 1\/n 的序列。人们已经研究了调和数列几百年,但至今未能得到其精确求和公式。虽然存在一个近似公式,即当n很大时,1\/n 的和近似等于 ln(n) 加上欧拉初始(C=0.57722...,一个无理数)。人们通常认为调和数列没有简洁的求和公式。但实际上,调和数列的发散...

相似回答