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;
}