C:浅谈函数

这是根据小甲鱼视频而整理的,用来复习函数以及加深对函数的理解。

一.问题

在学习函数之前,随着程序规模的变大,我们会遇到越来越多的问题。如

①:main函数变得相当冗杂——在大括号之间通常包含着几百行代码

②:代码前后关联度高,要想修改某个变量从上至下都要检查修改。

③:重复——为了多次实现某功能,我们需要一次次的重复或者是ctrl+v复制黏贴整段代码才行

二.函数

  以第一个程序helloworld为例:printf函数就是系统自带的一个函数,用来输出字符“helloworld”,至于字符串是怎么输出的,以及其中种种细节,就不用我们来考虑了,下次我们想要输出什么东西的时候,只需要用系统提供的printf函数就可以了。

  作为一门高级的语言,C语言支持我们自己封装函数,即根据自己所需的功能编写并封装函数。

  业务:封装一个函数叫做printf_C,调用它就可以打印一个由#字符组成的大C

#include<stdio.h> 

void print_C() ;  // 函数的声明,声明一个新函数叫做print_C

void print_C()    //以下的代码块是该函数的定义
{
	printf(" ######\n");
	printf("##     ##\n");
	printf("##       \n");
	printf("##       \n");
	printf("##       \n");
	printf("##     ##\n");
	printf(" ######\n");
}                 // 一些黑客组织通常用此方法来打印组织Logo,十分炫酷

int main()
{
	print_C();  //函数的调用,调用我们自己写的函数,跟调用printf函数是一样的
	
	return 0;
}

通过这段代码我们可以看出,函数事实上就是对若干代码段的封装,调用它相当于执行了一堆代码

三.函数的定义

定义函数的格式是这样子的

类型名   函数名 (参数列表)

{

       函数体

}

其中:

①类型名指函数的返回值,函数不返回任何数据的话,需要写一个void(空类型,无类型),没有写的话,默认返回整形

②函数名指函数的名字,一般用来表示函数将执行的功能

③参数列表指定了参数的类型和名字,如果没用参数的话小括号里什么也不用写

④函数体指函数的具体实现过程,由哪些代码段构成

四.函数的声明

所谓声明,就是告诉编译器我要使用这个函数。

  有时候,不写函数声明程序也是可以执行的,但是函数定义绝对不能写在声明前面,这样的话编译器可能找不到北。因为程序的执行是自上而下的,编译器会不知道printf_c是什么从而可能报错。

五.函数的参数和返回值

  有时候,函数需要接收用户传入的数据,那么就需要使用函数的参数。函数的参数可以有多个,类型也可以各不相同

 而函数的返回值,通常是反馈函数的计算结果,也可以用来表示函数的执行结果。例如:函数执行成功,返回true; 执行失败,则返回false。

例一:编写一个函数sum,由用户输入参数n,计算1+2+3+...+(n-1)+n的结果并返回打印出来

#include<stdio.h>

int sum(int n);

int sum(int n) // int表明return后面的结果是整形 ,参数的定义事实上跟变量是一样的;这里定义的参数我们称为“形参” 
{
	int result = 0;
	
	do
	{
		result += n;
	}while(n-- > 0);
	
	return result;
}

int main()
{
	int n,result;
	
	printf("请输入n的值:");
	scanf("%d",&n) ; //接收到用户的输入放到变量n里面,作为参数传进sum,传进去的参数我们称为”实参“ ,比如我们输入100,int sum(int n);里面就接收到100,就可以在上面的函数当中直接使用 
	
	result = sum(n);
	
	printf("结果是:%d\n",sum(n));
	
	return 0;
}

例二:编写一个函数max,接收两个整形参数,并返回它们当中较大的值。

#include<stdio.h>

int max(int,int);  //参数名可以不写,但是类型必须要写 ,语句结尾的分号必须写 


int max(int x,int y) 
{

	if(x > y)
	       return x;
	else
	       return y;       

}

int main()
{
	int a,b,c;  //main函数里的变量名跟max函数里的变量名的函数名、参数名可以相同,也可以不同 
  
    printf("请输入两个整数:") 
    scanf("%d%d",&a,&b);
    
    c = max(a,b); //实参 ,必须跟形参定义时的数据类型相同,不然报错。 
    printf("他们中较大的值是:%d\n",c);
    
    return 0;
}

我们观察到,if语句后面有两个return,那么两个return代表着有两个返回值吗?

不不不,函数一旦遇到return语句后会立即返回,不再执行后面的代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值