欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C语言函数入门

程序员文章站 2024-03-07 22:16:33
...

C语言函数入门

假设一维数组存放身高为 double a[]={1.74,1.86,1.89,1.86,1.93,1.67,1.72,1.54} ;
a)分别写三个函数求平均,最高,最矮身高
b)用函数以1.7,1.8为标准分别输出所有人的身高评价
c)分别写函数,输入一个身高,分别采用顺序法和二分法,查找是否存在返回在数组中的下标 ,-1表示存在)

C语言函数入门

自定义函数部分

a)分别写三个函数求平均,最高,最矮身高

int average (int i,double a[], int n)//a.1 求平均数 
{
 	double sum=0,ave=0; 
 	for(;i<n;i++)
	{
		sum+=a[i]; 
	} 
	ave=sum/n;
	printf("average = %.2f\n",ave); 
	return 0; 
} 
 int max (int i,double a[], int n)//a.2最大值 
{
 	double max=0; 
 	for(;i<n;i++)
	{
		if(a[i]>max)
		{
			max=a[i]; 
		} 
	} 
	printf("max = %.2f\n",max);
	return 0; 
} 
 int min(int i,double a[], int n)//a.3最小值 
{
	double min=a[0];
 
	for(i=1;i<8;i++)
	{
		if(a[i]<min)
		{
			min=a[i]; 
		} 
	} 
	printf("min = %.2f\n",min);
	return 0; 
} 

运行结果
C语言函数入门

b)用函数以1.7,1.8为标准分别输出所有人的身高评价

int compare(int i,double a[], int n)//b 身高评价 
{
	for(;i<n;i++)
	{
		if(a[i]<1.7)
		{
			printf("%.2f",a[i]); 
			printf("矮   "); 
		} 
		else if(a[i]<1.8)
		{
			printf("%.2f",a[i]); 
			printf("中等   "); 
		} 
		else 
		{
			printf("%.2f",a[i]); 
			printf("高   "); 
		} 
	} 
			printf("\n"); 
	return 0; 
} 

运行结果
C语言函数入门

c)分别写函数,输入一个身高,分别采用顺序法和二分法,查找是否存在返回在数组中的下标 ,-1表示存在)

int find1 (int i,double a[], int n)//c.1顺序法(内华达穷举法 手动狗头) 
{
	double x; 
	printf("(顺序法)请输入你要寻找的数字:"); 
	scanf("%lf",&x);
	int A=-1;
	for(i=0;i<n;i++)
	{
		if(a[i]==x)
		{
			A=i;
			break;	
		} 
	} 
	if(A!=-1)
		{
			printf("%.2f%在数组的下标是%d\n",x,A); 
		} else	printf("%d\n",A); 
	return 0; 
}

int find2 (int i,double a[], int n)//c.2二分法 
{
	double x; 
	printf("(二分法)请输入你要寻找的数字:"); 
	scanf("%lf",&x);
		double b[n];
	for(i=0;i<n;i++)
	{
		b[i]=a[i];
	}
	int j;
	for(i=0;i<n-1;i++)                        //起泡法排序 
	{
		double swap; 
		for(j=0;j<n-1;j++)
		{
			if(b[j]>b[j+1])
			{
				swap=b[j];
				b[j]=b[j+1];
				b[j+1]=swap; 
			}	 
		}
	}
	printf("排列后的数组顺序\n"); 
	for(i=0;i<n;i++) printf("%.2f\t",b[i]);
	printf("\n"); 
	int low,high,mid,A=-1;
	
	low=0;
	high=n;
	while(low<high-1)				//二分法查找 
	{
		mid=(low+high)/2;
		if(x<b[mid])	high=mid;
		else if(x>b[mid])	low=mid;
		else
		{
			A++;
			for(i=0;i<n;i++)		//查找x在原数组中的位置 
			{
				if(b[mid]==a[i])
				{
					goto jump;
				}
			}
			jump:
			printf("%.2f%排列前在数组的下标是%d,\n排列后在数组的下标是%d",x,i,mid);
			break; 
		}
	}
	if(A==-1)   printf("%d\n",A);  
	return 0; 
}

运行结果
C语言函数入门
C语言函数入门
C语言函数入门

主函数部分

#include<stdio.h>
int average (int i,double a[], int n);
int max (int i,double a[], int n);
int min (int i,double a[], int n);
int compare (int i,double a[], int n);
int find1 (int i,double a[], int n);
int find2 (int i,double a[], int n);
/*主函数*/ 
void main()
{	int y=0; 
	double a[]={1.74,1.86,1.89,1.86,1.93,1.67,1.72,1.54} ; 
	average(y,a,sizeof(a)/sizeof(a[0])); 
	max(y,a,sizeof(a)/sizeof(a[0]));
	min(y,a,sizeof(a)/sizeof(a[0]));
	compare(y,a,sizeof(a)/sizeof(a[0])); 
	find1(y,a,sizeof(a)/sizeof(a[0])); 
	find2(y,a,sizeof(a)/sizeof(a[0])); 
 } 

整体运行结果
C语言函数入门

注意点

二分法中while循环判断是low<high-1,如果是low<high ,当输入x大于数组中的最大值时,因为low和high都是int型会导致程序在while中死循环。

相关标签: 笔记 c语言