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. B - Magnets

    Problem description Mad scientist Mike entertains himself by arranging rows of dominoes. He doesn't ...

  2. Dotnet Core2.1 使用CodeFirst

    一.添加Mysql引用 二.添加连接字符串 三.配置startup.cs 三.初始化数据库 Add-Migration init Update-Database 四.数据迁移 user实体添加了pas ...

  3. 自学Python八 爬虫大坑之网页乱码

    Bug有时候破坏的你的兴致,阻挠了保持到现在的渴望.可是,自己又非常明白,它是一种激励,是注定要被你踩在脚下的垫脚石! python2.7中最头疼的可能莫过于编码问题了,尤其还是在window环境下, ...

  4. nvcc fatal : Unsupported gpu architecture 'compute_11'

    使用VS编译OpenCV编译源代码时候,对Cmake生成的工程文件编译,会出现 nvcc fatal : Unsupported gpu architecture 'compute_11'  问题.原 ...

  5. 安卓使用ImageView显示OpenCV-Mat

    Android 的Application-native调试暂时还只能进行主线程调试,在GDB里面,运行于子线程的OpenCv数据处理过程不能直接调试,OPenCV-Native函数    public ...

  6. printf 打印较长字符

  7. mysql 是如何保证在高并发的情况下autoincrement关键字修饰的列不会出现重复

    转载自 https://juejin.im/book/5bffcbc9f265da614b11b731/section/5c42cf94e51d45524861122d#heading-8 mysql ...

  8. rabbitmq和kafka的区别

    1.吞吐量kafka吞吐量更高: 1)Zero Copy机制,内核copy数据直接copy到网络设备,不必经过内核到用户再到内核的copy,减小了copy次数和上下文切换次数,大大提高了效率. 2)磁 ...

  9. 关于node对文件的读取

    设计: 通过终端git / cmd 获取用户输入路径,然后遍历路径下所有的文件,打印输出. 因为需要命令行交互,所以引入prompt库 (https://github.com/flatiron/pro ...

  10. HDU1087 - Super Jumping! Jumping! Jumping!【动态规划】

    zh成功的在他人的帮助下获得了与小姐姐约会的机会,同时也不用担心被非"川大"的女票发现了,可是如何选择和哪些小姐姐约会呢?zh希望自己可以循序渐进,同时希望挑战自己的极限,我们假定 ...