请教C语言高手一个问题

#include<stdio.h>#include<string.h>voidfun(char*str){chartemp;intn,i;n=strlen(str);te... #include <stdio.h>
#include <string.h>
void fun(char*str)
{
char temp; int n,i;
n=strlen(str);
temp=str[n-1];
for(i=n-1;i>0;i--) str[i]=str[i-1];
str[0]=temp;
}
main()
{
char s[50];
scanf(”%s”,s); fun(s); printf(”%s\n”,s);
}
程序运行后输入:abcdef<回车>,则输出结果是?
这里 是将s 传给 char*str 吗?是传什么过去?是传&s[0]呢?还是什么?并且能否分析下这题解法。谢谢!!!回答的好可以追分。
展开
 我来答
xion9liang
2011-03-14 · 超过25用户采纳过TA的回答
知道答主
回答量:93
采纳率:0%
帮助的人:80.1万
展开全部
abcdef<回车>输出为fabcde.

程序加上注释为:
#include <stdio.h>
#include <string.h>

void fun(char* str)
{
char temp;
int n,i;

//取得str的长度
n=strlen(str);

//将最后一个字符赋值给temp;
// 注意数组下标从0 开始,故这里要用n-1
temp = str[n-1];

//循环将数组前一个位置的值赋值到当前位置.
//当i 值减小到0 的时候退出,也就是说str[0]的值还是原来的值,没有变
for(i=n-1; i>0 ;i--)
{
str[i]=str[i-1];
}

//将temp的值赋值到数组的第一个位置,也就是0位
str[0]=temp;
}

main()
{
char s[50];
scanf("%s",s);

fun(s);

printf("%s\n",s);

return 0;
}

函数调用fun(s), 是传递char* 过去, 传递的是数组的指针. 指向数组的首地址, 具体值和&s[0]是一样的. 2者还是有区别的, s 在函数传递时表示的是指向数组的指针, 而&s[0]表示的是数组第0个元素的地址, 含义不一致,但是具体值是一致的.
追问
char s[50] 的意思是字符串长度为50么?那为什么输入abcdef后 n=6呢?
追答
这2个追问的问题太难了,我就不回答了.
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
odqiarpf1
2011-03-15
知道答主
回答量:42
采纳率:0%
帮助的人:19.8万
展开全部
void Swap(int *a,int *b) /*交换两个数*/
{ int temp;
if(*a==*b)
return;
temp=*a;
*a=*b;
*b=temp;
}
void Input(int array[]) /*输入*/
{
int i;
printf("Input ten integer:\n");
for(i=0;i<10;i++)
scanf("%d",&array[i]);
}
void Process(int array[]) /*处理*/
{
int i,max,min,mx=0,mn=0;
max=min=array[0];
for(i=0;i<10;i++)
if(array[i]>max)

Swap(&array[9],&array[mx]);
for(i=0;i<10;i++)
if(array[i]<min)

Swap(&array[0],&array[mn]);

}
void Output(int array[]) /*输出*/
{ int i;
printf("After process the array is:\n");
for(i=0;i<10;i++)
printf("%d ",array[i]);
}
main()
{
int Array[10];
Input(Array);
Process(Array);
Output(Array);
getch();
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
物语杂谈
2011-03-14 · 超过28用户采纳过TA的回答
知道答主
回答量:106
采纳率:0%
帮助的人:47万
展开全部
传过去的是一个 指向 char数组的指针 对于一位数组就是&s[0].
fun这个函数呢实现了一个字符串的循环右移,也就是说第一个元素变成了第二个,第二个变成了第三个。。。最后一个变成第一个。

所以输出结果是 fabcde
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
女驸马1112
2011-03-15 · TA获得超过114个赞
知道答主
回答量:167
采纳率:0%
帮助的人:0
展开全部
我觉得结果是:fabcde
是把你输入的字母传过去吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
仙访戚可昕
2019-12-13 · TA获得超过3724个赞
知道大有可为答主
回答量:3211
采纳率:34%
帮助的人:234万
展开全部
上面的程序出了一点小问题,应该是楼主不小心造成的,就是第一个for()后面多了一个分号for(i=0;i<4;i++);
正确的代码如下:
#include<stdio.h>
main()
{
int
i;
int
a[4];
printf("\nplease
input
array:");
for(i=0;i<4;i++)
scanf("%d",&a[i]);
printf("output
array:\n");
for(i=0;i<4;i++)
printf("a[%d]=%d",i,a[i]);
printf("\n");
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式