zoukankan      html  css  js  c++  java
  • 函数与模块化程序设计学习总结

    本周学习了函数的声明定义和调用

    函数的嵌套调用

    全局变量和局部变量

    在函数内部的调试

    变量的存储类别

    C语言的库函数

    静态函数与外部函数

    外部全局变量与静态全局变量。

    函数的声明定义和调用学习总结:

    自定义函数先声明,后调用

    若先调用后定义:调用前声明

    函数的嵌套调用:函数内调用函数

     求方程f(x)=x3-5x2+16x-80=0的根的程序
     #include<stdio.h>
    #include<math.h>
    double f(double);
    double xpoint(double,double);
    double root(double,double);
    int main()
    {
    double x1,x2,f1,f2,x;
    do
    {
    printf("inputx1,x2:");
    scanf("%lf%lf",&x1,&x2);
    f1=f(x1);
    f2=f(x2);
    }
    while(f1*f2>=0);
    x=root(x1,x2);
    printf("Arootis%.5f ",x);
    return0;
    }
    double root(double x1,double x2)
    {
    double x,y,y1;
    y1=f(x1);
    do
    {
    x=xpoint(x1,x2);
    y=f(x);
    if(y*y1>0)
    {
    y1=y;
    x1=x;
    }
    else
    x2=x;
    }
    while(fabs(y)>=0.00001);
    return x;
    }
    double xpoint(doublex1,doublex2)
    {
    doublex;
    x=(x1*f(x2)-x2*f(x1))/(f(x2)-f(x1));
    return x;
    }
    doublef(doublex)
    {
    doubley;
    y=x*x*x-5*x*x+16*x-80;
    return y;
    }

    函数                                                              功能
    intmain()                                                      主控,输入输出
    doubleroot(doublex1,doublex2)                   求(x1,x2)区间方程的实根
    doublexpoint(doublex1,doublex2)                求(x1,f(x1))和(x2,f(x2))的连线与x轴的交点x
    doublef(doublex)                                          求函数f(x)=x3-5x2+16x-80的值

    全局变量和局部变量总结

    每一个变量都有其有效作用的范围,称为变量的作用域。
    变量分类(按作用域):
    局部变量(localvariable)
                 在一个函数内部定义的变量只在本函数范围内有效
                 在复合语句中定义的变量只在本复合语句范围内有效。
    全局变量(globalvariable,也称全程变量)
                  在函数之外定义的变量是外部变量,其有效范围为从定义变量的位置开始到
                  本源文件结束
     

    不同的函数及作用域中可以使用相同名字的局部变量,它们在内存中分属不同的存储区间,互不干扰。

    全局变量作用范围:定义始至文件尾;全局变量与局部变量同名,则在局部变量的作用范围内,全局变量被屏蔽。

    全局变量能增加函数间数据联系的渠道

    全局变量会降低程序可读性

    限制使用全局变量!

    在函数内部的调试

     断点(breakpoint)
    单步执行
                     每执行一步断一下,看到每一步到底干了些什么
                     方式:NextLine/StepInto/StepOut等
    运行到光标
                      光标所在位置,实际就是一个“断点”
                      方式:RuntoCursor
    设置断点
                        任意指定到哪儿断开,想在哪儿停下来,就在哪儿停
                        相比:单步太烦,运行到光标只能指定一个地方
     
     
    变量的存储类别

    四种存储类别
          自动的(auto)
          寄存器的(register)
          外部的(extern)
          静态的(static)

    自动变量(autovariable)

    int f(inta)
    {
    auto int b,c=3;//b和c为整型的自动变量
    ……

    auto是局部变量默认的存储类别,例
    ①auto int b,c=3;
    ②int b,c=3;//两种写法效果相同
    自动变量在定义时自动分配存储空间,在作用域结束时自动释放空间。

    用register声明寄存器变量
    int fac (intn)
    {
    //下面声明i和f是寄存器变量
    registerinti,f=1;
    for(i=1;i<=n;i++)f=f*i;
    returnf;
    }
    在程序中定义寄存器变量对编译系统只是
    建议性(而不是强制性)的。
    优化编译系统能够识别使用频繁的变量,
    自动地将这些变量放在寄存器中。

    用extern声明外部变量:一个文件内的全局变量
    #include<stdio.h>
    int max(int,int);
    int main()
    {
    extern inta,b;//对全局变量a,b作提前引用声明
    printf("%d ",max(a,b));
    return 0;
    }
    int a=15,b=-7;//定义全局变量a,b
    int max(intx,inty)
    {
    int z;
    z=x>y?x:y;
    return z;
    }

    用static声明静态局部变量(staticlocalvariable)
    int f(int a)
    {
    static intc=3;
    ……
    }


    性质:
              局部特性:作用范围仅限于本函数
              静态特性:存储在静态区,函数调用结束后不消失而保留原值,在下一次调用时,保留上一次调用结束时的值。

    静态函数与外部函数

    外部函数

    max.c                                                             

    extern int max(intx,inty)
    {
    intz;
    z=x>y?x:y;
    returnz;
    }

    外部函数
    在定义函数时,如果在函数首部的最左端冠以关键字extern,则表示此函数是外部函数,可供其他文件调用。如果在定义函数时省略extern,则默认
    为外部函数。

    main.c

    #include<stdio.h>
    extern int max(int,int);
    int main()
    {
    int a,b;
    scanf("%d%d",&a,&b);
    printf("%d ",max(a,b));
    return0;
    }

    在需要调用此函数的文件中,用extern

    声明所用的函数是外部函数。

    模块化程序设计中的“单独编译”
    多文件的项目中,每个文件可以单独编译,形成各自独立的目标文件(.o或.obj)。
    在编译中,遇到调用外部函数,编译器会假定这个函数的定义存在,只不过不在当前
    文件中,产生目标文件。所以,若语法正确,编译器不对此函数产生标识符未定义的
    错误。
    在连接时,检查编译器得到的若干目标文件中的函数,以及包括的库文件内提供的函
    数,如果命名唯一,产生可执行的目标文件(.exe);否则,连接失败。

    静态函数

    max.c

    static int max(int x,int y)
    {
    int z;
    z=x>y?x:y;
    return z;
    }

    如果一个函数只能被本文件中其他函数所调用,它称为内部函数,又称静态(static)函数。如果在不同的文件中有同名的内部函数,互不干扰。



    main.c

    #include<stdio.h>
    int max(int,int);
    int main()
    {
    int a,b;
    scanf("%d%d",&a,&b);
    printf("%d ",max(a,b));
    return0;
    }

    通常把只允许在同一文件中使用的函数和全局变量前面都冠以static使之局部化,从而其他文件都不能引用

    外部全局变量和静态全局变量

     用extern拓展一个文件内的全局变量的作用范围
    #include<stdio.h>
    int max(int,int);
    int main()
    {
    extern int a,b;//对全局变量a,b作提前引用声明
    printf("%d ",max(a,b));
    return 0;
    }
    int a=15,b=-7;//定义全局变量a,b
    int max(int x,int y)
    {
    int z;
    z=x>y?x:y;
    return z;
    }
  • 相关阅读:
    如何免费在 arm 官网上下载合适的手册
    ARM Cortex-A系列处理器性能分类比较
    USB OTG有关协议
    fseek在 fopen 带有'a'模式下不起作用
    Zynq 7000的3种IO
    多核处理器与MP架构
    Vim常用插件命令手册
    剑指 Offer 07
    Leetcode 94
    剑指offer 27
  • 原文地址:https://www.cnblogs.com/Abreast-/p/7710604.html
Copyright © 2011-2022 走看看