Part4-函数与指针相关案例

1、函数的嵌套调用:求三个数中最大数和最小数的差值

#include <stdio.h>
#include <stdlib.h>

int max(int *arry)
{
   	int max=0;
    for(int i=0;i<3;i++)
    {
        if(max < arry[i])
        {
            max = arry[i];
        }
    }
    printf("max = %d\n",max);
    return max;
}

int min(int *arry)
{
    int min;
    for(int i=0;i<3;i++)
    {
        if(min > arry[i])
        {
            min = arry[i];
        }
    }
    printf("min = %d\n",min);
    return min;
}

int main()
{
    int i,a,b,c;
    int arry[3];
    int max1,min1;
    for(i=0;i<3;i++)
    {
        printf("Input %d number:",i+1);
    	scanf("%d",&arry[i]);
        printf("\n");
    }
	printf("\n");
    for(i=0;i<3;i++)
    {
    	printf("arry[%d] = %d\n",i,arry[i]);
    }
        
    max1 = max(arry);
    min1 = min(arry);
    
    printf("max - min = %d\n",max1-min1);
    exit(0);
}

2、想求第几项Fibonacci数列的值,就出来第几个值。

#include <stdio.h>
#include <stdlib.h>

int fib(int n)
{
	if(n < 0)
		return -1;
	if(n == 0 || n == 1)
		return 1;

	return fib(n-1) + fib(n-2);
}
int main()
{
	int num;

	scanf("%d",&num);
	printf("%d\n",fib(num));

	exit(0);
}

3、求N的阶乘

 #include <stdio.h>
 #include <stdlib.h>
 
 long int fac(long int num)
 {
     if(num<0)
         return -1;
     if(num ==0 || num ==1)
         return 1;
     return num*fac(num-1);
 }
 
 int main()
 {   
     long int num;
     printf("Input num jiecheng:");
     scanf("%ld",&num);
     
     printf(" %ld NUM! = %ld\n",num,fac(num));
 }                                                             

4、3个学生各学4门课,1)计算总平均分,2)只查看某学生的个各门功课成绩

#include <stdio.h>
#include <stdlib.h>

#define M 3
#define N 4
void average(float *q,int n)
{
	int i;
	float sum=0;
	printf("The all student average grade\n");
	for(i=0;i<n;i++)
	{
		sum += q[i];
	}
	printf("%.2f\n",sum/12);
}

void switch_student(float (*p)[N],int n)
{
	int num=0,i;	
	printf("You want to get who grade\n");
	scanf("%d",&num);
	num = num -1;
	for(i=0;i<N;i++)
	{
		printf("%.0f ",p[num][i]);	
	}
}
int main()
{	
	float grade[M][N] = {{40,34,60,70},{40,59,67,28},{79,20,68,99}};
	float* q  =  *grade;
	float (*p)[N]  =  grade;
    
	average(q,M*N);
    
	switch_student(p,N);

	printf("\n");
	exit(0);
}

老师的:

#include <stdio.h>
#include <stdlib.h>
// score    3*4  
#define M	3
#define N	4

float func_ave(int *p, int n)
{
	int i;
	float sum = 0;
	for(i = 0 ; i < n ; i++)
		sum += p[i];
	return  sum / n;
}
#if 0
int func_find(int (*p)[N],int m,int n)
{
	int id,i;
	printf("Pease enter the ID[0,2]:");
	scanf("%d",&id);

	if(id < 0 || id > 2)
		return -1;
	
	for(i = 0 ; i < n;i++)
		printf("%d ",p[id][i]);
	printf("\n");
	return 0;
}

#else

int * func_find(int (*p)[N],int m,int n)
{
    int id,i;
    printf("Pease enter the ID[0,2]:");
    scanf("%d",&id);

    if(id < 0 || id > 2)
        return NULL;
    
	return *(p+id);

}
#endif

int main()
{
	int a[M][N] = {{98,78,84,91},{99,78,85,88},{88,89,90,100}};
	int *retp;
	int i;

	printf("AVE = %f\n",func_ave(*a,M*N));
	retp = func_find(a,M,N);
	if(retp)
	{
		for(i = 0 ; i < N ;i++)
      	  printf("%d ",retp[i]);
 	   printf("\n");	
	}
	else
	{
		printf("Can not find.\n");
	}
	exit(0);
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值