栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言程序设计(第六章 函数)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言程序设计(第六章 函数)

C语言程序设计(第六章 函数) 1、为什么定义函数 定义函数包括以下几个内容:

(1)指定函数的名字,以便以后按名调用。

(2)指定函数的类型,即函数返回值的类型。

(3)指定函数的参数的名字和类型,以便在调用函数时向它们传递数据。对无参函数不需要这项。

(4)指定函数应当完成什么操作,也就是函数是做什么,即函数的功能。这是最重要的,是在函数体中解决的。

2、定义函数的方法 (1)定义无参函数
类型名 函数名(){
	函数体
}

或

类型名 函数名(void){
	函数体
}

#include
int main(){
	void print_star();
	void print_message();
	print_star();
	print_message();
	print_star();
	return 0;
}
void print_star(){
	printf("*******************n");
}
void printf_message(){
	printf("Hello,world!n");
}

执行结果:
*******************
Hello,world!
*******************
(2)定义有参函数

以下定义的max函数是有参函数:

类型名 函数名(形式参数表列){
    函数体
}
int max(int x,int y){
	int z;
	z=x>y?x:y;
	return(z);
}
(3)定义空函数
类型名 函数名(){
	
}

例如:
void dummy(){

}
3、调用函数 (1)函数调用的形式
函数调用的一般形式为
函数名(实参表列)

print_star();         //调用无参函数
c=max(a,b);			  //调用有参函数
(2)函数调用语句

把函数调用单独作为一个语句,不要求函数带回值,只要求函数完成一定的操作。例如:

print_start();
(3)函数表达式

函数调用出现在另一个表达式中,如“c=max(a,b);”,max(a,b)是一次函数调用,它是赋值表达式中的一部分。这时要求函数带回一个确定的值以参加表达式的运算。例如:

c=2*max(a,b);
(4)函数参数

函数调用作为另一个函数调用时的实参。例如:

m=max(a,max(b,c));
4、函数调用时的数据传递 (1)形式参数和实际参数

​ 在调用有参函数时,主调函数和被调用函数之间有数据传递关系。从前面已知:在定义函数时函数名后面括号中的变量名称为“形式参数”(简称“形参”)或“虚拟参数”。在主调函数中调用一个函数时,函数名后面括号中的参数称为“实际参数”(简称“实参”)。实际参数可以是常量、变量或表达式。

(2)实参和形参间的数据传递

在调用函数过程中,系统会把实参的值传递给被调用函数的形参。

例题1:输入两个整数,要求输出其中值较大者。要求用函数来找到大数。
#include
int max(int x,int y){
    int z;
    z=x>y?x:y;
    return(z);
}

int main(){
    int max(int x,int y);
    int a,b,c;
    printf("请输入两个整数:");
    scanf("%d%d",&a,&b);
    c=max(a,b);
    printf("max is %dn",c);
    return 0;
}

执行结果:
请输入两个整数:18 48
max is 48
(3)函数的返回值

①函数的返回值是通过函数中的return语句获得的。

②函数值的类型

③在定义函数时指定的函数类型一般应该和return语句中的表达式类型一致,即函数类型决定返回值的类型。

④对于不带回的函数,应当用定义函数为“void类型”(或称“空类型”)

5、函数的嵌套调用 例题2:输入4个整数,找出其中最大的数。用函数的嵌套来处理。
#include
int main(){
    int max4(int a,int b,int c,int d);
    int a,b,c,d,max;
    printf("请输入4个数字:");
    scanf("%d%d%d%d",&a,&b,&c,&d);
    max=max4(a,b,c,d);
    printf("max is %dn",max);
    return 0;
}
int max4(int a,int b,int c,int d){
    int max2(int a,int b);
    int m;
    m=max2(a,b);
    m=max2(m,c);
    m=max2(m,d);
    return m;
}
int max2(int a,int b){
    if(a>=b){
        return a;
    }
    else 
        return b;
}

执行结果:
请输入4个数字:43 65 6 8
max is 65
6、函数的递归调用

在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用。

例题3:用递归方法求n!
#include
int main(){
    int fac(int n);
    int n,y;
    printf("请输入求阶乘的数:");
    scanf("%d",&n);
    y=fac(n);
    printf("%d!=%dn",n,y);
    return 0;
}

int fac(int n){
    int f;
    if(n<0){
        printf("n<0,data Error!");
    }
    if(n==0 || n==1){
        f=1;
    }
    else{
        f=fac(n-1)*n;
    }
    return f;
}

执行结果:
请输入求阶乘的数:10
10!=3628800
例题4:汉诺塔问题
#include
int main(){
    void hanoi(int n,char one,char two,char three);
    int m;
    printf("请输入盘子数:");
    scanf("%d",&m);
    printf("%d个盘子移动情况:n");
    hanoi(m,'A','B','C');
    return 0;
}

void hanoi(int n,char one,char two,char three){
    void move(char x,char y);
    if(n==1){
        move(one,three);
    }
    else{
        hanoi(n-1,one,three,two);
        move(one,three);
        hanoi(n-1,two,one,three);
    }
}


void move(char x,char y)
{
    printf("%c->%cn",x,y);
}
7、一维数组名作函数参数 例题5:有一个一维数组score,内放置10个学生成绩,求平均成绩
#include
int main(){
    float average(float array[10]);
    float score[10],aver;
    int i;
    printf("请输入10名学生的成绩:n");
    for(i=0;i<=9;i++){
        scanf("%f",&score[i]);
    }
    aver=average(score);
    printf("average score is %5.2fn",aver);
    return 0;
}

float average(float array[10]){
    int i;
    float aver,sum=0;
    for(i=0;i<=9;i++){
        sum+=array[i];
    }
    aver=sum/10;
    return aver;
}

执行结果:

请输入10名学生的成绩:
100 56 78 98 67.5 99 54 88.5 76 58
average score is 77.50
8、多维数组名作函数参数 例题6:有一个3×4的矩阵,求所有元素中的最大值
#include
int main(){
    int max(int array[][4]);
    int a[3][4]={{1,3,5,7},{2,4,6,8},{12,13,17,14}};
    printf("max value is %dn",max(a));
    return 0;
}

int max(int array[][4]){
    int i,j,max;
    max=array[0][0];
    for(i=0;i<3;i++){
        for(j=0;j<4;j++){
            if(array[i][j]>max){
                max=array[i][j];
            }
        }
    }
    return max;
}

执行结果:
max value is 17
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/737853.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号