fun(6)的时候调用fun(3),执行fun(3)时调用fun(1),这没有错。
fun(6)的时候调用fun(3),
执行fun(3)时调用fun(1)
执行fun(1)时打印“1”
继续执行fun(3)的后续:打印“3”
继续执行fun(6)的后续:打印“6”
所以就是1
3
6
如果改写fun函数为
fun(int
x)
{
printf("%d
",x);
if(x/2>0)
fun(x/2);
}
那么结果就是6
3
1了
z=fun(fun(x++,y++),fun(--x,--y));
在这个三个fun函数调用的过程中,先执行fun(--x,--y),再执行fun(x++,y++),最后执行外层的fun。
//fun(--x,--y)执行时--x先减再取值,此时实际执行的是fun(2,8),返回9,之后x的值为2,y为8
//fun(x++,y++)执行时先取值再加,此时实际执行的是fun(2,8),返回9,之后x的值为3,y为9
//最后fun(9,9),返回10
这个应该是B啊!
先说A他这里调用的时候用了一个变量t来接受返回值。这就是错误的,从fun函数的原型中,是用void来定义的,所以fun函数无返回值,他这就错误了。
再说B首先我们知道每一个字符都有一个他对应的ASCII字符,这个ASCII字符是一个整数。D选项的第一个实参32可以是一个字符,也可以是一个整数。第二个实参是32,这也能符合要求,所以D选项是正确的。如果你不信的话就编写一个程序试一下好了。
#include "stdioh"
void fun(int a,int n)
{int t,i,j;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(a[i]<a[j])
{
t=a[i];a[i]=a[j];a[j]=t;
}
} /这是一个han数不用分析了吧,目的是用来将数组的数排序/
main()
{
int c[10]={1,2,3,4,5,6,7,8,9,0},i;
fun (c,10); /将C数组的10个数进行排序/
for(i=0;i<10;i++)
printf("%d",c[i]);
printf("\n");
}
#include<stdioh>
#include<stringh>
void fun(char a[],int n)
{
char t[80];int i;
if(n>strlen(a))
for(i=0;i<strlen(a);i++)
t[i]=a[i];
else
for(i=0;i<n;i++)
t[i]=a[strlen(a)-n+i];
t[i]='\0';
printf("%s",t);
}
int main()
{
char a[80];int n;
scanf("%s",a);
scanf("%d",&n);
fun(a,n);
system("pause");
return 0;
}
fun()函数输入参数p = d++;结果是 p = 2;执行此句后 d = 2,
然后printf()中没有换行,输出缓冲区未满,暂时不打印,缓冲区中有一个 2未打印;
主函数中调用fun()函数,但是传的是值不是地址,故a的值不变,等于1;
此时有换行,满足输出打印条件,故打印缓冲区的内容,加上子函数中的结果,
最后的结果为打印: 21
#include "stdioh"
int fun(int x[ ],int n)
{
/Program/
int i,s=0;
for(i=0;i<n;i++)
if(x[i]%2)
s+=x[i];
return s;
/ End /
}
main()
{ int a[10],i,sum;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<10;i++)
printf("%3d",a[i]);
printf("\n");
sum=fun(a,10);
printf("%d\n",sum);
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)