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

6_1   函数的概述数组

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

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

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

#include<stdio.h>
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)库函数input

(3)用户自定义函数原型

 

①从用户使用角度看,函数可分为库函数(又称标准函数)和用户自定义函数两种。
②函数又分为有返回值和无反回值函数两种。
③从主调函数和被调函数之间数据传送的角度来看,又可分为有参函数和无参函数io

6_2   函数定义的通常形式class

_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<stdio.h>
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<stdio.h>
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<stdio.h>
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<stdio.h>
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<stdio.h>
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声明全局变量  

相关文章
相关标签/搜索