c语言题目

程序如下:
函数fun的功能是:
将形参a所指数组中的前半部分元素中的值与
后半部分元素中的值对换。
形参n中存放数组中数据的个数,
若n为奇数,则中间的元素不动。

#include<stdio.h>
#define N 9
void fun(int a[],int n)
{
int i,t,p;
p=(n%2==0)?n/2:n/2+1;
for(i=0;i<n/2;i++)
{
t=a[i];
a[i]=a[p+i];
a[p+1]=t;
}
}
main()
{
int b[N]={1,2,3,4,5,6,7,8,9},
i;
printf("\nThe original data:\n");
for(i=0;i<N;i++)
printf("%4d",b[i]);
printf("\n");
fun(b,N);
printf("\nThe data after moving:\n");
for(i=0;i<N;i++)
printf("%4d",b[i]);
printf("\n");
}

提问:
1、在程序段中

for(i=0;i<n/2;i++)
{
t=a[i];
a[i]=a[p+i];
a[p+1]=t;
}
为何其中参数的变换不是地址的传递
在主函数中输出时
仍能改变数组元素的顺序?

2、在fun函数中和主函数中
i均有声明,那i应该算是局部变量还是全局变量呢?
它的作用域又怎么算呢?

在fun函数中的i只能在fun函数中使用
main中的i只能在main函数中使用

其中main函数是把b数组的首地址给过去了
fun(b,N);

然后fun函数中的a数组就是接着b数组的地址,并没有新建地址来存放形式参数
温馨提示:内容为网友见解,仅供参考
第1个回答  2020-05-23

应该是要求保留两位小数才对。若是“保留两位有效数字”,等于是四舍五入到整数(因为原来的数的平均数,基本都是大于10的。

#include<stdio.h>

float av(int a[])

{int s=0,max=a[0],min=a[0],i;

 for(i=0;i<10;i++)

 {s+=a[i];

  if(a[i]>max)max=a[i];

  if(a[i]<min)min=a[i];

  } 

  return (s-max-min)/8.0;

}

int main()

{ int i,a[10];

  for(i=0;i<10;i++)

    scanf("%d",&a[i]);

  printf("%.2f\n",av(a));

  return 0;

}

第2个回答  推荐于2018-04-27
你是要换a[i]和a[p+i]吗?for循环里面a[p+1]=t写错了,应该是a[p+i]=t

在你的程序里面,i是局部变量,作用域就是它所在的函数;不过你的程序中两个函数在用到i时都首先对i赋值0,提为全局变量也是不影响的本回答被网友采纳
相似回答