C语言函数入门

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表示存在)

在这里插入图片描述

自定义函数部分

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; 
} 

运行结果
在这里插入图片描述

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)分别写函数,输入一个身高,分别采用顺序法和二分法,查找是否存在返回在数组中的下标 ,-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; 
}

运行结果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

主函数部分

#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])); 
 } 

整体运行结果
在这里插入图片描述

注意点

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

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当谈到递归函数时,C语言是一个很好的起点。递归是一种函数调用自身的技术,它可以用来解决许多问题,特别是涉及到重复性的任务。下面是一个简单的C语言递归函数入门教学: 1. 确定递归的终止条件:每个递归函数都必须有一个终止条件,否则它将无限地调用自身。这个终止条件通常是在问题被分解到一定程度后得到满足。 2. 定义递归函数:在函数内部,你需要定义递归函数的基本操作。这些操作可以是解问题的一部分,或者是将问题分解为更小的子问题。 3. 调用递归函数:在递归函数内部,你需要调用自身来解决更小的子问题。这个调用应该是在满足终止条件之前进行的。 4. 处理递归函数的返回值:递归函数通常会返回一个值,这个值可以被用来构建更大的解决方案。你需要在每一层递归中正确处理返回值。 下面是一个经典的例子,展示了如何使用递归来计算一个数的阶乘: ```c #include <stdio.h> int factorial(int n) { // 终止条件 if(n == 0) { return 1; } // 递归调用 return n * factorial(n-1); } int main() { int num = 5; printf("Factorial of %d is %d", num, factorial(num)); return 0; } ``` 在这个例子中,递归函数 `factorial` 接收一个整数作为参数,并返回这个整数的阶乘。终止条件是当输入为0时,返回1。否则,递归调用 `factorial` 函数来计算 `n` 的阶乘。 希望这个简单的入门教学能帮助你理解C语言中的递归函数。如果你有更多问题,请随时提问!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值