C语言数组和函数实例练习(二)
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语言数组和函数实例练习(二)的更多相关文章
- C语言数组和函数实例练习(一)
C语言的数组和函数部分的知识,在语法上和Java语法是有所相似的,这里只通过实例总结一些自己感觉需要理解的部分知识. 1.数组 数组中的元素具有相同的数据类型:数组一旦创建,不能被改变:数组中元素在内 ...
- GO语言数组和切片实例详解
本文实例讲述了GO语言数组和切片的用法.分享给大家供大家参考.具体分析如下: 一.数组 与其他大多数语言类似,Go语言的数组也是一个元素类型相同的定长的序列. (1)数组的创建. 数组有3种创建方式: ...
- C语言 数组做函数参数退化为指针的技术推演
//数组做函数参数退化为指针的技术推演 #include<stdio.h> #include<stdlib.h> #include<string.h> //一维数组 ...
- php常用数组array函数实例总结【赋值,拆分,合并,计算,添加,删除,查询,判断,排序】
本文实例总结了php常用数组array函数.分享给大家供大家参考,具体如下: array_combine 功能:用一个数组的值作为新数组的键名,另一个数组的值作为新数组的值 案例: <?php ...
- C语言数组作为函数参数
数组可以作为函数的参数使用,进行数据传送. 数组用作函数参数有两种形式,一种是把数组元素(下标变量)作为实参使用:另一种是把数组名作为函数的形参和实参使用. 数组元素作函数实参 数组元素就是下标变量, ...
- C语言 数组做函数参数不传数组个数的遍历方法
//数组做函数参数不传数组个数的遍历方法 #include<stdio.h> #include<stdlib.h> #include<string.h> void ...
- R语言数组array函数
数组是一个可以在两个以上的维度存储数据的R数据对象.例如 - 如果创建尺寸(2,3,4)的数组,那么创建4个矩形矩阵每2行3列.数组只能存储数据类型. 使用 array()函数创建数组.它需要向量作为 ...
- C语言数组篇(四)二维数组
二维数组声明: ][] ={{,,},{,,}; //两行 三列 二维数组在声明的时候可以不写行,但一定要写列 ] = {{,},{,,},{}}; //未声明的地方自动补零 二维 ...
- C语言中如何将二维数组作为函数的参数传递
今天写程序的时候要用到二维数组作参数传给一个函数,我发现将二维数组作参数进行传递还不是想象得那么简单里,但是最后我也解决了遇到的问题,所以这篇文章主要介绍如何处理二维数组当作参数传递的情况,希望大家不 ...
随机推荐
- APP加固反调试(Anti-debugging)技术点汇总
0x00 时间相关反调试 通过计算某部分代码的执行时间差来判断是否被调试,在Linux内核下可以通过time.gettimeofday,或者直接通过sys call来获取当前时间.另外,还可以通过自定 ...
- [DP专题]悬线法
参考:https://blog.csdn.net/twtsa/article/details/8120269 先给出题目来源:(洛谷) 1.p1387 最大正方形 2.P1169 棋盘制作 3.p27 ...
- Java 开源博客 Solo 1.2.0 发布 - 一键启动
Solo 1.2.0 正式发布了,感谢一直以来关注 B3log 开源的朋友! 在这个版本中,我们引入了一个新的特性 -- 独立模式: 不需要安装数据库.Servlet 容器 只需要安装好 Java 环 ...
- Verification之PSL之intro
1 PSL - Property specification language 1.1 Property - Characteristics of the designs/verification e ...
- Java_Web之分层架构
当我们把业务处理的代码与JSP代码混在一起,不易于阅读,不易于代码维护,这就需要分层. 分层模式 1.分层模式是最常见的一种架构模式 2.分层模式是很多架构模式的基础 分层 将解决方案的组件分隔到不同 ...
- python3设置打开文件的编码
f = open(file_path,'r',encoding='utf8') 用起来很方便,不需要先读取再转码了.
- C#访问Win 32的一些尝试
使用C#调用Win 32 Api大部分情况下基本只涉及到参数类型的转变,但在遇到Win 32 Api返回LPVOID *lpBuff 时会遇到一些解析遍历难题.lpBuff为二维指针,*lpBuff是 ...
- 基于日志实现ssh服务防护脚本
grep -n "Failed password" secure | sed -nr 's/.*from(.*)port.*/\1/gp' | sort -n |uniq -c|s ...
- BZOJ 1108: [POI2007]天然气管道Gaz 性质分析_小结论_巧妙
Description Mary试图控制成都的天然气市场.专家已经标示出了最好的天然气井和中转站在成都的地图.现在需要将中转 站和天然气井连接起来.每个中转站必须被连接到正好一个钻油井,反之亦然. M ...
- Linux学习笔记之1——文件和目录管理(硬连接和软连接)(连结档,相当于快捷方式)
在这节将要学习linux的连接档,在之前用"ls -l" 查看文件属性的命令时, 其中第二个属性是连接数.那么这个连接数是干什么的?这就要理解inode. 先说一下文件是怎么存储的 ...