1.C语言中不允许函数的嵌套定义,但可以使用函数的嵌套调用。

例1:输入4个整数,找出其中最大的数。

 #include <stdio.h>
#include <stdlib.h>
int max1(int a,int b)
{
if(a>=b)
return a;
else
return b;
}
int max2(int a,int b,int c,int d)
{
int m;
m=max1(a,b);
m=max1(m,c);
m=max1(m,d);
return m;
}
int main()
{
int a,b,c,d,max;
printf("请输入4个数字:\n");
scanf("%d %d %d %d",&a,&b,&c,&d);
max=max2(a,b,c,d);
printf("The max is %d",max);
return ;
}

其中红色部分语句可更改为:m=max1(max1(max1(a,b),c),d);//更加精炼

2.函数的递归调用

例2:5个学生坐在一起,上一个学生比下一个学生分别小2岁,已知第1个学生今年10岁,那么求第5个学生的年龄。

 int age(int n)
{
int c;
if(n==)
c=;
else
c=age(n-1)+2;
return c;
}
int main()
{
printf("第5个学生的年龄是%d",age());
return ;
}

例3:用递归方法求n!。

 int fac(int n)
{
int f;
if(n<)
{
printf("n<0,输入错误!");
}else if(n==||n==){
f=;
}else{
f=fac(n-)*n;
}
return f;
}
int main()
{
int n,y;
printf("请输入要求阶乘的整数:");
scanf("%d",&n);
y=fac(n);
printf("%d!=%d\n",n,y);
return ;
}

例4:汉诺塔问题。

 void move(char x,char y)
{
printf("%c->%c\n",x,y);
}
void hanoi(int n,char one,char two,char three)
{
if(n==)
move(one,three);
else{
hanoi(n-,one,three,two);
move(one,three);
hanoi(n-,two,one,three);
}
}
int main()
{
int m;
printf("请输入块数:");
scanf("%d",&m);
printf("需要移动%d块。\n",m);
hanoi(m,'A','B','C');
}

3.数组作为函数参数

例5:输入10个数,要求输出其中值最大的元素和该数是第几个数。

 int max(int x,int y)
{
return(x>y?x:y);
}
int main()
{
int a[],m,n,i;
printf("请输入10个数字:\n");
for(i=;i<;i++)
{
scanf("%d",&a[i]);
}
printf("\n");
for(i=,m=a[],n=;i<;i++)
{
if(max(m,a[i])>m)
{
m=max(m,a[i]);
n=i;
}
}
printf("最大的数是%d,它是第%d个数字。\n",m,n+);
}

例6:有两个小组,分别有5人和7人,调用average函数,分别求这两个组的学生的平均成绩。

 float average(float array[],int n)
{
int i;
float aver,sum=array[];
for(i=;i<n;i++)
{
sum=sum+array[i];
}
aver=sum/n;
return aver;
}
int main()
{
float score1[]={,,97.5,84.5,};
float score2[]={78.5,,97.5,84.5,,,94.5};
printf("第1个小组的成绩是:%6.2f\n",average(score1,5));
printf("第2个小组的成绩是:%6.2f\n",average(score2,7));
return ;
}

4.内部函数和外部函数

内部函数只能被本文件中其他函数所调用;static 类型名 函数名(参数列表);

外部函数可以在其他文件中被调用:extern 类型名 函数名(参数列表);

C语言中规定,若省略extern则默认为外部函数。

