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语言不是按顺序执行吗?我买的书本上是这么说的啊?我是自学,很多简单的问题都很难懂,大家不要见笑,报个培训吧,又不能放下工作去学,没了生活来源又不行。
顺便对大家说声抱歉,我账号里面没有分,所以给不了回答到者分,也无法用钱买来分。所以不好意思。 展开
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语言不是按顺序执行吗?我买的书本上是这么说的啊?我是自学,很多简单的问题都很难懂,大家不要见笑,报个培训吧,又不能放下工作去学,没了生活来源又不行。
顺便对大家说声抱歉,我账号里面没有分,所以给不了回答到者分,也无法用钱买来分。所以不好意思。 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询