C语言书上例题看不懂,能帮忙看一下吗?

谭浩强第五版P238m=(n-1)/2;j=n-1-i;i=x; j=x+n-1; p=x+m;自学的看不懂

我用文字解释一下吧,看看能不能清楚,提问的式子我都进行了加粗,希望能看得出来(图的话我觉得给出的图已经可以参考讲述的,可以结合我的文字看看)


这个传递数组名称的函数,输入有两个,一个是数组,一个是数组长度

那么我们知道:如果传递的n是10,数组长度是10的话,它的元素的索引应该是0-9,也就是最大索引是9,n-1所表示的就是索引最大值。

目标是返顺序存放,那么也就意味着应该将第一个元素(索引是0)与最后一个元素(索引是9)进行互换,将第二个元素(索引是1)和倒数第二个元素(索引是8)进行互换......以此类推,直到中间位置也就是索引是4和5进行交换的时候。这个时候的话,4这个截止条件与n的关系是什么呢?4=(n-1)/2,这里不是数学,因为n是整型变量,所以等号右边出来的只会是整数部分。这就是m=(n-1)/2的来源了,也就是设定交换的最后一个元素的索引号。这里你可以拿奇数个元素去试试,也是同样成立的。

根据交换过程,那么也就相应的有了:

i=0时,j=9=10-1-0

i=1时,j=8=10-1-1

...

也就是j=n-1-i这个式子的由来。


知道了左边,其实右边和左边是对应的,只不过左边用的数组的方式,右边使用的指针的方式。

注意右边的i,j声明的是整型的指针,也就是他只能指向一个整型的变量。题目中输入*x就是相当于给定数组头部的位置索引,所以i=x就是相当于让i这个指针指向数组第一个元素。数组就是一系列整型数字连续顺序存储的结果,所以i+1表示的就是i这个元素的下一个元素,也就是数组的第二个元素,因此j=x+n-1表示i这个指针指向到数组第n个元素,也就是数组的末尾了,此时i,j和前面不一样的,是都不再表示数组的索引号,而是都是指向某个数组元素的指针了。

这里还声明了一个p指针,移动了m位,m和上一个定义没有区别,就是找到中间位置和开头位置相差多少个元素,于是p=x+m也就是让p这个指针指向数组中间的元素。

温馨提示:内容为网友见解,仅供参考
第1个回答  2020-04-03
m = (n-1)/2; // 计算数组的一半对应下标,n-1 是x[n]的最大下标
j = (n-1)-i; // 计算数组从尾标起的下标,与i对称,准备交换两个数组元素的值,实现倒叙功能

C语言书上例题看不懂,能帮忙看一下吗?
我用文字解释一下吧,看看能不能清楚,提问的式子我都进行了加粗,希望能看得出来(图的话我觉得给出的图已经可以参考讲述的,可以结合我的文字看看)这个传递数组名称的函数,输入有两个,一个是数组,一个是数组长度 那么我们知道:如果传递的n是10,数组长度是10的话,它的元素的索引应该是0-9,...

C语言的例题看不懂,请进来帮帮我
b就是对b取反,如果b是0则"!b"的值是1,如果b的值是非0,则"!b"的值是0。"a*!b"先算"!b"的值,这里b的值是2,故"!b"的值是0。同理,"!!a"中由于"!"运算符的结合性是 从右向左 所以,先算"!a"的值,a的值是2(非0),所以"!a"的值是0。在把0进行一个"!"运算,最后...

C语言中的一道例题,谁能帮忙详细解释一下每一步的含义?
回答:输出为: bcdefgha 解释: char *ss( char *s) 函数ss 返回一个指向字符串的指针;函数参数 s 是一个指向字符串的指针 这样,在main 中调用 ss(str)后,s指向了str的首元素,也就是“abcdefgh"中的 ‘a' char *p, t \/\/定义一个char 指针 p 和一个char 变量 t p = s+1 p...

C#的书完全看不懂怎么办?
首先你是否初学编程,如果初学编程建议先依葫芦画瓢照着书上的例子敲,然后运行看效果。MSDN里也有一些例子。可以先看效果再理解。实践比死记硬背来的快。另外如果是其他语言的开发人员转型的话建议先理解一下.Net Fremework。C#也就是一个语法问题,没什么基础不基础的。主要内核理解了语法就是一个形...

...如果你会,请告诉我。谢谢!!!(要求:只能用C语言做)
例题。。不过很讨厌。。当你习惯的操作数据库以后你会发现这样的例题怎么都那么烦人。明明用数据库是最好的,非要整文件的。PS:真的很烦啊。。完全写完500多行代码。。谁没事去写啊。。自己分解问题,划分成一个个的小函数。。自己搞吧。话说看上去就是个大一的程序设计作业。自己研究下嘛。。对...

最近好想学C语言.编程.但我看了C语言书籍.很难看懂,怎么办?
一开始你可以选择一些用来做教材的书籍,浅显易懂,打好基础,弄清楚每个函数的用法和意义,弄清楚C语言的基本格式和结构。一开始可以试试课本的例题,然后慢慢自己设计一些简单的程序。你还可以再网上找题目去编译。等到你比较熟悉后可以找一些小程序的源代码去研究研究。等到你能看懂了以后可以自己编编...

自学C语言,题太难了,书上根本没写怎么求加减乘除。主要谁能帮我完成...
既然是自学,我建议好好看看例题,然后仿写出这样的程序,还有,如果你没有C语言基础,现在写不出来的。我看到你的截图上面是第8页,看的太少了。建议把数据结构,语法都掌握后,再去研究些这样的代码。C语言建议学习流程 首先掌握C语言中提供的数据类型都有哪些,变量定义方法,掌握C语言中的运算符号...

看c语言的程序 单句看都懂,整体看不懂有什么办法解决吗?
第三;在解决一个问题之前一定要画流程图,把解决的思路详细写出来。不管我这种思路我自己有没有能力去实现,但是思路要清晰。特别是你目前的水平。第四:多看看书上的例题讲解,这个很重要。不要大概囫囵吞枣的看。要逐行住句的仔细斟酌,确保每一句话对应每一行代码你都能看明白。第五:如果你感觉把...

学了没多久C语言,课后练习题完全不会。。怎么办?有没有好一点的学习方法...
这个没有啥学习方法,非要有的话,就是多练。想想你的数学,也是没啥方法,做的多了,类似的题就会了。C语言也是这样,先多看些例题,看看他们的编程技巧,然后自己合上课本自己敲一遍。建议你,养成写博客的习惯,把一些你觉得特别棒的编程技巧,记录下来,慢慢积累,不难的,这个过程不会持续很长...

C语言 这个例题看不懂T_T求讲解
小case

相似回答