Lecture 4 函数与预处理 (上)

本文详细介绍了C++中的函数概念、模块化程序设计原则、函数分类及使用方法,包括无参函数、有参函数、参数传递、函数调用流程与返回值等内容,旨在帮助开发者更好地理解和运用C++的函数特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

调用函数

Void printstars (int m)定义输出m个星号的函数 

}

Int main ()

{

   }

函数 printstars  {}中为函数体

调用函数例子:

*

***

*****

*******

*********

*********** 

程序如下:

#include<iostream>

#include<cmath>  

using namespace std;

void printstars (int m)

{

for (int j=1;j<=m;++j)

       cout<<'*';

cout<<endl;

}

int main ()

{

int n=6;

for (int i=1;i<=n;++i)

   printstars (2*i-1);   调用函数printstars

return 0;

}

好处:自行编写函数进行需要的调用,而不是函数库中已经编好的

2

     *

    ***

   *****

  *******

 *********

***********

程序:

#include<iostream>

#include<cmath>  

using namespace std;

void printchs (char c,int m)   括号内为形式参数,类似为y=fx)中的x,取值决定于实际参数

{

for (int j=1;j<=m;++j)

       cout<<c;  //每一行输出m个字符c

}           自定义函数

int main ()

{

int n=6;

for (int i=n;i>=1;--i)

{

printchs (' ',n-i);    括号内为实际参数,调用时输出该参数

printchs ('*',2*i-1);     函数的调用

cout<<endl;

}return 0;

}

定义一个调用函数,就可以不需要循环套循环

基本结构:

Int main ()

{

   Max(a,b)

}

Int max(int x,int y)

{

  

Return z

   }

模块化程序设计:自顶向下,逐步求精

得到一系列以功能块为单位的算法描述

为了降低程序的复杂度,使程序设计,调试,维护等操作简单化

C++中的函数

一个源程序文件由一个或多个函数组成

一个程序必须且只有一个main()函数,C++main()函数开始执行

Main函数为主调函数,max等自定义函数为被调函数,共同组成函数调用;再对被调函数进行函数定义

C++语言中,所有函数都是平行独立的,无主次,相互包含之分函数可嵌套调用,不可嵌套定义

Void eat()

{

    }

Void sleep()

    }

Void hitdoudou()

{

}

C++使用函数实现模块化  函数是C++的基本模块

避免重复的编程,可以直接进行重复调用

使程序更加模块化,便于阅读和修改

用户使用的角度看函数分类

系统函数,即由编译系统提供的库函数,也称为标准函数

如 头文件#include <cmath> 调用库函数sqrt(),exp(),Pow()求幂函数

用户自己定义的函数,用以解决用户的专门需要

在设计程序时可以将完成某一相对独立功能的程序定义一个函数,以满足根据应用的需要

从函数的形式进行函数分类

无参函数  调用函数时不必给出参数   int main()

有参函数 在调用函数时要给出参数,在主调函数和被调函数之间传递数据

Int  maxint x, int y

定义无参函数

类型标识符 函数名(【void】)

{

   声明部分

   语句

}

类型标识符可以为int,也可以为void,即空类型,仅仅注重于执行操作,而不求值

函数名也是标识符,有字母,数字,下划线组成,且开头只能为字母或者下划线

【】中的内容可以省略,即可以为()和(void

主调函数没有向被调函数传送的数据

无参函数主要用于执行某一操作,但是相对于有参函数来说灵活性较差

定义有参函数

类型标识符 函数名(形式参数表列)  形式参数表列可以由逗号隔开

{

   声明部分

   语句

   如果不是void类型,还必须有返回语句 return()

}

形式参数和实际参数

形参:在定义函数时,函数名后括号中的变量

实参:在调用函数时,函数名后括号中的变量(可以是表达式)

执行过程中,将实际参数的值传给被调函数的形式参数,计算后得到函数返回

形参和实参对应的存储空间

定义函数时指定形参,但不分配存储单元

形参又称虚拟参数,表示不是实际存在的数据

发生函数调用时,才为形参分配内存单元,以便接受实参传来的数据

在调用结束后,形参所占的内存单元也被释放

不同函数可以使用相同的形参变量名

实参变量对形参变量进行“值传递”

在执行一个被调用函数时,形参的值如果发生改变,并不会改变主调函数中实参的值

实参可以使表达式

函数的返回值

如果函数需要求值,则最后需要函数值返回return语句

Return语句将被调用函数中的一个确定值带回主调函数中去

Return (表达式);

Return 表达式;

函数值类型为定义函数式指定函数值的类型

如果函数值的类型和return语句中表达式的值不一致,则以函数类型为准,即函数类型决定返回值的类型,对数值型数据,可以自动进行类型转换

实参单元与形参单元是不同的单元

#include<iostream>

#include<cmath>  

using namespace std;

void fun (int a,int b)

{

a=a*10;       ab为形式参数,执行结束后释放内存单元

b=b+a;

cout<<a<<'\t'<<endl;       形参输出     20

}

void main ()

{

int a=2,b=3;           ab为实际参数,fun执行结束后继续为实际参数的输出

fun (a,b);

cout<<a<<'\t'<<endl;       实参输出   2

}

实参和形参

形参实参类型相等,且一一对应

实参可以是常量,变量或表达式

实参必须要有确定的值,以便在调用函数时赋值给形参

实参与形参的类型应该相同或者赋值兼容

形参不可以为常量,因为不分配内存

Int max (int x, int y)

{return (x>y?x:y);}

可以有多个return语句,执行到哪一个,哪一个就起作用返回,后面程序就不起作用

Int max (int x,int y)

{

If (x>y)

    Return x;

Else 

    Return y;

}  风格不好

好的风格为程序只出现一个return语句,放在最后,先求值再返回

函数调用的一般形式

函数名 (【实参表列】)

参数是按顺序对应,一对一传递数据

如果实参表列包括多个实参,对实参求值的顺序并不确定:VC++采用自右向左

Int i=2

Fun i++i

自右向左,先++i得到i=3,然后再得到i的值,即输出 fun33,

函数调用的方式

函数语句  把函数调用单独作为一个语句

Printstars ();

函数表达式  c=2*maxab);

函数带回一个确定的值参加表达式运算

函数参数  函数调用作为一个函数的实参

M=maxamaxbc));

Cout<<max(a,b);

2,3两种情况返回值不能是void型,因为其可以不返回值或者返回值无意义

1情况一般情况返回值为void型,只注重作用了什么,并不要求函数带回一个值

函数调用的条件

被调用的函数必须是已存在的函数

如果使用库函数,必须用头文件#include<……>

函数调用遵循先定义,后调用的原则,即被调函数应出现在主调函数之前

若要先调用,后定义:调用前声明

即将定义函数的头拿到调用处,加上分号即可(一定要加函数的类型)然后再进行函数调用

例:

先定义后调用

void fun (int a,int b)    函数定义

{

}

void main ()

{

 fun ( a, b);  函数调用

}

先调用后定义

void main ()

{

void fun (int a,int b);   调用前声明

fun (a,b);   函数调用

}

void fun (int a,int b)     函数定义

{

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值