C语言03 函数

1.数值传递,传递的是值,内存空间不同,不会影响实参。
当形参是数组是,传递的是内存空间的地址,实参会改变

2.函数的三要素:函数名,参数,返回值
补充:先定义后使用,函数定义时形参要有类型
3.空函数:占坑用
4.形参存放在栈空间,只有函数被调用时才为形式参数申请内存,调用结束,内存又被系统释放
5.三步运算符

z=x>y?x:y;	如果x>y,z=x否则z=y

6.函数的嵌套和递归
递归典例:n的阶乘
注意越界问题,可以加判断进行优化

#include<stdio.h>
#include<stdlib.h>
int get(int num){
	int ret;
If(num>=17){
printf(“越界”);
exit(-1)}
	if(num==1){
		ret=1;
	}else{
		ret=num*get(num-1);
	}
	return ret;
}
int main(){
	int num;
	int ret;
	puts("input num:");
	scanf("%d",&num);
	ret=get(num);
	printf("num=%d	ret=%d",num,ret);
	return 0;
}

7.形参中不存在数组的概念,即使中括号约定了数组的大小也无效
传递的是一个地址,是数组的首地址。

int main(){
Int array[3]={1,2,3};
//下面两句话代表的都是数组首地址
printArr(&array[0],len);
printArr(array,len);
return 0;
}

8.两个班的人求平均分

#include<stdio.h>

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

void printArry(int arry[],int len){
	int i;
	printf("总人数%d\n",len);
	for(i=0;i<len;i++){
		printf("%d ",arry[i]);
	}
	puts("\ndone\n");
}

float getAverage(int arry[],int len){
	float average;
	int sum=0;
	int i;
	printf("总人数%d\n",len);
	for(i=0;i<len;i++){
		sum=sum+arry[i];
	}
	average=(float)sum/len;
	return average;
}
int main(){
	int classOne[5];
	int classTwo[10];
	float averOfClassOne;
	float averOfClassTwo;
	
	int lenClassOne=sizeof(classOne)/sizeof(classOne[0]);
	int lenClassTwo=sizeof(classTwo)/sizeof(classTwo[0]);
	
	initArry(classOne,lenClassOne);
	initArry(classTwo,lenClassTwo);
	
	printArry(classOne,lenClassOne);
	printArry(classTwo,lenClassTwo);
	
	averOfClassOne=getAverage(classOne,lenClassOne);
	averOfClassTwo=getAverage(classTwo,lenClassTwo);
	
	printf("ave1=%f\n",averOfClassOne);
	printf("ave2=%f\n",averOfClassTwo);
	return 0;
}

9.初始化3*4的矩阵,并找出最大值

#include<stdio.h>

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

void initArryDouble(int arr[][4],int hang,int lie){
	int i;
	int j;
	for(i=0;i<hang;i++){
		for(j=0;j<lie;j++){
			printf("%d行%d列 ",i+1,j+1);
			scanf("%d",&arr[i][j]);
		}
	}
}

int getMaxDataFromArryDouble(int arr[][4],int hang,int lie){
	int i;
	int j;
	int max=arr[0][0];
	for(i=0;i<hang;i++){
		for(j=0;j<lie;j++){
			if(max<arr[i][j]){
				max=arr[i][j];
			}
		}
	}
	return max;
}
int main(){
	
	int arr[3][4];
	int max;
	
	initArryDouble(arr,3,4);
	printArryDouble(arr,3,4);
	
	max=getMaxDataFromArryDouble(arr,3,4);
	printf("max=%d",max);
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

若木空灵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值