1;j++)
w[j]=w[j+1];
w[n-1]=t;
}
}
二.程序设计题
1.编写函数fun,其功能是:将形参a所指数组中的前半部分元素中的值和后半部分元素中的值对换。形参n中存放数组中数据的个数,若n为奇数,则中间的元素不动。
例如,若a所指数组中的数据依次为:1 2 3 4 5 6 7 8 9,则调换后为:6 7 8 9 5 1 2 3 4。
#include <stdio.h>
#define N 9
void fun(int a[], int n)
{
}
int 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");
return 0;
}
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+i] = t;
}
}
参考程序
2.编写函数fun,它的功能是:对于给定的下标n,把数组arr中比元素arr[n]小的元素放在它的左边,比它大的元素放在它的右边,排列成的新数组仍然保存在原数组中。
例如,数组arr={33,67,42,58,25,76,85,16,41,65},下标n=3,则移动后数组arr={33,42,25,16,41,58,67,76,85,65}。
#include <stdio.h>
#define N 10
void fun(int arr[], int n)
{
}
int main()
{
int b[N]={33,67,42,58,25,76,85,16,41,65}, i,n;
printf("\nThe original data :\n");
for (i=0; i<N; i++)
printf("%d ", b[i]);
printf("\n");
scanf("%d",&n);
fun(b, n);
printf("\nThe data after moving :\n");
for (i=0; i<N; i++) printf("%d ", b[i]);
printf("\n");
return 0;
}
void fun(int arr[], int n)
{
int i,j=0,k=0,t;
int bb[N];
t=arr[n];
for (i=0;i<N;i++)
{
if (arr[i]>t) bb[j++]=arr[i];
if (arr[i]<t) arr[k++]=arr[i];
}
arr[k++]=t;
for (i=0;i<j;i++)
arr[k++]=bb[i];
}
参考程序
3.编写函数fun,它的功能是:计算形参x所指数组中N个数的平均值(规定所有数均为正数),将所指数组中小于平均值的数据移至数组的前部,大于等于平均值的数据移至数组的后部,平均值作为函数值返回,在主函数中输出平均值和移动后的数据。
例如,有10个正数:41 17 34 0 19 24 28 8 12 14,平均值为:19.700000
移动后的输出为:17 0 19 8 12 14 41 34 24 28。
#include <stdio.h>
#include <stdlib.h>
#define N 10
double fun(double *x)
{
}
int main()
{
int i;
double x[N];
for(i=0; i<N; i++)
{
x[i]=rand()%50;
printf("%4.0f ",x[i]);
}
printf("\n");
printf("\nThe average is: %f\n",fun(x));
printf("\nThe result :\n");
for(i=0; i<N; i++) printf("%5.0f ",x[i]);
printf("