本文进一步介绍C语言函数,函数的优点:
1. 函数有助于将一个程序模块化。函数本质上是一个自带声明和语句的小程序。可以利用函数把程序划分成小块,便于人们理解和修改程序。
2. 使程序变得更简洁清晰
3. 有利于程序维护
4. 可以提高程序开发的效率
5. 提高了代码的重用性
因此,C语言是函数的语言--小函数大程序。不会用函数进行构思和模块划分,不能算会C语言编程。下面我们以三个实例来一起学习下,如何使用函数来编程?
一、素数表
问题:输出100以内的全部素数,每个素数占6列。
思路分析:对2~100之间的每个数进行判断,若是素数,则输出该数。
for(m = 2; m <= 100; m++)
if (m是素数)
printf("%6d", m);
定义函数IsPrime()来判断素数,函数原型如下:
int IsPrime (int m) ; //若m是素数返回1,否则返回0
main()函数和IsPrime()分别实现如下:
int main(void)
{ int m;
for(m = 2; m <= 100; m++)
{ if (IsPrime(m) != 0 )
printf("%6d", m );
}
printf ("\n");
return 0;
}
int IsPrime (int m)
{ int i, k;
if ( m == 1 ) return 0;
k = (int)sqrt (m);
for( i = 2; i <= k; i++)
{ if (m % i == 0) return 0; }
return 1;
}
完整代码及输出结果如下图所示:
二、哥德巴赫猜想
问题:验证哥德巴赫猜想,任意输入一个不小于6的偶数,将其表示成两个素数的和,如:
6=3+3;8=3+5;18=7+13
解题思路:
枚举加数i:for(i=3; i<=n/2; i+=2)
{
if( i和n-i都是素数)
输出素数对i和n-i;
}
该问题可以通过调用第一例中的IsPrime()函数来实现!从而实现了代码复用、函数复用,并且这样结构清晰,代码优美!
int main(void)
{ int n, i;
scanf("%d", &n);
for(i = 3;i <= n/2;i = i+2)
{ if(IsPrime(i) && IsPrime(n-i))
printf("%d %d\n", i, n-i);
}
return 0;
}
由上面代码可见,复用了之前的IsPrime()函数;更易于实现;程序可读性更好;更易于程序的排错、调试。
完整代码及输出结果如下图所示:
三、组合数
排列组合与概率论关系密切。组合数:从m个不同元素中取出k(k≤m)个元素的所有组合的个数,计算公式如下:
由上面公式可见,组合数的计算,主要通过反复计算阶乘实现,因此,可以编写一个计算阶乘的fact()函数,代码如下:
/* 定义阶乘函数fact */
int fact( int n)
{ int i;
int result = 1;
for(i = 2; i <= n; i++)
result *= i;
return result;
}
根据计算公式中的计算方法,main函数代码如下:
#include <stdio.h>
int main(void)
{ int m, k, p;
scanf("%d%d", &m, &k);
p = fact(m) / (fact(k) * fact(m - k));
printf("p=%d\n", p);
return 0;
}
完整代码及输出结果如下图所示:
然后公众号回复"C教程"获取全部完整资源~