两个c语言的小程序求解释

[复制链接]
查看11 | 回复1 | 2011-3-5 03:15:31 | 显示全部楼层 |阅读模式
1、
#include \"stdio.h\")
int fun(int a[],int n,int b[])
{int i=0,j,m=0,c,x;
for(i=0;in;i)
{x=a; c=1;
for(j=i 1;jn;j)

if(a[j]==x)c;

else {i=j-1; break; }
if(j=n) i=j;
if(c==1)b[m]=x;
else{b[m]=-c;b[m]=x;}
}
return m;
}
void main()
{int x[]={4,4,4,4,4,4,4,4,1,2},y[10],i,j,n=10;
n=fun(x,n,y);
for(i=0;in;i)
{if(i%2==0)printf(\"\\n\");
printf(\"]\",y);
}
getch();
}
我对输出之后结果的第二行疑问比较大,不是很懂希望大虾能帮助解释一下函数的功能。



2、#includestdio.h
#includestring.h
void print(char *p)
{ static int len,offset; offset=strlen(p)-len;

if(offset==0) return;

else printf(\"%c\",*(p offset-1));

len; print(p);}
void main()
{ char str[]=\"dog\";print(str);getch();}
我的疑问是上面有一个return后面为什么是空的?还有后面的输出结果看不太懂,求高手解释谢谢。
回复

使用道具 举报

千问 | 2011-3-5 03:15:31 | 显示全部楼层
<pre id=\"best-answer-content\" class=\"reply-text mb10\">第一个程序中输出是

-8
4

1
2
这是因为执行到n=fun(x,n,y)时,调用函数,首先i=0,因为数组前8个都是4,所以c一直加加到等于8,此时j=8了,a[j]不等于x也就是a[0],所以执行i=j-1,所以i=7,此时c等于8不等于1,所以b[0]=-8,b[1]=4,然后执行循环时i就为8了,因为前面i已经是7了,然后c不加加,等于1,b[2]=x=a[8]=1,然后i=9,c仍然为1,b[3]=x=a[9]=2,至此b数组全部出来了,然后当b中i为偶数时先打印出
回车,再空5格打印出数值

第二个程序中return为空就是直接结束函数,没有返回值。str是一个字符数组,str[0]=d,str[1]=o,str[2]=g,strlen返回字符数组长度,len初始化为0,所以offset首先为3,指针p先指向数组的首地址,*(p offset-1)就是*(p 2)就是数组第3个元素str[2]=g,然后len,offset为2,打印出数组第2个元素str[1]=o,然后len,offset为1,打印出数组第1个元素str[0]=d,然后返回,所以最终结果为god
我这么说你能明白吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行