C语言实验(十四):指针(数组排序,数组求平均数、中位数和众数)
一、输入10个整数,利用指针分别由小到大排序、由大到小排序。
- 函数的形式参数使用数组指针和数组长度,定义函数返回类型为指针
- 升序及降序排序代码通过冒泡排序完成,封装成为函数使用
参考实验代码
#include <stdio.h>
int* maxtomin(int s[],int length);
int* mintomax(int s[],int length);
int main()
{
int i;
int a[10] = {0};
for(i=0;i<10;i++)
scanf("%d",&a[i]);
maxtomin(a,10);
printf("从大到小:");
for(i=0;i<10;i++)
printf("%d",a[i]);
mintomax(a,10);
printf("从小到大:");
for(i=0;i<10;i++)
printf("%d",a[i]);
printf("Hello world!\n");
return 0;
}
int* maxtomin(int s[],int length) //从大到小排序
{
int i,j,t;
for(i=0;i<length-1;i++)
for(j=0;j<length-i-1;j++)
if(s[j]<s[j+1])
{
t = s[j];
s[j] = s[j+1];
s[j+1] = t;
}
return s;
}
int* mintomax(int s[],int length)//从小到大排序
{
int i,j,t;
for(i=0;i<length-1;i++)
for(j=0;j<length-i-1;j++)
if(s[j]>s[j+1])
{
t = s[j];
s[j] = s[j+1];
s[j+1] = t;
}
return s;
}
运行结果
二、输入10个整数(通过指针引用数组),实现三个函数,分别求这10个整数的平均值、中位数、中值(数组名作为函数参数、通过指针引用数组),最后实现一个求平均值、中位数、中值的通用函数(指向函数的指针),要求实现过程中尽量使用指针。
- 数组名作为函数参数、通过指针引用数组
参考实验代码
#include <stdio.h>
#include <stdlib.h>
float average(int s[]);
float median(int s[]);
int mode(int s[]);
int main()
{
int s[10],i;
for(i=0;i<10;i++)
scanf("%d",&s[i]);
printf("Average is %.3f",average(s));
printf("Median is %.3f",median(s));
printf("Mode is %d",mode(s));
}
float average(int s[]) //求平均值函数
{
int i,t;
for(t=0,i=0;i<10;i++)
t += s[i];
t = t/10;
return t;
}
float median(int s[])//求中位数函数
{
int i,j,t;
for(i=0;i<9;i++)
for(j=0;j<9-i;j++)
if(s[j]<s[j+1])
{
int t = s[j];
s[j] = s[j+1];
s[j+1] = t;
}
return (s[4]+s[5])/2;
}
void swap(int *p, int *q) //变量交换函数
{
int buf;
buf = *p;
*p = *q;
*q = buf;
return;
}
int mode(int s[]) //求众数函数
{
int i,j,t,d=1,x=1;
int m=0;
for(i=0;i<9;i++)//冒泡排序
for(j=0;j<9-i;j++)
if(s[j]<s[j+1])
{
int t = s[j];
s[j] = s[j+1];
s[j+1] = t;
}
for(i=0;i <10;i++){ //求有序数组众数
for(j=i;j<10;j++)
{
if(s[j]==s[j+1]){
x++;
}
else
{
if(d < x)
{
swap(&d,&x);
m = s[j];
}
x = 1;
break;
}
}
}
return m;
}
运行结果
实验总结
这次实验练习了指针的使用。完成数组排序和数组求三个统计值的实验。通过这次实验,主要练习了使用指针引用数组、使用指针变量的知识。