函数嵌套和递归;数组形参和实参

本文介绍了C语言中的函数嵌套、递归、数组使用以及计算平均分的示例,包括如何传递数组作为参数,以及如何使用循环和条件语句实现相关功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 函数的嵌套

    #include <stdio.h>
    /*
    四个数求最大值,函数嵌套
    */
    
    int thebigger(int data1,int data2)
    {
    	int big;
    	big = data1>data2?data1:data2;
    	return big;
    }
    
    int thebiggest(int data1,int data2,int data3,int data4 )
    {
    	int max;
    	max = thebigger(data1,data2);
    	max = thebigger(max,data3);
    	max = thebigger(max,data4);
    	return max;
    }
    
    int main()
    {
    	int data1;
    	int data2;
    	int data3;
    	int data4;
    	int max;
    	puts("请输入4个数:");
    	scanf("%d%d%d%d",&data1,&data2,&data3,&data4);
    	
    	max = thebiggest(data1,data2,data3,data4);
    	
    	printf("最大数是%d",max);
    	return 0}
    
  • 递归

    #include <stdio.h>
    /*
    五个学生,第5个比第4个大2岁,第4个比第3个大2岁,
    第3个比第2个大2岁,第2个比第1个大2岁,
    第一个10岁,求第5个学生的年龄。
    */
    int getAge(int num)
    {
    	int age;
    	if(num==1){
    		age = 10;
    	}else{
    		age = getAge(num-1) + 2;
    	}
    	return age;
    }
    int main()
    {
    	int age;
    	int num;
    	puts("你想知道第几个学生的年龄:");
    	scanf("%d",&num);
    	age = getAge(num);
    	
    	printf("第%d个学生的年龄是:%d",num,age);
    	
    	return 0;
    }
    
  • 阶乘

    #include <stdio.h>
    /*
    阶乘
    */
    int jiecheng(int num)
    {
    	int ret;
    	if(num==1){
    		ret=1;
    	}else{
    		ret= num*jiecheng(num-1);
    	}
    	return ret;
    }
    int main()
    {
    	int num;
    	int result;
    	
    	puts("你想求几的阶乘:");
    	scanf("%d",&num);
    	result = jiecheng(num);
    	printf("%d的阶乘是%d\n",num,result);
    	
    	return 0;
    }
    
  • 函数&数组

    void printArray(int array[3])
    {
    	int i;
    	for(i=0;i<3;i++){
    		printf("%d ",array[i]);
    	}
    	putchar('\n');
    	return 0;
    }
    

    在这个打印数组的函数中,定义的形式参数为数组,但是形式参数中不存在数组的概念,即便[ ]中约定了数组的大小,也无效。实际上传递的是一个地址,是数组的首地址。(还未学习指针)

    在OS中一般一个地址占8个字节,32位。

    数组名代表数组的首地址,第一个元素的地址也代表数组的首地址。

  • 班级平均分

    #include <stdio.h>
    /*
    一个班有五个学生,一个班有10个学生,求这两个班的平均分。
    */
    
    void initArray(int a,int class[],int len)
    {
    	printf("请输入第%d班的成绩:\n",a);
    	for(int i=0;i<len;i++){
    		printf("请输入第%d个学生的成绩:\n",i+1);
    		scanf("%d",&class[i]);
    	}
    	puts("输入完毕!");
    }
    
    void printArray(int class[],int len)
    {
    	printf("%d班学生成绩为:");
    	for(int i = 0;i<len;i++){
    		printf("%d ",class[i]);
    	}
    	putchar('\n');
    }
    float averScore(int class[],int len)
    {
    	float averScore;
    	int sum=0;
    	for(int i=0;i<len;i++){
    		sum = sum + class[i];
    	}
    	averScore = (float)sum/len;
    	
    	return averScore;
    }
    int main()
    {
    	int classOne [5];
    	int classTwo [10];
    	int lenOne = sizeof(classOne)/sizeof(classOne[0]);
    	int lenTwo = sizeof(classTwo)/sizeof(classTwo[0]);
    	float averOne ;
    	float averTwo ;
    	
    	initArray(1,classOne,lenOne);
    	initArray(2,classTwo,lenTwo);
    	
    	printArray(classOne,lenOne);
    	printArray(classTwo,lenTwo);
    	
    	averOne = averScore(classOne,lenOne);
    	averTwo = averScore(classTwo,lenTwo);
    	
    	printf("1班平均分为:%.2f\n",averOne);
    	printf("2班平均分为:%.2f\n",averTwo);
    	
    	return 0;
    }
    

    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值