第三章程序3-1、3-2

来源:互联网 发布:动漫人物的发型知乎 编辑:程序博客网 时间:2024/05/16 15:36
#include <stdio.h>int lg(int);main(){    int i,N;    for(i=1,N=10;i<=6;i++,N*=10)    printf("%7d %2d %9d\n",N,lg(N),N*lg(N));}int  lg(int N){    int i;    for(i=0;N>0;i++,N/=2);    return i;}

 

3-2:该程序计算整数数列x1,x2……,xN的平均值μ和标注偏差σ。这个数列由库函数rand生成,平均值μ和标准偏差σ的数学定义如下:


#include <math.h>#include <stdlib.h>#include <stdio.h>typedef int Number;Number randNum(){return rand();}main(int argc,char *argv[]){    int i,N=atoi(argv[1]);    float m1=0.0,m2=0.0;    Number x;    for(i=0;i<N;i++)    {        x=randNum();        m1+=((float)x)/N;        m2+=((float)x*x)/N;    }    printf(" Average:%f\n",m1);    printf("Std.deviation:%f\n",sqrt(m2-m1*m1));}

让程序3-2能作用于其他数值类型(比如float,而不是int),最简单的办法是复制该文件,再将typedef修改成:

                         typedef   float    Number

                         同时将函数randNum修改成:

                         return 1.0*rand()/RAND_MAX;

                       (他将返回0到1之间的随机浮点数)

在C中另一种途径是把typedef和randNum放到一个单独的头文件中(假设为Num.h),在3-2的代码中用下面的指令替换他们:

                     *include  "Num.h"

接着,我们就可以用不同的typedef和randNum编写第二个头文件。而且,改名其中的一个文件或其他Num.h,将任何一个应用到程序3-2的主程序中,不需要对他进行其他的修改。


第三种可选方案,这是关键工程实践值得推荐的方法,也就是将程序分解成3个文件:



原创粉丝点击