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

文本六:利用函数编写应用程序举例

使用函数的程序举例

程序设计方法:根据分析把整体问题分解为若干个相对独立的功能模块。每个模块用一个函数定义来实现,通过函数之间的调用实现程序的功能。

例1:编写一个程序,判断从键盘上输入的任一个整数是否为素数。

分析:判断一个整数x是否为素数用一个单独的函数完成,此函数带有一个整型参数x,返回值类型也为整型,函数名为Prime,当此函数返回1时则x为一个素数,返回0时则x不是一个素数。

  判断标准:能否被2~ 之间的自然数整除。
  int Prime(int x) { //判断素数的函数定义
    int i;
    for(i=2; i*i<=x; i++)
      if(x%i==0) break;
    if(i*i>x)return 1; else return 0;
  }
  #include
  int Prime(int x); //判断素数的函数声明
  void main(void) { //判断从键盘输入的一个整数是否为素数的主函数
    int x,yn;
    printf("输入一个正整数:");
    scanf("%d",&x);
    yn=Prime(x); //调用判断素数的函数
    if(yn)printf("%d 是素数!\n",x);
    else printf("%d不是素数!\n",x);
  }
  void main(void) { //求出100以内所有素数的主函数
    int x,yn;
    printf("%d ",2);
    for(x=3; x<=99; x+=2) {
      yn=Prime(x);
    if(yn) printf("%d ",x);
    }
   printf("\n");
  } //2 3 5 7 11 13 17 … 89 97

例2:编写一个函数,对一维数组a[n]中的n个整数进行排列,排列的条件是:使得数组的前面部分保存小于60的元素值,数组的后面部分保存大于和等于60的元素值。

分析:在数组的两端各设置一个位置指针i和j,i的初值为0,j的初值为n-1,从两端向中间比较,交换逆序元素,直到i>j为止。


      0 1 2 3 4 5 6
  a[7]={23, 67, 52, 83, 28, 75, 54}
     i↑          j↑
  a[7]={23, 67, 52, 83, 28, 75, 54}
       i↑       j↑
  a[7]={23, 54, 52, 83, 28, 75, 67}
         i↑    j↑
  a[7]={23, 54, 52, 83, 28, 75, 67}
           i↑j↑
  a[7]={23, 54, 52, 28, 83, 75, 67}
           i↑ j↑
  a[7]={23, 54, 52, 28, 83, 75, 67}
           j↑ i↑

  函数的具体定义:
  void TwoPart(int a[], int n) {
    int i=0, j=n-1;
    while(i<=j) {
      while(a[i]<60 i="" j="" br="">       while(a[j]>=60 && j>=i) j--;
      if(i<j){int x=a[i]; a[i]=a[j]; a[j]=x; i++; j--;} 
    }
  }
  调用上述函数的调试程序:
  #include
  void TwoPart(int a[], int n);
  void main(void) {
    int i,a[7]={23,67,52,83,28,75,54};
    TwoPart(a,7);
    for(i=0; i<7; i++) printf("%d ",a[i]);
    printf("\n");
  } // 23 54 52 28 83 75 67

最后修改: 2019年09月26日 Thursday 19:07