论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: 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趣味程序(二)(02)

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

1.2.1 数据求平均值
1.2.2 电阻计算
1.3.1 设置符号变量实现加减相间变化
1.3.2 通过条件判定选择加减操作
1.3.3 设置多个符号变量




1.2 无规律离散数据处理
   
对若干无规律的离散数据求和,通常把已有数据置于某一数组中,或从键盘输入,并在数据的最后设置一个区别已有数据的终止标志。在循环中每读一个数或一组数据,作相应的处理,直到读到终止标志时输出结果后结束。

1.2.1 数据求平均值
    已给若干个无规律的离散数置入数组中,设置 -1作为终止标志(若数据中有负数,则终止标志楞以设置成一个大数,例如le30)。设置变量x在循环中读取数据,若x非终止标志,则累加到和变量s中:s=s+x,为求平均需要,还要用一个变量统计数据的个数:n=n+1。直至x为终止标志时结束。
程序代码如下:
#include<stdio.h>
void main()
{
    double data[]={9.36,8.95,9.32,9.27,9.44,8.91,9.20,-1};
    double s=0;
    int n=0,i=0;
    while(data[i]>0)
    {
        printf("%.2f;:s=%.2f: n=%d\n",data[i],s,n);
        s=s+data[i];
        n=n+1;
        i=i+1;
    }
    printf("以上:%d;个数据之和为:%.2f\n",n,s);
    printf("平均值为:%.2f\n",(s/n*100+0.5)/100);
}
程序运行结果如下:



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

1.2.2 电阻计算
    求如下图所示电路中A,B间的等效电阻r


算法分析如下:
    把整个电路分为4级,从左至右逐级递推处理。
    首先注重把电路中的电阻数据按顺序写入数组,最右端电阻在前,以后每级横向电阻在前,竖向电阻在后。第三级没有横向电阻,相应位置置数据0。最后,置两个-1作为数据的终止标志。
    操作时r读入最右端电阻。进入i循环(预置20级),读入data[i],data[i+1]两个电阻,data[i]与右边等效电阻串联,然后与data[i+1]并联,根据电阻计算公式操作:
        r=r+data[i]; r=(r*data[i+1])/(r+data[i+1]);
    当读入的data[i]为负时,即已计算完毕,退出循环等效电阻r
程序代码如下:
#include<stdio.h>
void main()
{
    int i;
    double r;
    double data[]={25,4,13,50,3,0,15,17,31,-1,-1};
    r=data[0];
    for(i=1;i<=20;i+=2)
    {
        if(data[i]<0)
            break;
        r=r+data[i];
        r=(r*data[i+1])/(r+data[i+1]);
    }
    printf("A,B间的等效电阻为:%.3f\n",(r*1000+0.5)/1000);
}
程序运行结果如下:
    A,B间的等效电阻为:11.932

注重:本程序只适用于II形式的电路电阻计算。假如对应位置没有电阻,必须相应补0。同时在程序中循环体内判定data[i]<0 语句应安排在具体计算语句之前。否则将导致计算结果出错。

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

1.3 求加减代数和
    求一组有规律数据作加减符号有规律变化的代数和,要具体根据符号应变化规律,通过设置符号变量,或对每一项通过条件判定选择加减操作,以达到所求代数和的目的。这里给出三个有代表性的加减代数和求解实例。

1.3.1 设置符号变量实现加减相间变化
    试求:s=1-1/2+1/3-1/4+...1/n (n从键盘输入)
    设置符号变量f,通过语句f=-1*f实现正负交替变化,以达到加减相间求和。
程序代码如下:
#include<stdio.h>
void main()
{
    double s=0;
    int f=-1,i,n;
    char x$;
    printf("s=1-1/2+1/3-1/4+...1/n\n Enter n:\n");
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        f=-1*f;
        s=s+(float)f/i;
    }
    if(n%2==0)
        x$='-';
    else x$='+';
    printf("s=1-1/2+1/3-1/4+...%c 1/ %d = %.7f\n",x$,n,s);
}
程序运行结果如下:

注重:符号变量f的初值由第一项的符号决定。本例中代数和的第一项为正,因而赋初值f=-1。根据项数n的奇偶性决定输出时该项的"+"、“-”符号x$是必要的。

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

1.3.2 通过条件判定选择加减操作
    试求:s=1-1/2-1/3+1/4-...1/n   (n从键盘输入)
    注重到每3项中有一项为加,两项为减,即每作一次加后作两次减,通过对循环变量i除3的余数( i%3==1时为加操作)作为条件,选择指定的加减操作。
程序代码如下:
#include<stdio.h>
void main()
{
    int i,n;
    char x$;
    float s=0;
    printf("s=1-1/2-1/3+1/4-...1/n\n请输入n:");
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        if(i%3==1)
            s=s+(float)1/i;
        else
            s=s-(float)1/i;
    }
    if(n%3==1) x$='+';
    else x$='-';
    printf("s=1-1/2-1/3+1/4+...%c1/%d = %f\n",x$,n,s);
}
程序运行结果如下:

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

1.3.3 设置多个符号变量
    试求:s=1-1/2-1/3+1/4+1/5-...1/n   (n从键盘输入)
    对于一些符号变化较为复杂的代数和,可以根据具体情况设置多个符号变量,以达到选择加减操作的要求。上述代数和开始一项为正,以后二负二正类推。这时设置 两个符号变量可达到相应操作的选择。
程序代码如下:
#include<stdio.h>
void main()
{
    int i,n,f=-1,t=1;
    char x$;
    printf("s=1-1/2-1/3+1/4+1/5-...1/n\n请输入n:");
    float s=0;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        f=-1*f;
        t=f*t;
        s=s+(float)t/i;
    }
    if(t<0) x$='-';
    else x$='+';
    printf("s=1-1/2-1/3+1/4+1/5-...%c1/%d = %f\n",x$,n,s);
}
程序运行结果如下:

      

注重:程序中设置符号一f,t协同实现二正二负的变化要求。
上一篇:{实例}C趣味程序(二)(01) 人气:5247
下一篇:{实例}C趣味程序(二)(03) 人气:6149
视频教程列表
文章教程搜索
 
C语言程序设计推荐教程
C语言程序设计热门教程