C语言函数
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C语言函数,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含16401字,纯文字阅读大概需要24分钟。
内容图文
1.C语言函数概述
-
库函数:由C系统提供,用户无须定义,也不必在程序中作类型说明,只需在程序前包含有该函数原型的头文件即可在程序中直接调用。在前面各章的例题中反复用到printf、scanf、getchar、putchar、gets、puts、strcat等函数均属此类。
-
用户定义函数:由用户按需要写的函数。对于用户自定义函数,不仅要在程序中定义函数本身,而且在主调函数模块中还必须对该被调函数进行类型说明,然后才能使用。
-
有返回值函数:此类函数被调用执行完后将向调用者返回一个执行结果,称为函数返回值。如数学函数即属于此类函数。由用户定义的这种要返回函数值的函数,必须在函数定义和函数说明中明确返回值的类型。
-
无返回值函数:此类函数用于完成某项特定的处理任务,执行完成后不向调用者返回函数值。这类函数类似于其它语言的过程。由于函数无须返回值,用户在定义此类函数时可指定它的返回为“空类型”,空类型的说明符为“void”。
-
无参函数:函数定义、函数说明及函数调用中均不带参数。主调函数和被调函数之间不进行参数传送。此类函数通常用来完成一组指定的功能,可以返回或不返回函数值。
-
有参函数:也称为带参函数。在函数定义及函数说明时都有参数,称为形式参数(简称为形参)。在函数调用时也必须给出参数,称为实际参数(简称为实参)。进行函数调用时,主调函数将把实参的值传送给形参,供被调函数使用。
-
字符类型分类函数:用于对字符按ASCII码分类:字母,数字,控制字符,分隔符,大小写字母等。
-
转换函数:用于字符或字符串的转换;在字符量和各类数字量(整型,实型等)之间进行转换;在大、小写之间进行转换。
-
目录路径函数:用于文件目录和路径操作。
-
诊断函数:用于内部错误检测。
-
图形函数:用于屏幕管理和各种图形功能。
-
输入输出函数:用于完成输入输出功能。
-
接口函数:用于与DOS,BIOS和硬件的接口。
-
字符串函数:用于字符串操作和处理。
-
内存管理函数:用于内存管理。
-
数学函数:用于数学函数计算。
-
日期和时间函数:用于日期,时间转换操作。
-
进程控制函数:用于进程管理和控制。
-
其它函数:用于其它各种功能。
2.C语言函数的定义
①.无参函数的定义
void Hello (){
printf ( "Hello,world \n" );
}
②.有参函数定义的一般形式
int max ( int a , int b ){
if ( a > b ) return a ;
else return b ;
}
#include <stdio.h>
int max ( int a , int b ){
if ( a > b ) return a ;
else return b ;
}
int main ( void ){
int max ( int a , int b );
int x , y , z ;
printf ( "input two numbers:\n" );
scanf ( "%d%d" ,& x ,& y );
z = max ( x , y );
printf ( "maxmum=%d" , z );
return 0 ;
}
3.C语言函数的调用
①.函数调用的方式
printf ( "%d" , a );
scanf ( "%d" ,& b );
printf ( "%d" , max ( x , y ));
#include <stdio.h>
int main ( void ){
int i = 8 ;
printf ( "%d %d %d %d\n" ,++ i ,++ i ,-- i ,-- i );
return 0 ;
}
②.被调用函数的声明和函数原型
int max ( int a , int b );
int max ( int , int );
char str ( int a );
float f ( float b );
main (){
/* ...... */
}
char str ( int a ){
/* ...... */
}
float f ( float b ){
/* ...... */
}
4.C语言函数的嵌套调用
#include <stdio.h>
long f1 ( int p ){
int k ;
long r ;
long f2 ( int );
k = p * p ;
r = f2 ( k );
return r ;
}
long f2 ( int q ){
long c = 1 ;
int i ;
for ( i = 1 ; i <= q ; i ++)
c = c * i ;
return c ;
}
int main ( void ){
int i ;
long s = 0 ;
for ( i = 2 ; i <= 3 ; i ++)
s = s + f1 ( i );
printf ( "\ns=%ld\n" , s );
return 0 ;
}
5.C语言函数的递归调用
int f ( int x ){
int y ;
z = f ( y );
return z ;
}
#include <stdio.h>
long ff ( int n ){
long f ;
if ( n < 0 ) printf ( "n<0,input error" );
else if ( n == 0 || n == 1 ) f = 1 ;
else f = ff ( n - 1 )* n ;
return ( f );
}
int main ( void ){
int n ;
long y ;
printf ( "\ninput a inteager number:\n" );
scanf ( "%d" ,& n );
y = ff ( n );
printf ( "%d!=%ld" , n , y );
return 0 ;
}
6.C语言数组作为函数参数
①.数组元素作函数实参
#include <stdio.h>
void nzp ( int v ){
if ( v > 0 )
printf ( "%d " , v );
else
printf ( "%d " , 0 );
}
int main ( void ){
int a [ 5 ], i ;
printf ( "input 5 numbers\n" );
for ( i = 0 ; i < 5 ; i ++){
scanf ( "%d" ,& a [ i ]);
nzp ( a [ i ]);
}
return 0 ;
}
②.数组名作为函数参数
#include <stdio.h>
float aver ( float a [ 5 ]){
int i ;
float av , s = a [ 0 ];
for ( i = 1 ; i < 5 ; i ++)
s = s + a [ i ];
av = s / 5 ;
return av ;
}
int main ( void ){
float sco [ 5 ], av ;
int i ;
printf ( "\ninput 5 scores:\n" );
for ( i = 0 ; i < 5 ; i ++)
scanf ( "%f" ,& sco [ i ]);
av = aver ( sco );
printf ( "average score is %5.2f" , av );
return 0 ;
}
#include <stdio.h>
void nzp ( int a [ 5 ]){
int i ;
printf ( "\nvalues of array a are:\n" );
for ( i = 0 ; i < 5 ; i ++){
if ( a [ i ]< 0 ) a [ i ]= 0 ;
printf ( "%d " , a [ i ]);
}
}
int main ( void ){
int b [ 5 ], i ;
printf ( "\ninput 5 numbers:\n" );
for ( i = 0 ; i < 5 ; i ++)
scanf ( "%d" ,& b [ i ]);
printf ( "initial values of array b are:\n" );
for ( i = 0 ; i < 5 ; i ++)
printf ( "%d " , b [ i ]);
nzp ( b );
printf ( "\nlast values of array b are:\n" );
for ( i = 0 ; i < 5 ; i ++)
printf ( "%d " , b [ i ]);
return 0 ;
}
#include <stdio.h>
void nzp ( int a [ 8 ]){
int i ;
printf ( "\nvalues of array aare:\n" );
for ( i = 0 ; i < 8 ; i ++){
if ( a [ i ]< 0 ) a [ i ]= 0 ;
printf ( "%d " , a [ i ]);
}
}
int main ( void ){
int b [ 5 ], i ;
printf ( "\ninput 5 numbers:\n" );
for ( i = 0 ; i < 5 ; i ++)
scanf ( "%d" ,& b [ i ]);
printf ( "initial values of array b are:\n" );
for ( i = 0 ; i < 5 ; i ++)
printf ( "%d " , b [ i ]);
nzp ( b );
printf ( "\nlast values of array b are:\n" );
for ( i = 0 ; i < 5 ; i ++)
printf ( "%d " , b [ i ]);
return 0 ;
}
#include <stdio.h>
void nzp ( int a [], int n ){
int i ;
printf ( "\nvalues of array a are:\n" );
for ( i = 0 ; i < n ; i ++){
if ( a [ i ]< 0 ) a [ i ]= 0 ;
printf ( "%d " , a [ i ]);
}
}
int main ( void ){
int b [ 5 ], i ;
printf ( "\ninput 5 numbers:\n" );
for ( i = 0 ; i < 5 ; i ++)
scanf ( "%d" ,& b [ i ]);
printf ( "initial values of array b are:\n" );
for ( i = 0 ; i < 5 ; i ++)
printf ( "%d " , b [ i ]);
nzp ( b , 5 );
printf ( "\nlast values of array b are:\n" );
for ( i = 0 ; i < 5 ; i ++)
printf ( "%d " , b [ i ]);
return 0 ;
}
7.C语言局部变量和全局变量
①.局部变量
int f1 ( int a ){
int b , c ; /* a,b,c仅在函数f1()内有效 */
}
int f2 ( int x ){
int y , z ; /* x,y,z仅在函数f2()内有效 */
}
main (){
int m , n ; /* m,n仅在函数main()内有效 */
}
-
主函数中定义的变量也只能在主函数中使用,不能在其它函数中使用。同时,主函数中也不能使用其它函数中定义的变量。因为主函数也是一个函数,它与其它函数是平行关系。这一点是与其它语言不同的,应予以注意。
-
形参变量是属于被调函数的局部变量,实参变量是属于主调函数的局部变量。
-
允许在不同的函数中使用相同的变量名,它们代表不同的对象,分配不同的单元,互不干扰,也不会发生混淆。如在前例中,形参和实参的变量名都为n,是完全允许的。
-
在复合语句中也可定义变量,其作用域只在复合语句范围内。例如:
main (){
int s , a ;
/* …… */
{
int b ;
s = a + b ;
/* ……*/ /*b作用域*/
}
/* …… */ /*s,a作用域*/
}
#include <stdio.h>
int main ( void ){
int i = 2 , j = 3 , k ;
k = i + j ;
{
int k = 8 ;
printf ( "%d\n" , k );
}
printf ( "%d\n" , k );
return 0 ;
}
②.全局变量
#include <stdio.h>
int s1 , s2 , s3 ;
int vs ( int a , int b , int c ){
int v ;
v = a * b * c ;
s1 = a * b ;
s2 = b * c ;
s3 = a * c ;
return v ;
}
int main ( void ){
int v , l , w , h ;
printf ( "input length,width and height: " );
scanf ( "%d %d %d" ,& l ,& w ,& h );
v = vs ( l , w , h );
printf ( "v=%d, s1=%d, s2=%d, s3=%d\n" , v , s1 , s2 , s3 );
return 0 ;
}
#include <stdio.h>
int a = 3 , b = 5 ; /* a,b为外部变量 */
int max ( int a , int b ){ /* a,b为外部变量 */
int c ;
c = a > b ? a : b ;
return c ;
}
int main ( void ){
int a = 8 ;
printf ( "%d\n" , max ( a , b ));
return 0 ;
}
8.C语言变量的存储类别
①.动态存储方式与静态动态存储方式
-
静态存储方式:是指在程序运行期间分配固定的存储空间的方式。
-
动态存储方式:是在程序运行期间根据需要进行动态的分配存储空间的方式。
②.auto变量
int f ( int a ){ /* 定义f函数,a为参数 */
auto int b , c = 3 ; /*定义b,c自动变量*/
/* …… */
}
③.用static声明局部变量
#include <stdio.h>
int f ( int a ){
auto int b = 0 ;
static int c = 3 ;
b = b + 1 ;
c = c + 1 ;
return ( a + b + c );
}
int main ( void ){
int a = 2 , i ;
for ( i = 0 ; i < 3 ; i ++)
printf ( "%d\n" , f ( a ));
return 0 ;
}
-
静态局部变量属于静态存储类别,在静态存储区内分配存储单元。在程序整个运行期间都不释放。而自动变量(即动态局部变量)属于动态存储类别,占动态存储空间,函数调用结束后即释放。
-
静态局部变量在编译时赋初值,即只赋初值一次;而对自动变量赋初值是在函数调用时进行,每调用一次函数重新给一次初值,相当于执行一次赋值语句。
-
如果在定义局部变量时不赋初值的话,则对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符(对字符变量)。而对自动变量来说,如果不赋初值则它的值是一个不确定的值。
#include <stdio.h>
int fac ( int n ){
static int f = 1 ;
f = f * n ;
return f ;
}
int main ( void ){
int i ;
for ( i = 1 ; i <= 5 ; i ++)
printf ( "%d!=%d\n" , i , fac ( i ));
return 0 ;
}
④.register变量
#include <stdio.h>
int fac ( int n ){
register int i , f = 1 ;
for ( i = 1 ; i <= n ; i ++)
f = f * i ;
return f ;
}
int main ( void ){
int i ;
for ( i = 0 ; i <= 5 ; i ++)
printf ( "%d!=%d\n" , i , fac ( i ));
return 0 ;
}
-
只有局部自动变量和形式参数可以作为寄存器变量;
-
一个计算机系统中的寄存器数目有限,不能定义任意多个寄存器变量;
-
局部静态变量不能定义为寄存器变量。
⑤.用extern声明外部变量
#include <stdio.h>
int max ( int x , int y ){
int z ;
z = x > y ? x : y ;
return z ;
}
int main ( void ){
extern A , B ;
printf ( "%d\n" , max ( A , B ));
return 0 ;
}
int A = 13 , B =- 8 ;
原文:http://www.cnblogs.com/caizheng/p/6155219.html
内容总结
以上是互联网集市为您收集整理的C语言函数全部内容,希望文章能够帮你解决C语言函数所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。