把函数可分为库函数和用户定义函数两种。
(1)库函数
由C系统提供,用户无须定义, 也不必在程序中作类型说明,只需在程序前包含有该函数原型的头文件即可在程 序中直接调用。printf 、 scanf 、 getchar 、putchar、gets、puts、strcat等函数。
(2)用户定义函数
由用户按需要写的函数。用户自定义函数, 不仅要在程序中定义函数本身, 而且在主调函数中还必须对该被调 函数进行类型说明,然后才能使用。
把函数分为有返回值函数和无返回值函数两种。
(1)有返回值函数
此类函数被调用执行完后将向调用者返回一个执行结果, 称为函数返回值。由用户定义的这种要返回函数值的 函数,必须在函数定义和函数说明中明确返回值的类型。
比如:
int max(){ int a= 0; ....... return a; } int max(int a,int b){ if(a > b); return a; }
同理,可将 int 化为 float , long ,double , int[], int * , int &.... ....返回值类型也要相应改变
(2)无返回值函数
此类函数用于完成某项特定的处理任务, 执行完成后不向调用者返回函数值。这类函数类似于其它语言的过 程。 由于函数无须返回值,用户在定义此类函数时可指定它的返回为“空类型”。
比如:
void max(){ ... ... };
从主调函数和被调函数之间数据传送的角度看又可分为无参函数和有参函数两种。
(1)无参函数
函数定义、函数说明及函数调用中均不带参数。 主调函数和被调函数之间不进行参数传送。 此类函数通常用来 完成一组指定的功能,可以返回或不返回函数值。
无参函数的一般形式
比如:
void Hello()
{
printf ("Hello,world \n");
}
(2)有参函数
也称为带参函数。在函数定义及函数说明时都有参数, 称为形式参数(简称为形参)。在函数调用时也必须给出参 数, 称为实参。 进行函数调用时,主调函数将把实参的值传送给形参,供被调函数使用。
比如:
int max(int a,int b)
{
if(a>b)
return a;
else
return b;
}
代码举例(水仙花数):
1、
#include <stdio.h>
int main()
{
int a = 0, b = 0;
printf("请输入求几到几之间水仙花数:");
scanf("%d %d",&a,&b);
for(int n = a ;n < b ; n++)
{
int i = n/100;
int j = (n - i* 100) / 10;
int k = n%10;
if(i*i*i + j*j*j + k*k*k == n)
printf("%d\n",n);
}
return 0;
}
2、
#include <stdio.h>
void waterFlower()
{
int a = 0, b = 0;
printf("请输入求几到几之间水仙花数:");
scanf("%d %d",&a,&b);
for(int n = a ;n < b ; n++)
{
int i = n/100;
int j = (n - i* 100) / 10;
int k = n%10;
if(i*i*i + j*j*j + k*k*k == n)
printf("%d\n",n);
}
}
int main()
{
waterFlower();
return 0;
}
3、
#include <stdio.h>
void waterFlower(int a, int b)
{
for(int n = a ;n < b ; n++)
{
int i = n/100;
int j = (n - i* 100) / 10;
int k = n%10;
if(i*i*i + j*j*j + k*k*k == n)
printf("%d\n",n);
}
}
int main()
{
int a = 0, b = 0;
printf("请输入求几到几之间水仙花数:");
scanf("%d %d",&a,&b);
waterFlower(a,b);
return 0;
}
4、
#include <stdio.h>
void waterFlower(int a, int b);
int main()
{
int a = 0, b = 0;
printf("请输入求几到几之间水仙花数:");
scanf("%d %d",&a,&b);
waterFlower(a,b);
return 0;
}
void waterFlower(int a, int b)
{
for(int n = a ;n < b ; n++)
{
int i = n/100;
int j = (n - i* 100) / 10;
int k = n%10;
if(i*i*i + j*j*j + k*k*k == n)
printf("%d\n",n);
}
}
5、(增加一个统计有多少个水仙花数)
#include <stdio.h>
int waterFlower(int a, int b);
int main()
{
int a = 0, b = 0;
printf("请输入求几到几之间水仙花数:");
scanf("%d %d",&a,&b);
int sum = waterFlower(a,b);
printf("\n水仙花数共有:%d\n",sum);
return 0;
}
int waterFlower(int a, int b)
{
int sum = 0;
for(int n = a ;n < b ; n++)
{
int i = n/100;
int j = (n - i* 100) / 10;
int k = n%10;
if(i*i*i + j*j*j + k*k*k == n){
printf("%d\n",n);
sum++;
}
}
return sum;
}