2. C精华——函数
迪丽瓦拉
2025-05-30 06:52:14
0

函数

  • 函数的作用
  • 无参函数、有参函数携带返回值
  • 函数递归=>阶乘
  • 函数传参:一维数组
    • 函数参数列表中不存在形参数组
    • 函数传参的秘密
  • 数组实战之计算两个班级的平均分
  • 函数传参:二维数组

函数的作用

  • 避免代码冗长
  • 模块化的设计思路
  • 按功能划分

无参函数、有参函数携带返回值

补充知识点
1.实际参数/形式参数的区别
2.形参的生命周期:栈空间;函数被调用申请内存空间,调用结束内存释放
3.三目运算符的使用

#include 
void Welcome(){printf("欢迎回家!\n");
} int getMax(int data1,int data2) {	// data1,data2形式参数return data1>data2?data1:data2;
} int main() {int a1,a2;// 调用函数名Welcome();printf("请输入第一个数:");scanf("%d",&a1);printf("请输入第二个数:");scanf("%d",&a2);// 调用有参函数、携带返回值 int ret = getMax(a1,a2);	// a1,a2实际参数printf("max = %d\n",ret);return 0;
} 

函数递归=>阶乘

#include 
int getSum(int data){if(data == 1)return 1;elsereturn getSum(data-1) * data;
}int main() {int n;printf("计算n的阶乘:");scanf("%d",&n);int ret = getSum(n);printf("ret = %d",ret);return 0;
} 

函数传参:一维数组

函数参数列表中不存在形参数组

#include 
void printArr(int arr[],int size){	int i;// 无论数组存放多少数据,终究是8的原因:函数参数列表中不存在形参数组,8表示的地址!!!printf("printArr:arr数组的大小是%d\n",sizeof(arr));for(i=0;iprintf("%d ",arr[i]); } putchar('\n');
}int main() {int a[] = {1,2,3,4,5};int len = sizeof(a) / sizeof(a[0]);printf("main:a数组的大小是%d\n",sizeof(a));printArr(a,len);return 0;
}

函数传参的秘密

两段程序看似类似,但实际传参有很大的不同
前者程序传参方式:main函数中的data与func函数中的data不是同一块内存空间。func函数中的data生命周期:仅限该函数
后者程序传参方法:main函数中的data与func函数中的data是同一块内存空间。他们会同时发生变化

#include 
void func(int data){data+=100;printf("func函数中data=%d\n",data);
}int main() {int data=10;func(data);printf("main函数中data=%d",data);return 0;
} 
#include 
void func(int data[]){data[0]+=100;printf("func函数中data=%d\n",data[0]);
}int main() {int data[]={10,20};fun1(data);printf("main函数中data=%d",data[0]);return 0;
} 

数组实战之计算两个班级的平均分

#include 
void inputScore(float score[],int len){int i;for(i=0;iprintf("请输入%d位的学生成绩:",i+1);scanf("%f",&score[i]);	}
}void printScore(float score[],int len){int i;for(i=0;iprintf("%.2f ",score[i]);	}
}float averageScore(float score[],int len){float sum = 0;int i;for(i=0;isum+=score[i];	}return sum/len;
}int main() {float ret; float classOne[5];float classTwo[3];int len1 = sizeof(classOne) / sizeof(classOne[0]);int len2 = sizeof(classTwo) / sizeof(classTwo[0]);printf("-----录入一班成绩-------\n");inputScore(classOne,len1);printf("-----录入二班成绩-------\n");inputScore(classTwo,len2);printf("\n\n-----查看一班成绩-------\n");printScore(classOne,len1);printf("\n\n-----查看二班成绩-------\n");printScore(classTwo,len2);printf("\n\n-----一班平均成绩-------\n");ret = averageScore(classOne,len1);printf("一班平均成绩:%.2f\n",ret);printf("\n\n-----二班平均成绩-------\n");ret = averageScore(classTwo,len2);printf("二班平均成绩:%.2f\n",ret);return 0;
} 

函数传参:二维数组

函数传参中,参数为多维数组;除第一个维度外,所有的维度都有边界

#include 
// a是多维数组,除第一个维度外,所有的维度都有边界 
void initArr(int a[][3],int hang,int lie) {int i,j;for(i=0; ifor(j=0; j<3; j++) {printf("第%d行,第%d列的数据:",i+1,j+1);scanf("%d",&a[i][j]); }}
}void printArr(int a[][3],int hang,int lie) {int i,j;printf("\n-------------------\n");for(i=0; ifor(j=0; jprintf("%d ",a[i][j]); }putchar('\n'); }
}int getMax(int a[][3],int hang,int lie) {int i,j;int max = a[0][0];printf("\n");for(i=0; ifor(j=0; jif(maxint arr[4][3];initArr(arr,4,3);printArr(arr,4,3);int max = getMax(arr,4,3);printf("max = %d\n",max);return 0;
}

相关内容