C语言数组和函数实例练习(二)的更多相关文章

  1. C语言数组和函数实例练习(一)

    C语言的数组和函数部分的知识,在语法上和Java语法是有所相似的,这里只通过实例总结一些自己感觉需要理解的部分知识. 1.数组 数组中的元素具有相同的数据类型:数组一旦创建,不能被改变:数组中元素在内 ...

  2. GO语言数组和切片实例详解

    本文实例讲述了GO语言数组和切片的用法.分享给大家供大家参考.具体分析如下: 一.数组 与其他大多数语言类似,Go语言的数组也是一个元素类型相同的定长的序列. (1)数组的创建. 数组有3种创建方式: ...

  3. C语言 数组做函数参数退化为指针的技术推演

    //数组做函数参数退化为指针的技术推演 #include<stdio.h> #include<stdlib.h> #include<string.h> //一维数组 ...

  4. php常用数组array函数实例总结【赋值,拆分,合并,计算,添加,删除,查询,判断,排序】

    本文实例总结了php常用数组array函数.分享给大家供大家参考,具体如下: array_combine 功能:用一个数组的值作为新数组的键名,另一个数组的值作为新数组的值 案例: <?php ...

  5. ​C语言数组作为函数参数

    数组可以作为函数的参数使用,进行数据传送. 数组用作函数参数有两种形式,一种是把数组元素(下标变量)作为实参使用:另一种是把数组名作为函数的形参和实参使用. 数组元素作函数实参 数组元素就是下标变量, ...

  6. C语言 数组做函数参数不传数组个数的遍历方法

    //数组做函数参数不传数组个数的遍历方法 #include<stdio.h> #include<stdlib.h> #include<string.h> void ...

  7. R语言数组array函数

    数组是一个可以在两个以上的维度存储数据的R数据对象.例如 - 如果创建尺寸(2,3,4)的数组,那么创建4个矩形矩阵每2行3列.数组只能存储数据类型. 使用 array()函数创建数组.它需要向量作为 ...

  8. C语言数组篇(四)二维数组

      二维数组声明: ][] ={{,,},{,,}; //两行 三列         二维数组在声明的时候可以不写行,但一定要写列 ] = {{,},{,,},{}}; //未声明的地方自动补零 二维 ...

  9. C语言中如何将二维数组作为函数的参数传递

    今天写程序的时候要用到二维数组作参数传给一个函数,我发现将二维数组作参数进行传递还不是想象得那么简单里,但是最后我也解决了遇到的问题,所以这篇文章主要介绍如何处理二维数组当作参数传递的情况,希望大家不 ...

随机推荐

  1. python实践

    https://www.cnblogs.com/smallSevens/p/10016045.html --二手房交易记录 https://www.cnblogs.com/xiangyuecn/p/1 ...

  2. A - Supermarket

    Problem description We often go to supermarkets to buy some fruits or vegetables, and on the tag the ...

  3. 禁止tomcat扫描jar包的tld文件

    禁止tomcat扫描jar包的tld文件tomcat/conf/logging.properties 取消注释org.apache.jasper.compiler.TldLocationsCache. ...

  4. 5.7 Maven通俗讲解

    好的东西只适合ctry+c+v 原文地址:https://blog.csdn.net/shuzhe66/article/details/45009175 Maven通俗讲解 也许是本人不才,初识Mav ...

  5. SQLServer2008 将“单个用户”改为“多用户”

    一开始是要想要分离掉数据库,然后将其删除 不知道为什么一直分离不了,试了很多次,又尝试直接删除 结果数据库突然显示成了“单个用户” 尝试查看其属性,或者“新建查询”也都报错,提示已经有其他用户建立了连 ...

  6. 推荐系统:MovivLens20M数据集解析

    MovieLens 是历史最悠久的推荐系统.它由美国 Minnesota 大学计算机科学与工程学院的 GroupLens 项目组创办,是一个非商业性质的.以研究为目的的实验性站点.MovieLens ...

  7. .NET Core & EntityFrameworkCore

    前言 .NET Core 相比于 .NET Fromework 有跨平台.轻量化且开源的优势. 在使用 EntityFrameworkCore 的时候也遇到了很多问题,至于网络上的教程嘛...大部分都 ...

  8. iproute2常用命令

    #常用命令 ip link show #显示链路 ip addr show #显示地址(或ifconfig) ip route show #显示路由(route -n) ip neigh show # ...

  9. 我的最爱Lambda演算——开篇

    (在这个帖子的原始版本里,我试图用一个JavaScript工具来生成MathML.但不太顺利:有几个浏览器没法正确的渲染,在RSS feed里也显示的不好.所以我只好从头开始,用简单的文本格式重新写一 ...

  10. Appium Desired Capabilities信息配置

    编写APPium脚本,必须要配置Desired Capabilities信息 Desired Capabilities 在启动 session 的时候是必须提供的. Desired Capabilit ...