函数的嵌套

编程案例:输入4个数找出最大的

#include <stdio.h>int getMaxDataFromTwo(int x,int y)
{int bigger;bigger = x>y ? x : y;return bigger;
}
int getMaxDataFromFour(int a,int b,int c,int d)
{int Max;Max = getMaxDataFromTwo(a,b);Max = getMaxDataFromTwo(Max,c);Max = getMaxDataFromTwo(Max,d);return Max;
}
int main()
{int data1;int data2;int data3;int data4;int theBiggestOne;puts("请输入4个数");scanf("%d%d%d%d",&data1,&data2,&data3,&data4);theBiggestOne = getMaxDataFromFour(data1,data2,data3,data4);printf("最大的数是:%d\n",theBiggestOne);return 0;}

函数的递归

用的少

例:求五个学生的年龄,第五个比第四个大两岁,第四个比第三个大两岁依次类推。

#include <stdio.h>int getAge(int renshu)
{int age;if(renshu == 1){age = 10;}else{age = getAge(renshu - 1) + 2;}return age;
}int main()
{int age;int num;puts("你想要知道第几个学生的年龄");scanf("%d",&num);age = getAge(num);printf("第%d个学生的年龄是%d\n",num,age);return 0;}

例子2:用递归法求n!

#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;int ret;puts("请输入要求的阶乘数:");scanf("%d",&num);ret = getJieCheng(num);printf("%d的阶乘是:%d\n",num,ret);return 0;}

数组作为函数的参数

传递数组中的某一个元素——意义不大

数组名当作函数实际参数:

#include <stdio.h>void printArr(int arr[3],int len)  //形参中不存在数组的概念,即使括号中约定了数组的大小也不行,传递的只是数组的首地址
{int i;//printf("printArr:arr的大小是:%d\n",sizeof(arr));   //在os中用8个字节来表示一个地址for(i=0;i<len;i++){printf("%d ",arr[i]);}putchar('\n');
}int main()
{int len;int arr[7] = {0,1,2,3,4,5,6};len = sizeof(arr)/sizeof(arr[0]);printf("main:arr的大小是:%d\n",sizeof(arr));printArr(arr,len);return 0;}

有意思的问题与启发:

#include <stdio.h>void changeData(int data)  //数值传递,操作的是不同的内存空间
{data = 100 + data;printf("address: %p,data = %d\n",&data,data);
}int main()
{int data = 10;changeData(data);printf("address: %p,data = %d\n",&data,data);  //地址不一样,修改的是形参里的data,而main函数里的data不变return 0;}
#include <stdio.h>void changeData(int data[])  //操作的一定是相同的内存空间,数组名当作实际参数传的是地址
{data[0] = data[0] + 100;printf("dataInFunc = %d\n",data[0]);
}int main()
{int data[2] = {10,20};changeData(data);printf("data = %d\n",data[0]);return 0;}

编程案例:

两个班同学,分别有十个人和五个人,分别求这两个班的平均分。

#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 printfArry(int arry[],int len)
{int i;printf("总人数%d\n",len);for(i=0;i<len;i++){printf("%d ",arry[i]);}puts("\n done\n");
}float getAverage(int arry[],int len)
{int i;float aver;int sum=0;for(i=0;i<len;i++){sum = sum + arry[i];}aver = (float)sum/len;return aver;
}int main()
{int classOne[5];int classTwo[10];float averOfClassOne;float averOfClassTwo;int lenOfClassOne = sizeof(classOne)/sizeof(classOne[0]);int lenOfClassTwo = sizeof(classTwo)/sizeof(classTwo[0]);initArry(classOne,lenOfClassOne);initArry(classTwo,lenOfClassTwo);printfArry(classOne,lenOfClassOne);printfArry(classTwo,lenOfClassTwo);averOfClassOne = getAverage(classOne,lenOfClassOne);averOfClassTwo = getAverage(classTwo,lenOfClassTwo);printf("一班的平均分:%f\n",averOfClassOne);printf("二班的平均分:%f\n",averOfClassTwo);return 0;}

二维数组做为函数的参数

形式参数怎么写

1.合法写法    int arr[2][3]  或者  int arr[][3]

因为二维数组是由若干个一维数组组成的,在内存中是按行存放的

所以在定义二维数组时必须指定列数

#include <stdio.h>void printarr(int arr[][3])
{int i;int j;for(i=0;i<2;i++){for(j=0;j<3;j++){printf("%d ",arr[i][j]);}putchar('\n');}
}int main()
{int arr[2][3] = {{1,2,3},{4,5,6}};printarr(arr);return 0;}

只关心两点:

数组数据类型;二维数组中有多少一维数组

练习:

有一个3*4数组,初始化并输出最大值

#include <stdio.h>void initArr(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列的数据\n",i+1,j+1);scanf("%d",&arr[i][j]);}}
}void printArr(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');}
}int getMax(int arr[][4],int hang,int lie)
{int i;int j;int max;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;initArr(arr,3,4);printArr(arr,3,4);max = getMax(arr,3,4);printf("二维数组中最大的值是%d\n",max);return 0;}

全局变量

例题:

班上有10个学生,封装一个函数,调用该函数后获得班上的平均分,最高分,最低分

