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表示存在)
自定义函数部分
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中死循环。