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八 爬虫大坑之网页乱码

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

  2. Android Studio连接夜神模拟器

    运行-cmd,进入夜神模拟器安装目录,进入目录下的bin 执行Nox_adb.exe connect 127.0.0.1:62001命令,connect左右都有空格. 执行命令后就可以连接到夜神模拟器 ...

  3. dell inspiron 15 3000 装XP win7 等GHOST系统方法

    dell inspiron 装XP win7 等GHOST系统方法 . 开机按F2,进入BIOS .在 BIOS 的Boot菜单下,将Secure Boot 改为 Disabled . 将Boot L ...

  4. 安卓使用JNI-NDK

    详细配置,参考链接:http://www.jb51.net/softjc/115204.html 一  .为什么使用NDK 1.代码的保护.由于apk的java层代码很容易被反编译,而C/C++库反汇 ...

  5. 【sqli-labs】 less7 GET - Dump into outfile - String (导出文件GET字符型注入)

    使用此漏洞需要知道WEB程序的根路径并且MYSQL的secure-file-priv配置应为可写入该路径 添加单引号,发现错误被屏蔽 对应的SQL语句应为 ')) ... 字段还是3个 在数据库中执行 ...

  6. 如何将一个已有的项目托管到github或是码云上?git的配置

    场景一:已有的一个项目,要把它托管到Git上去,步骤和方法如下: 方法一: ①在工程的路径下 : git init 建一个裸仓库. ②远程仓库地址 :将本地的仓库和远程仓库关联 git remote ...

  7. style 使用lang = ‘scss’ 报错

    <style lang="scss" rel="stylesheet/scss" scoped> .export-wrapper{ } </s ...

  8. javeee 字节Buffered

    package Zy; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io. ...

  9. C#第十二节课

    数组 using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Th ...

  10. Windows10系统如何清除记录和关掉xbox录制

    在Windows的Xbox平台玩游戏时,总会发现以前玩过的许多游戏进度都保留着,麻烦的是白白的成就条让人感到相当的不爽,并且想删除还删不掉.某些当年一边玩一边录制的游戏,每当重新打开的时候都会弹出录制 ...