求助一道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,求助好心人帮忙分析一下
求好心人帮忙分析下这道题的正确思路 ,这道题是二级参考书上的题目,没有相似解答只有结果 展开
#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,求助好心人帮忙分析一下
求好心人帮忙分析下这道题的正确思路 ,这道题是二级参考书上的题目,没有相似解答只有结果 展开
6个回答
展开全部
首先你要注意
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
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
展开全部
t = *s1;
*s1 = *s2;
*s2 = t;
s1++;
s2--;
while循环里这个干
你那样太晦涩了
*s1 = *s2;
*s2 = t;
s1++;
s2--;
while循环里这个干
你那样太晦涩了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
t=*s1++;*s1=*s2--;*s2=t;
你这里写的很乱,要是用指针,中间变量就也用指针
你这里写的很乱,要是用指针,中间变量就也用指针
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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;
}
在我这里运行怎么一直是错误的
看程序是倒序后输出
#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;
}
在我这里运行怎么一直是错误的
看程序是倒序后输出
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
p = "1234567" 改为 *p ;
fun()中 改为 *s1 = *w; *s2 = w[n-1];
while(s1<s2) 改为*s1 < *s2
fun()中 改为 *s1 = *w; *s2 = w[n-1];
while(s1<s2) 改为*s1 < *s2
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2010-01-28
展开全部
呵呵。按照楼上的改下就是倒序了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询