C
20170728
1、函数功能模块化+冒泡排序
/*---------------------------------------------
使用堆内存分配一个5个元素的一维数组(malloc),
从键盘输入5个元素进行初始化,实现冒泡排序
并输出,数组的初始化、排序、输出都要求分函数写
----------------------------------------------*/
#include<stdio.h>
//#include<malloc.h>
#include<stdlib.h>
/*------@函数原型声明------------------------*/
void in(int *p,int n); //输入
void sort(int *p,int n); //排序
void out(int *p,int n); //输出
/*------@主函数-----------------------------*/
int main()
{
int *p=(int*)malloc(5*sizeof(int));
printf("请输入5个整数\n");
in(p,5);
printf("原数组是 :");
out(p,5);
sort(p,5);
printf("冒泡排序后:");
out(p,5);
return 0;
}
/*-------@输出函数定义-----------------------*/
void out(int *p,int n)
{
int i;
for(i=0;i<n;i++)
{
printf("%d ",*(p+i));
}
printf("\n---------------------\n");
}
/*------@输入函数定义------------------------*/
void in(int *p,int n)
{
int i;
for(i=0;i<n;i++)
{
printf("请输入第%d个数:",i+1);
scanf("%d",(p+i));
}
}
/*------@冒泡排序---------------------------*/
void sort(int *p,int n)
{
int i,j;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if(*(p+j)>*(p+j+1))
{
int tem=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=tem;
}
}
}
}
运行结果
[root@localhost Kshine]# gcc test32.c
[root@localhost Kshine]# ./a.out
请输入5个整数
请输入第1个数:23
请输入第2个数:13
请输入第3个数:45
请输入第4个数:3
请输入第5个数:57
原数组是 :23 13 45 3 57
---------------------
冒泡排序后:3 13 23 45 57
---------------------
2、先排序,后去除最大的两个数和最小的两个数,再求和和均值
#include<stdio.h>
//#include<malloc.h>
#include<stdlib.h>
void out(int *p,int n)
{
int i;
for(i=0;i<n;i++)
{
printf("%d ",*(p+i));
}
printf("\n---------------------\n");
}
void in(int *p,int n)
{
int i;
for(i=0;i<n;i++)
scanf("%d",(p+i));
}
void sort(int *p,int n)
{
int i,j;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if(*(p+j)>*(p+j+1))
{
int tem=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=tem;
}
}
}
}
int main()
{
/*向系统申请 10*4个字节的内存块 */
int *p=(int*)malloc(10*sizeof(int));
if(p==NULL)
{
printf("malloc error\n");
exit(1);
}
//输入10个数字(相当于进行赋值初始化)
printf(" 请输入10个整数:----------\n");
int i=0;
for(i=0;i<10;i++)
{
printf("请输入第%d个数",i+1);
scanf("%d",(p+i));
}
//原数组
printf("原数组是:----------------\n");
out(p,10);
printf("排序后是:----------------\n");
sort(p,10);
out(p,10);
printf("去掉最大和最小的两个数后--\n");
//缩小内存块
// free(p);
// p=p+2;
// p=(int*)realloc(p,6*sizeof(int));
out(p+2,6);
float sum=0;
float ave=0;
for(i=0;i<6;i++)
{
sum+=*(p+2+i);
}
ave=sum/6;
printf("和是 %f , 均值是 %f \n",sum,ave);
/*释放资源*/
free(p);
//p是野指针
p=NULL;
return 0;
}
运行结果
[root@localhost Kshine]# gcc test31.c
[root@localhost Kshine]# ./a.out
请输入10个整数:----------
请输入第1个数13
请输入第2个数34
请输入第3个数54
请输入第4个数2
请输入第5个数34
请输入第6个数65
请输入第7个数13
请输入第8个数24
请输入第9个数74
请输入第10个数23
原数组是:----------------
13 34 54 2 34 65 13 24 74 23
---------------------
排序后是:----------------
2 13 13 23 24 34 34 54 65 74
---------------------
去掉最大和最小的两个数后--
13 23 24 34 34 54
---------------------
和是 182.000000 , 均值是 30.333334