8.2 函数定义的一般形式
考点2 函数的定义
真考链接
考点2主要以选择题的形式出现,要求选择函数的正确定义。此知识点属于重点识记内容,其在选择题中的考核概率为10%。在操作题中,一般会在修改题中进行考查。比如要求改正函数定义错误的方法,使函数通过编译、连接和运行,考核概率为50%。
C语言中函数定义的一般形式如下:
函数返回值的类型名:
函数名(类型名形式参数1,类型名形式参数2,……)
{
说明部分;
语句部分;
}
说明:函数名和各个形式参数都是由用户命名的合法标识符,与普通变量名的定义规则相同。在同一程序中,函数名必须唯一,不能出现重名的情况。形式参数名只要在同一函数中唯一即可,由于形式参数的作用域不同,因此形式参数名可以与其他函数中的变量名同名。
(1)定义时若在函数的首部省略了函数返回值的类型名,可以把函数首部写成:
函数名(类型名 形式参数1,类型名 形式参数2,……,类型名 形式参数n)
(2)紧跟在函数名之后的圆括号中的内容是形式参数和类型说明表,在每个形参之前都要有类型名,以标识形式参数的类型。各定义的形参之间用逗号分隔。
例如,求两整数和的函数:
int add(int a,int b)
{ int t;/* 函数体中声明部分 */
t=a+b;
return t;
}
若所定义的函数没有形参,函数名后的一对圆括号依然不能省略。本例中函数体中的语句是用来完成求和的功能。在某些情况下,函数体可以是空的,例如:
fun()
{}
该函数中没有任何语句,即没有任何实际作用。之所以要在主调函数上这样写,是为了表明此处要调用一个函数,而现在这个函数的具体功能可能还没有设计好,不起作用,等以后扩充函数功能时补上即可。
(3)在函数体中,除形参外,用到的其他变量必须在说明部分进行定义,这些变量(包括形参)只在函数被调用时才被临时分配内存单元,当退出函数时,这些临时开辟的存储单元全部被释放掉,即在该函数体内部定义的变量都将不存在。因此,这些变量只在函数体内部起作用,与其他函数体的内部变量不相关。
小提示
C语言规定,不能在一个函数内部再定义函数,也就是说函数不能嵌套定义。
常见问题
在函数的定义中,对形式参数有什么具体的要求?
形式参数名只要在同一函数中唯一即可,由于形式参数的作用域不同,因此形式参数名可以与其他函数中的变量同名。
真题精选
【例1】以下函数:
fff(float x)
{ printf("% d\n",x*x);}
的类型是( )。
A.与参数x的类型相同 B.void类型
C.int类型 D.无法确定
【答案】C
【解析】在函数的首部(第一行),函数名(在此是fff)的前面应当是一个类型名,此类型名规定了函数返回值的类型;此类型名可以省略,这时C默认函数返回值的类型为int,因此本题的答案应当是C。读者应当记住:当定义函数时,函数名前缺类型名时,函数返回值的类型应为int。
【例2】下列给定程序中,函数fun()的功能是进行数字字符转换。若形参ch中是数字字符‘0’ ~‘9’,则将‘0’转换成‘9’,‘1’转换成‘8’,‘2’转换成‘7’,…,‘9’转换成‘0’;若是其他字符则保持不变,并将转换后的结果作为函数值返回。
请在标号处填入正确的内容,使程序得出正确的结果。
注意:部分源程序给出如下。
不得增行或删行,也不得更改程序的结构。
试题程序
#include <stdio.h>
【1】fun(char ch)
{ if(ch> = '0'&&【2】)
return '9'-(ch-【3】);
return ch;
}
main()
{ char c1,c2;
printf("\nThe result:\n");
c1= '2';c2 = fun(c1);
printf("c1=% cc2=% c\n",c1,c2);
c1= '8';c2 = fun(c1);
printf("c1=% cc2 =% c\n",c1,c2);c1= 'a';c2 = fun(c1);
printf("c1=% cc2=% c\n",c1,c2);
}
【答案】【1】char 【2】ch<='9' 【3】 '0'
【解析】本题考查:函数定义,注意函数定义的一般形式以及有参函数和无参函数的区别;if语句条件表达式,本题的条件表达式是判断数字字符;函数返回值,其一般形式为“return 表达式;”。
标号【1】:函数定义时,类型标识符指明了本函数的类型,函数的类型实际上是函数返回值的类型,所以此处应该填入char。
标号【2】:通过if条件语句判断字符串中字符是否是数字字符,即大于等于字符'0',同时小于等于字符'9'。
标号【3】:return语句完成函数返回操作,要实现字符转换,完整语句为return '9'-(ch-'0');。