C语言第五章之函数

本文详细介绍了函数在编程中的重要性,包括避免代码冗长、模块化设计、函数定义与使用、参数传递、递归、数组作为参数、局部与全局变量以及基础排序算法(冒泡和选择排序)的封装。通过实例演示了如何在C语言中实现这些概念。
摘要由CSDN通过智能技术生成

一、为什么要用函数

1、避免代码冗长

2、模块化的设计思路

3、按功能划分,每个函数代表一个功能

二、函数要先定义再使用

1、函数三要素

函数名,参数列表,返回值

2、函数的封装和调用

3、形参与实参区别

传递参数,传递的是值,形参与实参值相同但是内存地址不同

三、函数调用的条件:

1、函数已被定义

2、调用库函数

3、函数的声明

四,函数的嵌套

#include<stdio.h>

int getBiggerData(int x,int y)
{
	int bigger;
	bigger=x>y?x:y;
	
	return bigger;
	
}

int getBiggestData(int a,int b,int c,int d)
{
	int max;
	max=getBiggerData(a,b);
	max=getBiggerData(max,c);
	max=getBiggerData(max,d);
	
	return max;
}

int main()
{
	int a,b,c,d;
	int tbo;
	puts("input four nums");
	scanf("%d%d%d%d",&a,&b,&c,&d);
	tbo=getBiggestData(a,b,c,d);
	printf("the biggest is %d\n",tbo);
	
	return 0;
}

五、函数的递归

求阶乘

#include<stdio.h>
int getJieCheng(int num)
{
	int result;
	if(num==1)
	{
		result=1;
	}
	else
	{
		result=getJieCheng(num-1)*num;
	}
	return result;
}
int main()
{
	int num,ret;
	puts("请输入");
	
	scanf("%d",&num);
	
	ret=getJieCheng(num);
	
	printf("%d阶乘是:%d",num,ret);
	return 0;
}

六,数组作为函数的参数

1、传递数组中的某个元素,意义不大

2、数组名当做函数实际参数

void changeData(int data)
{
	data=data+100;
	printf("dataInFunc=%d\n",data);
}
int main()
{
	int data=1;
	changeData(data);
	printf("data=%d\n",data);
}

void changeData(int data[])//操作一定是相同的内存空间,数组名当做实参,到底传了什么(地址)
{
	data[0]=data[0]+100;
	printf("dataInFunc=%d\n",data[0]);
}
int main()
{
	int data[2]={1,2};
	changeData(data);
	printf("data=%d\n",data[0]);
}

3、有两个班,人数不同,求平均分

void initArry(int arry[],int len)
{
	int i;
	for(i=0;i<len;i++)
	{
		printf("请输入第%d个学生的成绩:\n",i+1);
		scanf("%d",&arry[i]);
	}
	puts("\ndone\n");
}

void printArry(int arry[],int len)
{
	int i;
	printf("总人数%d个\n",len);
	for(i=0;i<len;i++)
	{
		printf("第%d个学生的成绩:%d\n",i,arr[i]);
	}
	puts("\ndone\n");
}

float getAverage(int arry[],int len)
{
	int i;
	float aver=0.0;
	int sum=0;
	
	printf("总人数%d个\n",len);
	for(i=0;i<len;i++)
	{
		//printf("%d ",arry[i]);
		sum=sum+arry[i];
	}
	aver=(float)sum/len;
	return aver;
}

int main()
{
	int classOne[5];
	int classTwo[10];
	float averOfOne;
	float averOfTwo;
	
	
	int lenOfClassOne=sizeof(classOne)/sizeof(classOne[0]);
	int lenOfClassTwo=sizeof(classTwo)/sizeof(classTwo[0]);
	initArry(classOne,lenOfClassOne);
	initArry(classTwo,lenOfClassTwo);
	
	printArry(classOne,lenOfClassOne);
	printArry(classTwo,lenOfClassTwo);
	averOfOne=getAverage(classOne,lenOfClassOne);
	averOfTwo=getAverage(classTwo,lenOfClassTwo);
	
	printf("一班的平均分:%.2f\n",averOfOne);
	printf("二班的平均分:%.2f\n",averOfTwo);
	
	return 0;
}

七、二维数组和函数

二维数组求最大值

