论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > C语言程序设计教程
Tag:新手,函数,指针,数据类型,对象,Turbo,入门,运算符,数组,结构,二级,,tc,游戏,试题,问答,编译,视频教程

C趣味程序(二)(05)

文章类别:C语言程序设计 | 发表日期:2008-9-24 14:44:33

1.6.1 立方和不等式
1.6.2 调和级数不等式
1.6.3 平方根不等式



1.6 解不等式
    应用简单的和积处理求解一些涉及整数解的不等式是可行的,也是方便的。

1.6.1 立方和不等式
        13+23+...+m3
    试求满足上述立方和不等式的m的整数解。
本题算法如下:
    对指定的n,设置求和循环,从i=1开始,i递增1取值,把i3(或i*i*i)累加到s,直至s>=n,脱离循环作相应的打印输出。
程序代码如下:
#include<stdio.h>
void main()
{
    long int n,s=0;
    int i,m;
    printf("求满足1^3+2^3+...+m^3<n的整数解\n请输入n:");
    scanf("%d",&n);
    for(i=1; i<=10000;i++)
    {
        s=s+i*i*i;        /*求立方累加和*/  
        if(s>=n)  break;    /*当s大于等于n时退出循环*/
    }
    s=s-i*i*i;
    m=i-1;
    printf("不等式的整数解为:m< %d\n",m);
    printf("1^3+2^3+...+%d^3 = %ld\n",m,s);
}
程序运行结果如下:



思考:为什么循环体外给m,s赋值为m=i-1; s=s-i*i*i?直接给出i与s行吗?

-------------------------------------------------------------------

1.6.2 调和级数不等式
    12<1+1/2+1/3+...+1/m<13
    试求满足上述不等式的整数m。
本题算法如下:
    为一般设计,设和s的整数部分为n,设置i循环,可预置1000000次。求和s=s+1/i过程中若出现s>n,此时c=i为区间的下限。若出现s>n+1,此时d=i-1为所求区间的上限,然后退出循环。
    设计时务必注重,出现s>n且赋值c=i之后的继续求和过程中,条件s>n始终成立,于是由初值c=i确定的下限c也随之改变。为防止确定了下限c后再发生改变,引入中间变量s0,s0赋初值n+1,把判别条件改为(s>n and s<s0)。出现s>n(自然会有s<s0)时,作赋值c=i的同时通过s0=s改变了s0,随后继续求和,s增加时,致使条件(s>n and s<s0)不再成立,确保已定下限c不再改变。
程序代码如下:
#include<stdio.h>
void main()
{
    float s,s0,c=0,d=0,i;
    int n;
    printf("求n<1+1/2+1/3+...+1/m<n+1的整数m\n请输入n:");
    scanf("%ld",&n);
    s=0;
    s0=(float)n+1;
    for(i=1;i<=1000000;i=i+1)
    {
        s=s+(float)1/i;
        if(s>n&&s<s0){c=i; s0=s;}
        if(s>n+1){ d=i-1;break;}
    }
    printf("满足不等式的m为: %.f < m < %.f\n",c,d);
}
程序运行结果如下:

------------------------------------------------------------------

1.6.3 平方根不等式


    对指定正整数n,试求满足上述平方根不等式的最小整数m。
本题算法如下:
    显然,不等式左边是m的增函数,因而,对于指定的n,设置m循环m从1开始递增1取值。对每一个m求和:


    若s<n,m增1后继续按上式求和判别,直至上述s>n时,输出不等式的解。
程序代码如下:
#include<stdio.h>
#include<math.h>
void main()
{
    int i,n,m;
    double s;
    printf("求满足sqrt(m)+sqrt(m+1)+...+sqrt(2m)>n 的整数m\n请输入n:");
    scanf("%d",&n);
    for(m=1;m<=10000;m++)
    {
        s=0;
        for(i=m;i<=2*m;i++)
            s=s+sqrt(i);
        if(s>n) break;
    }
    printf("不等式的解为:m > %d\n",m);
    printf("此时 s = %.2f\n",s);
}
程序运行结果如下:

上一篇:{实例}C趣味程序(二)(04) 人气:4399
下一篇:{实例}C趣味程序(二)(06) 人气:5110
视频教程列表
文章教程搜索
 
C语言程序设计推荐教程
C语言程序设计热门教程