基础知识
函数的定义和调用
具有通用、独立的功能,可以被反复调用的一段代码
函数定义由两部分组成:函数首部和函数操作描述
函数调用是通过表达式或语句激活并执行函数代码的过程
参数
函数的一个明显特征就是使用时带括号( )
,必要的话,括号中还要包含数据或变量,称为参数(Parameter)。参数是函数需要处理的数据
返回值
既然函数可以处理数据,那就有必要将处理结果告诉我们,所以很多函数都有返回值(Return Value)。所谓返回值,就是函数的执行结果。函数的定义格式为:
1 2 3 4 5 | 返回值类型 函数名 ( 形参列表 ) { .... return 对应的返回值类型数据(常量或变量); } |
返回值类型 如果没有,则写成void
形参列表 如果没有,则写成void
声明
C语言代码由上到下依次执行,原则上函数定义要出现在函数调用之前,否则就会报错。但在实际开发中,经常会在函数定义之前使用它们,这个时候就需要提前声明。
所谓声明,就是告诉编译器我要使用这个函数,你现在没有找到它的定义不要紧,请不要报错,稍后我会把定义补上。
函数声明的格式非常简单,相当于去掉函数定义中的函数体再加上分号;
,如下所示:
返回值类型 函数名( 类型 形参, 类型 形参… );
也可以不写形参,只写数据类型:返回值类型 函数名( 类型, 类型…);
函数声明给出了函数名、返回值类型、参数列表(参数类型)等与该函数有关的信息,称为函数原型。函数原型的作用是告诉编译器与该函数有关的信息,让编译器知道函数的存在,以及存在的形式,即使函数暂时没有定义,编译器也知道如何使用它。
传值参数
调用函数时,实参表达式的值被复制到相应形参标识的对象中,
并按形参类型强制转换
函数内对形参的访问、修改,都在形参的标识对象进行
函数返回时,形参对象被撤消,不影响实参的值
值传送的实参可以是常量、有确定值的变量或表达式
函数返回值通过匿名对象传递
例题
1.
double max ( double x , double y )
{ if ( x > y )return 语句形式:return x ;
else
return y ;
}
return 语句形式:
return 表达式或 return (表达式 )
作用:
返回函数值
不再执行后续语句,程序控制返回调用点
一个函数体内可以有多个return 语句
表达式 返回值的类型与函数类型不相同时,
自动强制转换成函数的类型
2.函数原型
#include <iostream.h>
double max( double, double ) ; // 函数原型
void main()
{ double a, b, c, m1, m2 ;
cout << "input a, b, c :\n" ;
cin >> a >> b >> c ;
m1 = max( a, b ) ; // 函数调用
m2 = max( m1, c ) ;
cout << "Maximum = " << m2 << endl ;
}
double max( double x, double y ) // 函数定义
{ if ( x > y ) return x ;
else return y ;
}
3.值参传递
#include<iostream.h>
int add(int , int ) ;
void main()
{
int a, b, c ;
cin >> a >> b;
c = add(a,b) ;
cout << "c = " << c << endl ;
}
int add(int i, int j )
{ i + + ; j + + ;
return ( i + j ); }
a=2,b=4,c=8;
输出c=8
4.将一个偶数分解成两素数之和
#include <iostream>
#include <cmath>
using namespace std;
int prime(int x);
int main( )
{
int n, n1, n2;
cin>>n;
for (n1 = 2; n1 <= n/2; n1++)
{
n2 = n - n1;
if(prime(n1)
if(prime(n2)
cout<<n<<“=“<<n1<<“+”<<n2<<endl;
}
return 0;
}
5.用指向数组的指针变量输出数组的全部元素
int main( )
{ int a[10], i;
int *p;
for (i=0; i<10; i++)
cin>>a[i];
for (p=a; p<a+10; p++)
cout<<*p<<‘\t’;
}
int main( )
{ int a[10], i;
int *p=a;
for (i=0; i<10; i++)
cin>>a[i];
for (i=0; i<10; i++)
cout<<*p++<<‘\t’;
}输出数据后指针加1
心得
经过这段时间的学习,发现C语言的学习已经慢慢的变得深入了,对于学习相比起上学期变得有些吃力,对于函数呢,还算比较容易理解,可以与上学期的内容联系起来,但是到了函数的递归与参数就有些难以理解。
在我自己及看来呢,在函数的学习中主要需要注意这几个问题:
1.函数的返回值类型,也就是return的内容的类型,注意如果有多种结束函数途径的话一定要有多个return
2.函数形参的传递关系,有的可以改变值,有的不可以
3.形参实参都用数组名
实参用数组名,形参用指针变量
形参实参都用指针变量
实参为指针变量,形参为数组名