void printArryDouble(int arr[][4],int ihang,int ilie)
{
	int i,j;
	for(i=0;i<ihang;i++)
	{
		for(j=0;j<ilie;j++)
		{
			printf("%d ",arr[i][j]);
		}
		putchar('\n');

	}
}
void initArryDouble(int arr[][4],int ihang,int ilie)
{
	int i,j;
	for(i=0;i<ihang;i++)
	{
		for(j=0;j<ilie;j++)
		{
			printf("请输入第%d行,第%d列的数据",i+1,j+1);
			scanf("%d",&arr[i][j]);
		}
		putchar('\n');

	}
}
int getMaxDataFromArrayDouble(int arr[][4],int ihang,int ilie)
{
	int i,j,max;
	max=arr[0][0];
	for(i=0;i<ihang;i++)
	{
		for(j=0;j<ilie;j++)
		{
			if(max<arr[i][j])
			{
				max=arr[i][j];
			}
		}
		putchar('\n');

	}
	return max;
}
int main()
{
	int arr[3][4];
	int max;

	initArryDouble(arr,3,4);
	printArryDouble(arr,3,4);
	max=getMaxDataFromArrayDouble(arr,3,4);
	printf("二维数组中最大的数是:%d\n",max);
	
	return 0;
}

八、局部变量和全局变量


int max,min;

float getResult(int arr[],int len)
{
	int i;
	int sum=0;
	max=min=arr[0];
	for(i=0;i<len;i++)
	{
		if(max<arr[i])
		{
			max=arr[i];
		}
		if(min>arr[i])
		{
			min=arr[i];
		}
		sum+=arr[i];
	}
		return (float)sum/len;
}
	

int main()
{
	int scores[]={66,78,98,56,34,27,54,23,44,66};
	float aver;
	
	aver=getResult(scores,sizeof(scores)/sizeof(scores[0]));
	printf("班级的最高分是%d\n班级的最低分是%d\n平均分是%.2f\n",max,min,aver);
	return 0;
}

九、课后作业

1、要求输入10个数,找出最大数以及最大数的下标

#include<stdio.h>

int max;
int count;

void getMax(int arr[])
{
	max=arr[0];
	//count=0;
	for(int i=0;i<10;i++)
	{
		if(max<arr[i])
		{
			max=arr[i];
			count=i;
		}
	}
}

int main()
{

	int arr[10];
	printf("请输入十个数:\n");
	for(int i=0;i<10;i++)
	{
		scanf("%d",&arr[i]);
	}
	getMax(arr);
	printf("最大值为%d,其下标为%d",max,count);
	
	return 0;
}

2、封装冒泡排序的函数

#include<stdio.h>
int len;
int x;
//冒泡排序
void sort(int arr[x])
{
	int i;
	int j;
	int temp;
	for(i=0;i<len-1;i++)
	{
		for(j=0;j<len-i-1;j++)
		{
			if(arr[j]>arr[j+1])//<降序,>升序
			{
				temp=arr[j];
				arr[j]=arr[j+1];
				arr[j+1]=temp;
			}
		}
	}
}

int main()
{

	//int x;
	printf("几个数?");
	scanf("%d",&x);
	int arr[x];
	printf("请输入%d个数:\n",x);
	for(int i=0;i<x;i++)
	{
		scanf("%d",&arr[i]);
	}
	len=sizeof(arr)/sizeof(arr[0]);
	
	sort(arr);
	
	printf("排序后的结果为:\n");
	for(int i=0;i<len;i++)
	{
		printf("%d  ",arr[i]);
	}
	return 0;
}

3、封装选择排序的函数

#include<stdio.h>
int len;
int x;
//简单选择排序
void sort(int arr[x])
{
	int i;
	int j;
	int temp;
	for(i=0;i<len-1;i++)
	{
		for(j=0;j<len-i-1;j++)
		{
			if(arr[i]>arr[j])//<降序,>升序
			{
				temp=arr[i];
				arr[i]=arr[j];
				arr[j]=temp;
			}
		}
	}
}

int main()
{

	//int x;
	printf("几个数?");
	scanf("%d",&x);
	int arr[x];
	printf("请输入%d个数:\n",x);
	for(int i=0;i<x;i++)
	{
		scanf("%d",&arr[i]);
	}
	len=sizeof(arr)/sizeof(arr[0]);
	
	sort(arr);
	
	printf("排序后的结果为:\n");
	for(int i=0;i<len;i++)
	{
		printf("%d  ",arr[i]);
	}
	return 0;
}

  • 16
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值