Java无参无反,C语言-第六章、用函数实现模块化程序设计

本文详细介绍了C语言中的函数概念,包括函数的分类、定义、参数传递、返回值以及调用方式。通过实例解析了如何定义无参、有参、空函数,以及如何进行函数的嵌套调用和递归调用。同时,讨论了局部变量和全局变量的作用域,并介绍了函数与数组的交互,展示了数组作为函数参数的用法。
摘要由CSDN通过智能技术生成

6_1   函数的概述

函数是具有一定功能的一段程序,一个函数用来实现一个功能。

函数是程序的基本组成单元。

【例6-1】  函数调用的简单例子

#include

int main()

{

void printf_star();

void printf_message ();

printf_star();

printf_message ();

printf_star();

return 0;

}

void printf_star()

{

printf("**************************\n\n");

}

void printf_message ()

{

printf(" Hello world!\n\n");

}

(1)主函数main

(2)库函数

(3)用户自定义函数

①从用户使用角度看,函数可分为库函数(又称标准函数)和用户自定义函数两种。

②函数又分为有返回值和无反回值函数两种。

③从主调函数和被调函数之间数据传送的角度来看,又可分为有参函数和无参函数

6_2   函数定义的一般形式

_2.1   无参函数的定义

形式:类型名  函数名

{

函数体

}          如:

void hello()

{

printf (“Hello  world!\n”)

}

_2.2   有参函数的定义

形式:类型名  函数名(形式参数表列)

{

函数体

}

int max (int a,int b)

{

if (a>b) return a;

else return b;

}

_2.3  空函数

形式:类型名  函数名()

6_3  函数的参数与函数的值

_3.1  形式参数和实际参数

【例6-2】从键盘输入两个整数,要求用函数求出较大者,然后输出。

#include

int main()

{

int max(int a,int b);

int x,y,z;

printf("Please input two numbers:");

scanf("%d,%d",&x,&y);

z=max(x,y);

printf("maxnum=%d\n",z);

return 0;

}

int max(int a,int b)

{

int c;

c=a>b?a:b;

return (c);

}

_3.2  函数的返回值

说明:(1)在函数中允许有多个return语句,但每次调用只能有一个return语句被执行,因此只能返回一个函数值

(2)函数值的类型和函数定义中函数的类型应保持一致。如果两者不一致,则以函数定义中函数的类型为,自动进行类型转换。

(3)对于不带返回值的函数,应当定义函数为void类型(或称"空类型");如果retun语句中没有指定的表达式(即return;),则此时返回一个不确定的值。

6_4   函数的调用

_4.1   函数调用的一般形式:

函数名 (实参表列)

_4.2  函数调用的方式:

(1)作为函数表达式的一部分

(2)作为一个函数语句

(3)作为函数的实参

_4.3   被调用函数的声明和函数原型

例:对max函数的声明:int max(int  a,int  b)

_4.4   函数的嵌套调用

【例6-4】输入4个数,找出其中最大值。

#include

int main()

{

int max4(int a,int b,int c,int d);

int a,b,c,d,max;

printf("Please input 4 numbers(用逗号分隔):");

scanf("%d,%d,%d,%d",&a,&b,&c,&d);

max=max4(a,b,c,d);

printf("max=%d\n",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.5  函数的递归调用

【例6-5】递归计算n!

#include

long fac(int n)

{

long f;

if(n<0) printf("n<0,input error!");

else

if (n==0||n==1) f=1;

else f=fac(n-1)*n;

return (f);

}

int main()

{

int n;

long y;

printf("\nPlease input a inteager number:");

scanf("%d",&n);

y=fac(n);

printf("%d!=%ld\n",n,y);

return 0;

}

【例6-6】汉诺塔问题。

#include

void move (int n,int x,int y,int z)

{

if (n==1)

printf("%c-->%c\n",x,z);

else

{

move (n-1,x,z,y);

printf("%c-->%c\n",x,z);

move (n-1,y,x,z);

}

}

int main()

{

int h;

printf("\ninput number:\n");

scanf("%d",&h);

printf("the step to moving %2d diskes:\n",h);

move(h,'a','b','c');

return 0;

}

6_5   函数与数组

_5.1  数组函数作函数实参

【例6-7】判断一整型数组各元素的值,若大于0则输出该值,若小于等于0则输出0值。

#include

void pd (int v)

{

if (v>0)

printf("%5d",v);

else

printf("%5d",0);

}

int main()

{

int a[5],i;

printf("Please input 5 numbers:");

for (i=0;i<5;i++)

{

scanf("%d",&a[i]);

pd (a[i]);

}

printf("\n");

return 0;

}

_5.2   数组名作函数实参

6_6  变量的作用域与生存期

_6.1  局部变量与全局变量

定义在花括号里的局部变量的作用域仅限于花括号内

而花括号外的变量为全局变量,作用域为整体

_6.2  变量的存储方式和生存期

(1)动态存储方式和静态存储方式

变量:①动态的(auto);②静态的(static);③寄存器的(register);④外部的(extern)。

(2)auto变量

(3)用static声明局部变量

(4)register变量

(5)用extern声明全局变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值