求助一道C语言编程题,谢谢

#include"stdio.h"#include"string.h"fun(char*w,intn){chart,*s1,*s2;s1=w;s2=w+n-1;while... #include "stdio.h"
#include "string.h"
fun(char *w,int n)
{
char t,*s1,*s2;
s1=w;
s2=w+n-1;
while(s1<s2)
{
t=*s1++;*s1=*s2--;*s2=t;
}}
main()
{
char *p;
p="1234567";
fun(p,strlen(p));
puts(p);
}
解答时我认为这段编程实现的是将p倒序排列,可运行结果却是1711717,求助好心人帮忙分析一下
求好心人帮忙分析下这道题的正确思路 ,这道题是二级参考书上的题目,没有相似解答只有结果
展开
 我来答
吞并微软
2010-01-28 · TA获得超过193个赞
知道答主
回答量:261
采纳率:0%
帮助的人:191万
展开全部
首先你要注意
char *p;
p="1234567";
这样声明和赋值以后,p指向的是一个只读的变量,'1234567'中的数是不能修改的,只能读取,支持ANSI C 标准的编译器把程序编出来以后运行是会出错所以最好把p声明成一个数组再赋值.
还有fun函数需要一个返回值类型要定义.

下面分析过程,用p[i],表示p中第i个值
在第一次进入循环体时, t=*s1++;*s1=*s2--;*s2=t;
执行完这三条语句后,p[0]中的值不变,因为t=*s1++;后s1已经指向p[1]了,
所以再*s1=*s2--;执行这条语句后,是p[1]的值变成了s2所指的值也就是p[6]了.
同时s2又自减指向了p[5],所以再*s2=t;执行后,p[6]的值不变p[5]变成了1.
如此循环于是就会有1711717的结果.

主要是理解s1++.是指在使用完s1后再让s1加一.
把每一遍循环后数组中的值给你写出来吧
原始数组为:1234567
第一次循环后1734517
第二次:1714717
第三次1711717
kct999
2010-01-28 · 超过30用户采纳过TA的回答
知道答主
回答量:195
采纳率:100%
帮助的人:129万
展开全部
t = *s1;
*s1 = *s2;
*s2 = t;
s1++;
s2--;
while循环里这个干
你那样太晦涩了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
in12hacker
2010-01-28 · TA获得超过148个赞
知道小有建树答主
回答量:343
采纳率:0%
帮助的人:277万
展开全部
t=*s1++;*s1=*s2--;*s2=t;
你这里写的很乱,要是用指针,中间变量就也用指针
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帐号已注销
2010-01-28
知道答主
回答量:23
采纳率:0%
帮助的人:2.8万
展开全部
#include "stdio.h"
#include "string.h"
#include <iostream>
int fun(char *w,int n)
{
char t,*s1,*s2;
s1=w;
s2=w+n-1;
while(s1<s2)
{
t=*s1++;*s1=*s2--;*s2=t;
}
}
int main()
{
char *p;
p="1234567";
fun(p,strlen(p));
puts(p);
system("pause");
return 0;
}
在我这里运行怎么一直是错误的
看程序是倒序后输出
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mojie_shi
2010-01-28 · TA获得超过879个赞
知道小有建树答主
回答量:631
采纳率:0%
帮助的人:260万
展开全部
p = "1234567" 改为 *p ;
fun()中 改为 *s1 = *w; *s2 = w[n-1];
while(s1<s2) 改为*s1 < *s2
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2010-01-28
展开全部
呵呵。按照楼上的改下就是倒序了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式