全站搜索未启用
跳到主要内容

视频四:分析变量作用域的程序举例 视频

程序1:
  #include<stdio.h>
  #define NN 8
  int Num[NN]={5,10,8,3,4,12,7,2};
  int Sum() {
    int i,s=0;
    for(i=0; i<NN; i++) s+=Num[i];
    return s;
  } //函数功能:求出并返回全局数组Num[NN]中的所有元素之和。

  int Max() {
    int i,m=Num[0];
    for(i=1; i<NN; i++) 
      if(Num[i]>m) m=Num[i];
  return m;
  } //函数功能:求出并返回全局数组Num[NN]中所有元素的最大值。
  void main() {
    int c;
    c=Sum()+2*Max();   //51+2*12=75
   printf("c=%d\n",c);   //c=75
  } //int Num[NN]={5,10,8,3,4,12,7,2};

  程序2:
  #include<stdio.h>
  int Mul(int a[], int n); //函数声明
  void main() {
    int b[5]={1,2,3,4,5};
    int r1,r2;
    r1=Mul(b,5);   //返回值120
    r2=Mul(b+2,3);  //返回值60
    printf("r1=%d, r2=%d\n",r1,r2); 
  }  //输出:r1=120, r2=60

  int Mul(int a[], int n) {     //a为数组,n为数组长度
    int i,p=1;            // p作为累乘变量。
    for(i=0; i<n; i++) p*=a[i]; //求a数组中n个元素之积
    return p;
  }

  程序3:
  #include<stdio.h>
  int x=10;
  void main() {
    int y=20;
    printf("x=%d, y=%d\n",x,y); 
    {  //一条复合语句
      int x=30;
      y=y+x;
      printf("x=%d, y=%d\n",x,y); 
     //输出:x=30, y=50
    }
  printf("x=%d, y=%d\n",x,y);
      //输出:x=10, y=50 
  }  //y作用域到此结束
  注意:在不同作用域内可以定义同名变量,内层优先于外层。

  程序4:
  #include<stdio.h>
  int Cdiv(int m, int n)
  { //求出并返回m和n的最大公约数
    int r;
    if(m<n) {r=m; m=n; n=r;}
    while(r = m%n) {m=n; n=r;}
    return n; //返回最大公约数n的值
  }  //若m和n的初始值为20和12,1次循环后m=12,n=8;2次循环后m=8,n=4;第3次判断r = m%n时r值为0。最大公约数为当前n的值4。

  void main() {
    int m,n; //m和n只作用于主函数
    printf("输入两个正整数: ");
    scanf("%d %d",&m,&n);
    printf("%d 和 %d 的最大公约数为: %d\n", m,n,Cdiv(m,n));
    //m和n的值分别对应传送给Cdiv()函数的参数表中的m和n
  }
  程序运行结果:
  输入两个正整数: 25 40
  25 和 40 的最大公约数为: 5
  程序5:

  include<stdio.h>
  void xk2(); //函数声明
  void xk2() { //函数定义
    int a=0; //a为自动变量
    static int b=0; //b为静态变量
    a++; b++; //a变为1,b增加1
    printf("a=%d, b=%d\n",a,b); 
  }

  void main() {
    int i;
    for(i=1; i<=4; i++) xk2();
  }
  运行结果:
    a=1, b=1
    a=1, b=2
    a=1, b=3
    a=1, b=4

  程序6:
  #include<stdio.h>
  #define N 6
  void Swop(int *x, int *y) {
    int w=*x; *x=*y; *y=w;
 }
  void main() {
    int i, a[N]={1,2,3,4,5,6};
    for(i=0; i<N/2; i++) Swop(a+i, a+N-1-i);
    for(i=0; i<N; i++) printf("%d ", a[i]);
    printf("\n");
  }  //输出结果:6 5 4 3 2 1