#include <stdio.h>int max;
int 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[] = {56,35,94,95,25,82,64,48};float aver;aver = getResult(scores,sizeof(scores)/sizeof(scores[0]));printf("班级的最高分是:%d\n最低分是:%d\n平均分是:%.2f\n",max,min,aver);return 0;}

C语言学习笔记——函数的嵌套相关推荐

  1. C语言学习笔记--函数与指针

    1. 函数类型 (1)C 语言中的函数有自己特定的类型,这个类型由返回值.参数类型和参数个数共同决定.如 int add(int i,int j)的类型为 int(int,int). (2)C 语言中 ...

  2. C语言学习笔记--函数

    1. C 语言中的函数 (1)函数的由来: 程序 = 数据 + 算法→C 程序 = 数据 + 函数 (2)模块化程序设计 (3)C 语言中的模块 2. 面向过程的程序设计 (1)面向过程是一种以过程为 ...

  3. C语言学习笔记——函数

    1.函数的介绍 为完成某一功能的程序指令(语句)的集合,称为函数 在C语言中,函数分为: 自定义函数.系统函数 2.函数的定义 2.1函数的基本语法 返回类型 函数名(形参列表){执行语句...; / ...

  4. C语言学习笔记(8)函数

    C语言学习笔记(8)函数 函数 函数主要是用于将解决复杂的编程问题分解为数个可以分开进行解决的小问题,通过函数分装,最后在拼连在一起.有利于多人协作开发. 函数同样需要先声明后调用,声明符号为 voi ...

  5. c语言中void arrout,c语言学习笔记(数组、函数

    <c语言学习笔记(数组.函数>由会员分享,可在线阅读,更多相关<c语言学习笔记(数组.函数(53页珍藏版)>请在人人文库网上搜索. 1.数组2010-3-29 22:40一维数 ...

  6. c语言学习笔记【结构体02】结构体指针变量与结构体变量的函数参数,C语言学习笔记结构体02结构体指针变量与结构体变量的函数参数.docx...

    C 语言学习笔记[结构体02]结构体指针变量与结构体变量 的函数参数 C 语言学习笔记之结构体指针变量一提指针,那可 是 C 语言的核心了,有多少学子曾拜倒在指针的脚下.单纯的说指针,其实并不难,但是 ...

  7. r语言c函数怎么用,R语言学习笔记——C#中如何使用R语言setwd()函数

    在R语言编译器中,设置当前工作文件夹可以用setwd()函数. > setwd("e://桌面//") > setwd("e:\桌面\") > ...

  8. C语言学习笔记10-指针(动态内存分配malloc/calloc、realloc、释放free,可变数组实现;Tips:返回指针的函数使用本地变量有风险!;最后:函数指针)

    C语言:指针 1. 指针:保存地址的变量 *p (pointer) ,这种变量的值是内存的地址.   取地址符& 只用于获取变量(有地址的东西)的地址:scanf函数-取地址符   地址的大小 ...

  9. c语言注释语句执行吗,C语言学习笔记之C语言概念解析(附资料分享)每一个语句都必须以分号结尾但预处理命令函数头和花括号“}”之后不能加分号...

    [[怪兽爱C语言]C语言学习笔记之C语言概念解析(附资料分享)]https://toutiao.com/group/6582429294901854728/?iid=15906422033&a ...

最新文章

  1. android 多个url请求,[Android]Retrofit多base_url请求解决方案
  2. 【LeetCode从零单排】No.169 Majority Element(hashmap用法)
  3. 深入学习jQuery鼠标事件
  4. MySQL存储过程简介
  5. Qt之FTP实现--QFtp篇
  6. 【转】Snackbar和Toast的花式使用,这一篇就够了
  7. [OpenGL] Stencil Shadow Algorithm
  8. php获取元素位置,jquery如何获取当前元素的位置
  9. LinkedIn庄振运:从国家部委公务员到硅谷系统性能专家,创新是唯一主旋律
  10. 深度解析国内主流离线编程软件
  11. xcap 发包工具 使用帮助
  12. 报文交换与分组交换(详细图文)
  13. .pth.tar文件
  14. 浩哥的Linux学习笔记之touch命令
  15. iMeta | 南京医科大学孔祥清团队创建前瞻性多组学纵向原发高血压队列eHypertension...
  16. 新旧iPhone齐发力,苹果成最大赢家,中国手机靠小米挽回颜面
  17. SIP协议及其简单介绍
  18. MongoDB数据库设计中6条重要经验法则 Part 2
  19. oracle密码过期策略管理
  20. csgo跑图文件_[CSGO]Neko社区:跑图服务器简易使用指南

热门文章

  1. linux 建站命令,Linux 服务器建站新手教程(小白宝塔建站全流程)-不需要敲一行命令,...
  2. 解析java异常中的finally关键字
  3. Python绘图实例18:旋转正方形绘制
  4. Nacos 集群配置
  5. Hadoop随笔(二)
  6. 易观千帆 | 12月用户体验GX评测:国有行及股份行持续领跑,农信社用户体验关注提升
  7. opencv中的copyTo函数在opencv-Python中的实现
  8. 20150_0907_三角形各种心的计算公式_垂心_外心_重心_内心
  9. 地图web开发技术选型
  10. kubernetes基于node-problem-detector实现异常节点检测