编程C语言请教

将数列1,5,7,13,15,19保存到一个一维数组中,要求按逆序重新存放并输出... 将数列1,5,7,13,15,19保存到一个一维数组中,要求按逆序重新存放并输出 展开
 我来答
nullbd
2018-09-24
知道答主
回答量:10
采纳率:0%
帮助的人:13.4万
展开全部
char *fun(char *p,char c_begin,char c_end)
{
int i,n1=-1,n2;
char str[80],str2;
for(i=0;p[i]!='\0';i++){//修改*p为p[i]让判断可以正确的扫描字符串
if(p[i]==c_begin){//修改*p为p[i]让判断可以正确的扫描字符串
n1=i; //记录起始位置
}
else if(p[i]==c_end){ //修改*p为p[i]让判断可以正确的扫描字符串
str2=p[i];strcat(str,str2);break;
}
else if(n1!=-1){//n1不等于-1的话,说明已经找到了起始点,将这个条件放在第三位是因为如果p[i]==c_end的话可以正常的终止循环
str2=p[i];strcat(str,str2);//将i位置的字符加入str中
}
}
printf("%s",str);
p=str;
printf("%s",p);
return str;
}
或者
char *fun(char *p,char c_begin,char c_end)
{
int i,n1=-1,n2==-1;
char str[80],str2;
for(i=0;p[i]!='\0';i++){
if(p[i]==c_begin){ //检查字符串p的第i个字符是否等于c_begin
if(n1==-1)n1=i; //这个判断保证n1是c_begin第一次出现的位置
}
else if(p[i]==c_end){ //检查字符串p的第i个字符是否等于c_end
n2=i;break;
}
}
for(i=0;i<n1-n2;i++){//通过循环将p中处于n1与n2之间的字符写入str中
str[i]=p[n1+i];
}
return str;
}
好久没写C程序了,手头上也没有编译器,只是提供一个思路..指针这个东西就是一个指向内存地址的变量,这个例子里面的p记录的是一个字符传的其实位置的内存地址,*p就是代表p指针记录的内存地址的内容,字符串的字符是连续存放的,所以用p++这个样的方法可以让p指向字符串的下一个字符,但是这里没有这么做是为了不改变p的指向,实际上p[i]和*(p+i)是一样的都是代表p指向的字符串的第i个字符,而数组的名字其实就是指向这个数组的第一个元素的指针,故最后rutrun str。你之前的程序里面最大的问题是在循环里面没有移动p指针,换句话说,循环的条件*p!='\0'无论循环多少次都是一样的因为一直是用字符串的第一个字符去和'\0'去比较,会变成死循环。另外n1=0;str2=p[n1];strcat(str,str2); 这个部分会每次都让n1=0,故每次就是追加p的第一个字符,而且也只p的第一个字符等于c_begin时才执行这部分代码,所以即使循环是正常的,那么截到的字符串也只是由几个c_begin和一个c_end组成的。第一种是在你的方法上尽量保持与你相同的思路来修改的,二个种是我最开始想到的,提供你参考
荤岑玉沛容
2019-11-17 · TA获得超过3588个赞
知道大有可为答主
回答量:3135
采纳率:33%
帮助的人:183万
展开全部
#include
"stdio.h"
main()
{

/*将数列1,5,7,13,15,19保存到一个一维数组中,要求按逆序重新存放并输出
*/

int
n[6]={1,5,7,13,15,19};/*定义数组并录入数据*/

int
i;

/*倒序*/

for(i=0;i<3;i++)

{

int
t=0;

t=n[i];

n[i]=n[5-i];

n[5-i]=t;

}

for(i=0;i<6;i++)printf("%d
",n[i]);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式