两题C语言,高手求助啊

以下程序运行后输出的结果第一行为___,第二行为____
#include<stdio.h>
void main()
{ int i=5;
do{
switch(i%2)
{ case 0:i--;break;
case 1:i--;continue;
}
i--;printf("%d\n",i);
}while(i>0)
}
答案是____2__ __0______

以下程序运行后输出结果的第一行为_______,第二行为________
#include<stdio.h>
int fun(int a[],int n,int b[])
{int i=0,j,m=0,c,x;
for(i=0;i<n;i++)
{ x=a[i];c=1;
for(j=i+1;j<n;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;i<n;i++)
{ if(i%2==0)printf("\n");
printf("%5d",y[i]);
}
}
答案是-8 4
1 2
请高手帮忙啊,这两题是怎么做的,谢谢

第一题:

第一次5%2=1,所以执行i--,得i=4,因continue继续,所以用4%2=0,执行case0,i--得3,跳出,跳出后继续--得2,打印输出。下一次循环用2%2=0,执行case 0,i--得1,跳出继续--,得0;所以输出为2和0

第二题:

调用函数后,主要看里面的循环情况,第一次循环i=0;c=8;当j=8时,跳出,i=7,此时得b[0]=-8,m=1;b[1]=4,m=2;

执行i++,得i=8,进入第二次外层循环,a[j]=a[9]不等于a[8]直接break跳出,i=j-1=8;此次执行c==1时,b[2]=a[8]=1,m=3;

执行i++,得i=9,进入第三次外层i循环,a[i]=a[9],此时j=10,不小于10,所以内层循环不执行,跳出执行当j>=n,i=j,所以此时i=10;因为c=1,所以继续执行b[3]=a[9]=2,m=4;

最后i=10,不执行循环,所以返回m值为4.即n=4.

主函数里面当i%2==0时,换行输出,所以最后的输出结果应该为

y[0]=-8   y[1]=4

y[2]=1    y[3]=2

你的程序排版太不规范了,呵呵

温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-09-08
第一道5%2=1,之后运行 case 1:i--;continue得5-1=4,因为分号后面是continue,所以继续i=4,4%2=0,运行case 0:i--;break得3,退出开关语句得i--=2。之后2大于0,得按第一一样继续循环得第二行为0
第2个回答  2010-09-08
1.
int i=5;
do{
switch(i%2)
{
case 0:
i--;
break;
case 1:
i--;
continue;
}
i--;
printf("%d\n",i);
}while(i>0);
第一次进来时,i==5, i%2==1,故i--后为4,continue继续执行while循环,并且跳过了printf,所以第一次没有输出; 这次i%4==0了,同样i--后为3,break跳出switch循环,到外面的i--为2,并输出2
继续while循环,i==2,i%2==0,执行i--,break 跳出switch,
执行i--,printf,并是1了。
2.
fun函数是用来计算数组a中的连续的元素个数,如果连续的元素个数超过一个,则在一行输入这个连续元素出现的次数,为了与数值以示区别,在前面加一个负号; 其他不连续元素则直接输出,规定每行只能输出两个数。
相似回答