请教C语言高手一个问题

#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]呢?还是什么?并且能否分析下这题解法。谢谢!!!回答的好可以追分。

第1个回答  2011-03-14
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个追问的问题太难了,我就不回答了.

本回答被提问者采纳
第2个回答  2011-03-15
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();
}
第3个回答  2011-03-14
传过去的是一个 指向 char数组的指针 对于一位数组就是&s[0].
fun这个函数呢实现了一个字符串的循环右移,也就是说第一个元素变成了第二个,第二个变成了第三个。。。最后一个变成第一个。

所以输出结果是 fabcde
第4个回答  2011-03-15
我觉得结果是:fabcde
是把你输入的字母传过去吧
第5个回答  2019-12-13
上面的程序出了一点小问题,应该是楼主不小心造成的,就是第一个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");
}

c语言有一道题不会做,求高手解,最好分析一下。
答案是:C 因为scanf("%c%c",&a,&b);接收的是1和2,在输入后按了“回车”这个回车符会传递到下一句,也就是:c=getchar(); ,这样 c 赋值为回车符了;d=getchar(); 接着就是这句,你输入34的时候,d 只接收单个字符,也就是 3 ;所以最后的输出是:12 3 ...

C语言菜鸟求高手解答...
1. 第一个问题似乎是一个关于C语言条件判断的疑问。你需要明确表达你的问题,以便得到具体的解答。2. 在C语言中,`m++` 表示先使用变量 `m` 的值,然后将 `m` 的值加1。所以,表达式 `m++ > 5` 首先将 `m` 的值(初始为5)用于比较,然后 `m` 自增。3. 由于 `m` 的初始值是5,...

求C语言高手解答
c是比较智能的,当他明确知道一个表达式的值时,剩下的式子不会再进行运算。比如&&运算,当两个值其中一个为0时,他就是0了,第二个式子就不用运算,由于a=5,b=6 (m=a>b)相当于(m=5>6)所以,m=0所以表达式(m=0)的值为0 所以(m=a>b)&&(n=c>d)的值就是0 所以n=c>d没有运算...

在下是C语言初学者,想请教高手一个问题?(有关对奇数方魔阵如何用动态...
x=n-1;y=n\/2;array[x*n+y]=1;flag[x*n+y]=1;for(i=2;i<=j;i++){ if(x==y&&x>=n-1){ x--;} elseif(x>=n-1){ x=0;y++;}elseif(y>=n-1){ y=0;x++;}elseif(flag[(x+1)*n+y+1]==1){ x--;}else{ x++;y++;} array[x*n+y]=i;flag[x*n+y...

求C语言高手帮我看一个简单的问题!
这个就是for循环的运行机制造成的 for中 先d=1 接着判断d<=i成立,因为i=1,所以进入循环体 运行d*=r,这里d变成10 接着运行d++,d变成11 接着再判断d<=i不成立,所以退出for循环,那么d最终结果是11了?明白吗?

c语言几个小小的问题 高手帮个忙
1. C 逗号在这里不合法 2. 输出2,虽然x是浮点型,但是10和4都是整型,所以先按整型运算,再将结果转换为浮点型 3. (++x, y++)表示这是一个逗号表达式,逗号表达式取最后一个表达式的值,也就是y++的值,所以输出结果是3和3 4. printf("%8.4g\\n",b); 这句输出8756,%g表示按%e或者...

请各位C语言高手帮忙解决下面的问题。
return binary_find(a, target, low, (low + high)\/2 - 1);} else { return binary_find(a, target, (low + high)\/2 + 1, high);} } int main(){ int a[15] = {0};int i = 0;int ret = 0;int target = 0;printf("请输入15个数:\\n");for(i=0; i<15; i++){...

C语言的问题,高手快进来啊
1、include <stdio.h> main(){ int i,n, sum = 0;printf("请输入一个四位数:");scanf("%d", &n);for(i=1;i<=4;i++){ sum += n % 10;n \/= 10;} printf("每一位数字相加和为:%d\\n", sum);return 0;} 2 、include <stdio.h> main(){ int a,b;scanf("%d %d"...

请教C语言高手一个问题
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];scan...

一个c语言问题,请求高手帮忙。
i=10,j=1,或者说,j被析构了。

相似回答