程序如下:
函数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应该算是局部变量还是全局变量呢?
它的作用域又怎么算呢?
应该是要求保留两位小数才对。若是“保留两位有效数字”,等于是四舍五入到整数(因为原来的数的平均数,基本都是大于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;
}