#Linux中的GCC编程# 20170728 C培训作业

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 

猜你喜欢

转载自blog.csdn.net/Kshine2017/article/details/85048134