zoukankan      html  css  js  c++  java
  • 局部变量和全局变量

     

     

    变程序量中使用的范围不同:作用域(Scope),就是变量的有效范围。变量的作用域取决于变量的访问性。

    局部变量:函数内部的变量称为局部变量(Local Variable),它的作用域仅限于函数内部, 离开该函数后就是无效的,再使用就会报错。

    1.主函数中定义的变量也只能在主函数中使用,不能在其他函数中使用。

    2.允许在不同的函数中使用相同的变量名,他们代表不同变量,分配不同的存放单元,互不相干,不会发生混淆。

    3.复合语句中定义的变量,只限于使用当前函数中,也是复合语句的局部变量,复合语句:就是用{}包含起来的语句块。

    4.形参变量、在函数体内定义的变量都是局部变量。实参给形参传值的过程也就是给局部变量赋值的过程。

    #include <stdio.h>

    void m();

    void main(){

    int a=1,b=2;

    {

    int a=3,b=4;

    printf(复合语句的变量a=%d,b=%d ",a,b);

    }

    printf("main函数的变量a=%d,b=%d ",a,b);

    m();

    }

    void m(){

      int a=5,b=6;

       printf("m函数的变量a=%d,b=%d ",a,b);

    }  

    }

    全局变量:在所有函数外部定义的变量称为全局变量(Global Variable),它的作用域默认是整个程序,也就是所有的源文件,包括 .c 和 .h 文件。它的作用域是从声明时刻开始,到程序结束。

    1.全局变量定义必须在所有函数之外。

    2.全局变量可加强函数模块之间的数据联系,但是函数又依赖这些变量,降低函数的独立性。

    3.在同一源文件中,允许全局变量和局部变量同名,在局部变量作用域内,同名的全局变量不起作用。

    int sum=0;//全局变量

    void addNumbers(){

    int sum;//局部变量

    int num1,num2;

    printf(" 请输入两个数;");

    scanf("%d,%d",&num1,&num2);

    sum=num1+num2;

    }

    void main(){

    int sum=0;//局部变量

    addNumbers();

    printf("  主函数中 sum 的值是 %d ",sum);

    }

    示例:计算n的阶乘

    #include <stdio.h>

    int fun(int n);

    void main(){

    int n;

    printf("请输入您要计算阶乘的数: ");

    scanf("%d",&n);

    int sum=fun(n);

     printf("%d的阶乘是%d",n,sum);

    }

    //计算阶乘

    int  fun(int n){

    int sum=1;

        while(n>1){

      sum*=n;

      n--;

    }

    return sum;

    }

    //博客评选大赛,10为评为为选手打分,去掉一个最高分和一个最低分,计算选手的最后得分。

    #include <stdio.h>

    void  showMenu();

    void  getScores();

    float calcAvg();

    float scores[10];//定义全局变量,用于保存评委的打分

    void main(){

    float avg;

    showMenu();//1.打印菜单

    getScores();//2.获取评委分

    avg=calcAvg();//计算选手的最后得分

     printf("该选手去掉一个最高分和一个最低分最终得分为%.2f分 ",avg);

    }

    //1.打印菜单

    void showMenu(){

    printf("************************************************ ");

    printf("*************杯博客大赛******************************** ");

    printf("************************************************ ");

    }

    //获取评委分数

    void getScores(){

    int i;

    for(i=0;i<10;i++){

     printf("请%d号评委打分: ",i+1);

       scanf("%f",&scores[i]);//将评委的打分获取并保存到数组中

    }

    printf("评委打分完毕,分数正在紧张统计中..... ");

    }

    //统计去掉一个最高分,一个最低分,选手得分

    float calcAvg(){

    float max,min,avg,sum=0;

    int i;

    min=max=scores[0];//假设第一个分数最高和最低分

    for(i=0;i<10;I++){

    sum+=scores[i];

    if(scores[i]>max){//获取最高分

    max=scoures[i];

    }

    if(scores[i]<min){//获取最低分

    min=scoures[i];

    }

    }

    //去除最高最低计算平均分

    avg=(sum-max-min)/8;

    return avg;

    }

  • 相关阅读:
    概率dp呜呜
    树上路径问题---点分治题集
    POJ 1741 Tree
    接下来的计划
    很逗 的网络赛历程
    Codeforces Round #264 (Div. 2) D
    似乎了解了树形dp/
    先胡乱搭一个blog
    POJ 1330 (LCA)
    文件操作
  • 原文地址:https://www.cnblogs.com/zyh19980816/p/12371228.html
Copyright © 2011-2022 走看看