请教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]呢?还是什么?并且能否分析下这题解法。谢谢!!!回答的好可以追分。 展开
#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]呢?还是什么?并且能否分析下这题解法。谢谢!!!回答的好可以追分。 展开
5个回答
展开全部
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个元素的地址, 含义不一致,但是具体值是一致的.
程序加上注释为:
#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个追问的问题太难了,我就不回答了.
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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();
}
{ 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();
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
传过去的是一个 指向 char数组的指针 对于一位数组就是&s[0].
fun这个函数呢实现了一个字符串的循环右移,也就是说第一个元素变成了第二个,第二个变成了第三个。。。最后一个变成第一个。
所以输出结果是 fabcde
fun这个函数呢实现了一个字符串的循环右移,也就是说第一个元素变成了第二个,第二个变成了第三个。。。最后一个变成第一个。
所以输出结果是 fabcde
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我觉得结果是:fabcde
是把你输入的字母传过去吧
是把你输入的字母传过去吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
上面的程序出了一点小问题,应该是楼主不小心造成的,就是第一个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");
}
正确的代码如下:
#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");
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询