来这里回答c语言问题的,进来看一下

来源:百度知道 编辑:UC知道 时间:2024/06/30 11:18:45
看一下下面的题会吗?
递归函数invert(int a[],int k)的功能是将数组a中的前k个元素逆置,在下面程序段的(_)处填入适当的内容实现该函数的功能。
void invert(int a[],int k)
{
int t;
if(__(1)__)
{
invert(__(2)__);
t=a[0];a[0]=a[k-1];a[k-1]=t;
}
}
如果能很快看出答案,那就写一下吧。
但是,我的主要问题不是这道题的答案,是因为我现在感觉c语言学的还算不错,但是做这些题时总是不能作对,感觉这些题的每个空都有陷阱,是这些题真的很难吗?也不会啊,但做时就是找不着感觉。
这些题是初级程序员的考题,模拟题,马上就要考试了,不知道该在哪些方面下工夫,请有些想法的人说一下。
你们理解的逆置是什么?应该是{3,5,2,8,9}逆置成{9,8,2,5,3}吧,但是有些人的答案不是啊
真的是有陷阱,我看了答案才发现是陷阱的
可以肯定的是(2)的第一个必然不是a

看这种题目采用的算法和思路,问题求解的方法很多,不要拘泥与自己的算法,而且自己的不一定是最好的,要学会领会别人的算法。思路开阔点就ok了。这个看看就应该明白是用递归,知道递归了就很简单了。
(1)k>=2
(2)&a[1],k-2

我也有这个毛病,呵呵

别人说我基础不扎实,概念不清楚,如果不存在这些问题了,那么不会被题弄得

头晕了

想一下也有道理。

k>0,k-1.

void invert(int a[],int k)
{
int t;
if(k > 0) //k<=0时返回
{
invert(a, k-1); //k>0时继续递归
t=a[0];a[0]=a[k-1];a[k-1]=t;
}
}
看题目就可以判断其为递归函数,递归函数必须要有个结束条件!

void invert(int a[],int k)
{
int t;
if(k>0) //这里k>=1和k>=2似乎都可以
{
invert(a+1,k-2 );
t=a[0];a[0]=a[k-1];a[k-1]=t;
}

}

我自己测试过了 可以的

===================================================

关于你说的初级程序员考试:

我原先也参加过一些这样子类型的考试 还有竞赛什么的

其实并不是很难 因为初级的c本身就没有太多的东西

它出题的话都是一些你可能容易迷糊的地方

像什么宏的错误 输入输出的格式 指针 链表 ++ -- 什么的

如果你觉得你的c真的学得不错那你应该自信一些

不要觉得每道题都处处是陷阱这样子 这样会影响你做题 让你患得患失