一个C语言问题 关于fun()的用法

一个C语言问题 关于fun()的用法,第1张

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);

}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/12181209.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存