【C】C语言复习_第四天_函数

本文介绍了C语言中的函数概念,包括函数的定义、无参与有参函数、返回值、函数调用方式及数据传递。通过实例展示了如何使用函数计算余数、输出字符串以及判断三角形是否可构成。还探讨了外部函数与内部函数、局部变量与全局变量的区别,以及汉诺塔问题的解决方案。最后提供了进阶的函数应用案例。
摘要由CSDN通过智能技术生成

学习内容:

4、函数


学习时间:

2020年10月5日18:30-19:30

学习产出:

/*
函数
	初始函数
		函数的概念
			最简单的程序模块就是函数
		函数的定义
			语法格式:
				返回值类型 函数名(参数类型 参数名1,参数类型 参数名2...)
				{
					执行语句
					...
					return 返回值;
				}
			函数种类
				无参函数
				有参函数
		函数的返回值
			语法格式:
				return 表达式;
		printf()函数和scanf()函数
			printf()函数
				printf()函数输出数据
				常用printf()格式字符
					%s	输出一个字符串
					%c	输出一个字符
					%d	以十进制输出一个有符号整型
					%u	以十进制输出一个无符号整型
					%f	以十进制输出一个浮点数
					...	
			scanf()函数
				scanf()函数负责从标准输入设备(一般指键盘)上接受用户的输入
	内存四区
		栈区
			栈区时一块连续的内存区域,该区域由编译器自动分配和释放,一般用来存放函数的参数、全局变量等
		堆区
			堆空间一般由程序员分配或释放,若程序员不释放,程序结束时将被系统强制回收
		数据区
			根据功能又可以分为静态全局区和常量区两个域
		代码区
			用于存放函数体的二进制代码
	函数调用
		函数的调用方式
			语法格式:
				函数名(实参列表1,实参列表2...)
			调用方式
				将函数作为表达式带哦用
				将函数作为语句调用
				将函数作为实参调用
		函数调用时的数据传递
			形式参数
				在定义函数时函数后面括号中的变量名称称为“形式参数”(简称“形参”)或“虚拟参数”
			实际参数
				在主调函数中调用一个函数时,函数名后面括号中的参数称为“实际参数”(简称“实参”),实参可以时常量、变量或表达式
		嵌套调用
			在调用函数时,可以在一个函数中调用另一个函数,这就是函数的嵌套调用
		递归调用
			所谓的递归就是函数内部调用自身的过程,需要注意的是,递归必须要求有结束条件,不然就会陷入无限递归的状态,永远无法结束调用
		案例-斐波那契数列
	外部函数与内部函数
		外部函数
			在C语言中,可以被其他源文件调用的函数称为外部函数,在调用外部函数之前需要在当前源文件中定义外部函数
			定义外部函数的方式是在函数的返回值类型前面添加extern关键字
				eg:extern int add(int x,int y)
			为简化编程,C语言中允许在定义外部函数时省略关键字extern
			扩展内容:
				函数的“定义”和“声明”并不是一个意思。“定义”时指对函数功能的确立,函数定义时一个完整的、独立的函数单位。
				而函数的声明则时把函数名、参数列表、返回值类型通知编译系统,以便在调用时系统按照此声明进行对照检查
		内部函数
			只在它的定义文件中有效,该类函数称为内部函数
			语法格式:
				需要在函数的返回值类型前面添加static关键字(又称为静态函数)
				static 返回值 函数名()
				{
					代码块
				}
	局部变量与全局变量
		局部变量
			局部变量就是在函数内部声明的变量,它只在本函数内有效,也就是说,只能在本函数内使用它
		全局变量
			在所有函数外部定义的变量称为全局变量(包括main()函数)它不属于哪一个函数,
			二十属于源程序。因此全局变量可以为程序中的所有函数所共用
		变量的作用域
			变量需要在它的作用范围内才可以被使用,这个作用范围称为变量的作用域
	进阶案例-汉诺塔
*/
//相关练习
/*
1、编写函数 int  mymod ( int a, int b),实现的功能是:用以求a被b除之后的余数。
编写主函数,从键盘上输入两个整数,调用上面定义的函数,求得两个数相除之后的余数,并输出。
*/
#include<stdio.h>
int mymod(int a,int b)
{
	int c=a%b;
	return c;
} 
int main()
{
    int x,y,z;
    printf("请输入两个整数:");
	scanf("%d%d",&x,&y);
	z=mymod(x,y);
	printf("两数相除后的余数是:%d\n",z);
	return 0;
}
/*
2、写一个函数void  shuchu(int n),接受一个整数参数n,输出n 个HelloWorld
编写主函数中,从键盘上输入一个整数,调用这个函数输出相应的HelloWorld。
*/
#include<stdio.h>
void shuchu(int n)
{
	int i;
	for(i=1;i<=n;i++)
	printf("HelloWorld\n");
}
int main()
{
	printf("请输入一个整数:");
	int a;
	scanf("%d",&a);
	shuchu(a);
	return 0; 
}
/*
3、输入三角形的三边a, b, c,调用方法判断能否构成三角形. 若能,计算周长。若不能,显示提示信息。
请独立编写一个方法,方法的功能是:接收三个整形参数,判断能否构成三角形,并返回1或0。
*/
#include<stdio.h>
int san(int a,int b,int c)
{
	if(a+b>c&&c>a&&c>b)
    return 1;
	else
	return 0;
}
int main()
{
	printf("请输入三个整数:");
	int x,y,z;
	scanf("%d%d%d",&x,&y,&z);
	san(x,y,z);
	if(san(x,y,z))
    printf("%d,%d,%d能构成三角形,它的周长是%d\n",x,y,z,x+y+z);
	else
	printf("%d,%d,%d不能构成三角形\n",x,y,z);
	return 0;
}
/*
进阶案例-汉诺塔
*/
#include<stdio.h>
int getNum(int n)
{
	if(n==1)
	{
		return 1;
	} 
	else
	{
		return 2*getNum(n-1)+1;
	} 

}
int main()
{
	int n=10;
	int num=getNum(n);
	printf("汉诺塔中%d片圆盘共需移动%d次\n",n,num);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值