C语言程序,这个程序是如何运行的

#include<stdio.h>intfindmax(inta[],intn);voidmain(){inta[]={12,87,5,75,21,49,97,19,39... #include<stdio.h>
int findmax(int a[], int n);
void main()
{
int a[] = { 12,87,5,75,21,49,97,19,39,55 }, n, max;
n = sizeof(a) / sizeof(a[0]);/*求数组a中的元素个数*/
max = findmax(a, n);
printf("max=%d\n", max);
}
int findmax(int a[], int n)
{
int m;
if (n <= 1)
return a[0];
m = findmax(a, n - 1);
return a[n - 1] >= m ? a[n - 1] : m;/*将两个元素比较,得到最大者*/
}
/*程序的运行结果如下:
max=97
请按任意键继续. . .*/
程序是求数组a[ ]中最大的元素并输出,运行是正常的,但过程不懂如何运行,我是自学的c语言,书店买的书,说的我不能理解。
问题1,当程序调用函数后,语句if (n <= 1)里面的n此时应该是10,表达式条件为假,不执行语句;return a[0];。执行后面的:m = findmax(a, n - 1);这句执行过后,m的值为什么在监控中看到的是-858993460 ?此时n=9,按照我前面学过的知识不能理解这个值是什么?我的理解这句是赋值的意思,把右边的值赋值给m,因为之前n=10,所以m=findmax(a,9),可以这么理解吗?按照我这样的理解,此时m=a[12,87,5,75,21,49,97,19,39]。
问题2 当程序执行完m = findmax(a, n - 1);这句后,不是应该执行一次后面的return a[n - 1] >= m ? a[n - 1] : m;吗?,但监控中发现程序不会执行这句的,直接跳回if (n <= 1)再次判断,直到n=1后执行return a[0];过后才会执行return a[n - 1] >= m ? a[n - 1] : m;。这是为什么? c语言不是按顺序执行吗?我买的书本上是这么说的啊?我是自学,很多简单的问题都很难懂,大家不要见笑,报个培训吧,又不能放下工作去学,没了生活来源又不行。
顺便对大家说声抱歉,我账号里面没有分,所以给不了回答到者分,也无法用钱买来分。所以不好意思。
展开
 我来答
热情的大神
2018-01-06 · TA获得超过157个赞
知道小有建树答主
回答量:176
采纳率:73%
帮助的人:79.4万
展开全部
问题一;
所以m=findmax(a,9),可以这么理解吗?按照我这样的理解,此时m=a[12,87,5,75,21,49,97,19,39]。_______这么理解可以
问题二;
首先int findmax(int a[], int n)这是个回调函数
运行到m = findmax(a, n - 1);调用函数本身当然的从头开始运行
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式