c语言-C语言,计算1+1/2-1/3+1/4-1/5+1/6...,要求只使用一个循环

问题描述

C语言,计算1+1/2-1/3+1/4-1/5+1/6...,要求只使用一个循环

C语言,计算1+1/2-1/3+1/4-1/5+1/6...,要求只使用一个循环

解决方案

 float foo(int n)
{
    float acc = 1.0;
    for (int i = 1; i < n; i++)
    {
        if (i % 2 == 0) acc += 1/float(i); else acc -= 1/float(i);
    }
    return acc;
}

int main()
{
    float r = foo(100);
    printf("%f", r);
}

http://codepad.org/tYlq33fQ

解决方案二:

我记得程序员考证中的下午一题就有这个,当时是要用一行代码完成,for循环里面的内容:(-1)的(n+1)次方/ n ,然后累加。

解决方案三:

 #include<stdio.h>

int  main()
{
    int n;
    scanf("%d",&n);
    float result = 1;
    for(int i=2; i<=n; i++)  //把1排除 ,从2开始
    {
        int flag;
        if(0 == i%2)   //判断是否是偶数
            flag = 1;
        else
            flag = -1;
        result += flag * 1.0 / i;   //小数计算要用1.0
    }
    printf("%f",result);
}

解决方案四:

 #include <stdio.h>

void main()
{
    int i,s=1;
    double sum=1.0;
    for(i=2; ;i++)
    {
        sum+=s*1.0/i;
        s=-s;
        if(1.0/i<0.00001) break;
    }
    printf("%lfn",sum);

} 

解决方案五:

for(int i=1;i<n;i++)
sum+=((-1)^i)/i;


解决方案六:

使用flag标记, 每次奇数时候, 赋值-1

int n = 20, flag = 1;
float s = 1;
 for(int i = 2; i <= n; i++) {
  s += 1 / i * flag ;
    flag = - flag;
    }
    prinf("%lf",s);

flag 真的很强大,比如: 冒泡排序中的flag标记

时间: 2024-09-03 16:55:02

c语言-C语言,计算1+1/2-1/3+1/4-1/5+1/6...,要求只使用一个循环的相关文章

《R的极客理想——高级开发篇 A》一一1.5 R语言的导数计算

1.5 R语言的导数计算 问题 如何用R语言进行导数计算? 引言 高等数学是每个大学生都要学习的一门数学基础课,同时也可能是考完试后最容易忘记的一门知识.我在学习高数的时候绞尽脑汁,但始终都不知道为何而学,生活和工作基本用不到,就算是在计算机行业和金融行业,能直接用到高数的地方也少之又少,学术和实际应用真是相差太远了. 不过,R语言为我打开了一扇高数应用的大门,R语言不仅能方便地实现高等数学的计算,还可以很容易地把一篇论文中的高数公式应用于产品的实践中.因为R语言我重新学习了高数,让生活中充满数

c语言-C语言fun函数计算数组N个数的平均值,并将小于平均值且最接近平均值的数作为函数值返回,求教问题

问题描述 C语言fun函数计算数组N个数的平均值,并将小于平均值且最接近平均值的数作为函数值返回,求教问题 #include #include #define N 10 double fun(double x[],double *av) { int i,j; double d,s; s=0;for(i=0; i<N; i++) s = s +x[i]; *av=s/N; d=32767;//求教这个d是什么含义呢?为何取值32767? for(i=0; i<N; i++) if(x[i]<

gcc-C 语言用CLOCKS_PER_SEC计算时间秒不准的问题

问题描述 C 语言用CLOCKS_PER_SEC计算时间秒不准的问题 #include #include int jishi(int b); int main(void) { int m; clock_t t; printf("多少点一秒%ldn",CLOCKS_PER_SEC); puts("请输入多长时间,秒为单位"); scanf("%d",&m); jishi(m); } int jishi(int b) { long t,o;

C语言简单实现计算字符个数的方法_C 语言

本文实例讲述了C语言简单实现计算字符个数的方法.分享给大家供大家参考.具体如下: char_counting.c如下: #include<stdio.h> int main() { long nc; nc = 0; while(getchar() != '0') { ++nc; } printf("%ld\n", nc); } 编译和使用下: 复制代码 代码如下: gcc char_counting.c -o char_counting.o   一种通常的调用方式: 复制代

C语言求幂计算的高效解法_C 语言

本文实例演示了C语言求幂计算的高效解法.很有实用价值.分享给大家供大家参考.具体方法如下: 题目如下: 给定base,求base的幂exp 只考虑基本功能,不做任何边界条件的判定,可以得到如下代码: #include <iostream> using namespace std; int cacExp(int base, int exp) { int result = 1; int theBase = 1; while (exp) { if (exp & 0x01) result =

c语言数组 字符串-n为2到50,如何顺序输出1/n的十进制表示的字符串(写出一个循环节为止)

问题描述 n为2到50,如何顺序输出1/n的十进制表示的字符串(写出一个循环节为止) 输出一个循环周期后就结束该数的输出1/7=0.142857n为2到50,如何顺序输出1/n的十进制表示的字符串(写出一个循环节为止) 解决方案 #include <iostream> using namespace std; void foo(int n) { int x = 1; int * initmod = new int[n]; cout << "1 / " <&

win7如何更改语言 电脑语言改成英文的方法

今年evad3rs团队发布的iOS 7完美越狱工具有些特殊,中国版iOS7完美越狱工具中,捆绑有太极助手插件,此插件类似流氓插件,容易导致iOS越狱设备出现白苹果现象(国外版无此插件).目前比较好的解决办法是:在使用电脑中越狱的时候,将电脑语言改为英文,可绕过该插件.但很多电脑小白用户还不知道如何更改电脑语言,因此本文将为大家详细介绍下电脑语言更改教程. 如何更改电脑语言 电脑语言改为英文方法 以下笔者以Windows 7系统截图演示,教大家如何更改电脑语言.其他XP或者Win8系统设置方法与此

c语言-C语言递归的内存释放问题

问题描述 C语言递归的内存释放问题 我用C语言实现alpha-beta极小极大算法来做一个棋类游戏的AI,博弈树是用递归的方式构造的,然后发现AI每下一步程序的内存都在增大,原来是因为递归没有释放内存. 耗内存的指针是棋盘 char ** chessboard; 于是我在递归函数的每一个return之前都把 chessboard 给释放了,发现内存还是一直在涨,求解.. 解决方案 把递归函数实现贴出来. 解决方案二: 估计释放的不全.二级指针要分两级释放. 解决方案三: 二级指针的释放是要分两步

c语言-C语言新人关于链表的问题

问题描述 C语言新人关于链表的问题 如何实现对一个链表进行排序后的输出,但是不改变链表本身. 不能新建链表来拷贝. 解决方案 我也是新人,如果是这样的话.会比较麻烦.我的想法是这样的.先找到链表尾.知道一共有多少个数据,然后创建一个结构体数组,结构体中定义Int 排序,你的类型指针变量,排序后将排序的顺序存入数组.将链表地址存入指针变量,建一个循环,依次输出.不过此种方法依然需要建一个数组.不知道行不行 解决方案二: 必须借助内存空间,完成排序工作. 解决方案三: 你把链表的每个元素读出来存到一