【无标题】

函数的定义与使用

为什么要用函数
1.避免代码冗长
2.模块化的设计思路
3.按功能划分,每个函数代表一个功能,而函数的名字要体现函数的功能含义,类似变量标识符y=f(x)
函数要先定义再使用
三要素:1.函数名——体现功能
2.参数列表——参数的个数按照需求自行定义
3.返回值
函数体——执行什么样的功能,涉及的处理代码叫做函数体

函数的调用

  一.定义无参数函数
  二.定义有参数有返回值的函数
#include<stdio.h>
int add(int x,int y,int z)
{
	int data;
	data=x+y+z;
	return data;
}
int main()
{
	int x;
	int y;
	int z;
	int fret;
	puts("请输入一个数:");
	scanf("%d",&x);
	puts("请再输入一个数:");
	scanf("%d",&y);
	puts("请再输入一个数:");
	scanf("%d",&z);
	fret=add(x,y,z)+100;
	printf("%d+%d+%d=%d\n",x,y,z,add(x,y,z));
	printf("fret=%d\n",fret);
	return 0;
}

要点:1.int add(2,3)——带了返回值类型
2.add(int a,int b)——形参带类型

函数的嵌套

输入四个数,函数方式找出最大值

#include<stdio.h>

int getTheBigFromTwo(int data1,int data2)
{
       int Bigger;
       bigger=data1>data2?data1:data2;

       return bigger;
}
int getMaxDataFromFour(int a,int b,int c,int d)
{
     int max;
     max=getTheBigFromTwo(a,b);
     max=getTheBigFromTwo(max,c);
     max=getTheBigFromTwo(max,d);

    return 0;
}

int main()
{
    int data1;
    int data2;
    int data3;
    int data4;
    
    puts("please Input Four nums: ");
    scanf("%d%d%d%d",&data1,&data2,&data3,&data4);
    getMaxDataFromFour(data1,data2,data3,data4);
    printf("the biggest is %d\n",theBigone);
    return ;
}
函数的递归
#include<stdio.h>

int getAge(int currpersonnum)
{
	int age;
	if(currpersonnum==1){
		age=10;
	}else{
		age=getAge(currpersonnum-1)+2;
	}
	return age;
}



int main()
{
	int age;
	int num;
	printf("请输入第几个学生的年龄: \n");
	scanf("%d",&num);
	
	age=getAge(num);
	printf("第%d学生的年龄%d\n",num,age);
	return 0;
}
#include<stdio.h>
int getFactorial(int num)
{
	int result;
	if(num==1){
		  result=1;
	}else{
		result=getFactorial(num-1)*num;
	}
	return result;
}


int main()
{ 
    int num;
	int ret;
	printf("请输入你的阶乘数:\n");
	scanf("%d",&num);
	ret=getFactorial(num);
	printf("%d的阶乘:%d\n",num,ret);
	return 0;

数组作为函数的参数
    数组名当做函数实际参数
    数组也是值传递,传递的是地址

有两个班的同学,分别是个人和5个人,分别求这两个班的平均分

#include<stdio.h>

void initArry(int arry[],int len)
{
	int i;
	for(i=0;i<len;i++){
		printf("请输入第%d个学生的成绩:\n",i+1);
		scanf("%d",&arry[i]);
	}
	puts("\n done\n");
}

void printArry(int arry[],int len)
{
	int i;
	printf("总人数%d个\n",len);
	for(i=0;i<len;i++){
		printf("%d ",arry[i]);
	}
	puts("\n done\n");
}

float getAverage(int arry[],int len)
{
	int i;
	float aver=0.0;
	int sum=0;//总分这个变量一定手动初始化为0,默认值可能是一个大数可能会影响结果
	for(i=0;i<len;i++){
		sum+=arry[i];
	}
	aver=(float)sum/len;
	return aver;
}

int main()
{
	int classOne[5];
    int classTwo[10];
	float averOfClassOne;
	float averOfClassTwo;
	
	int lenofclassOne=sizeof(classOne)/sizeof(classOne[0]);
	int lenofclassTwo=sizeof(classTwo)/sizeof(classTwo[0]);
	
	initArry(classOne, lenofclassOne);
	initArry(classTwo,lenofclassTwo);
	
	printArry(classOne, lenofclassOne);
	printArry(classTwo,lenofclassTwo);
	
	averOfClassOne=getAverage(classOne, lenofclassOne);
	averOfClassTwo=getAverage(classTwo,lenofclassTwo);
	
	printf("一班的平均分:%.2f\n",averOfClassOne);
	printf("二班的平均分:%.2f\n",averOfClassTwo);
	return 0;
}

二维数组
合理写法:int arr[2][3]
int arr[] [3]
不合理写法:int arr[][]或 int arr[3][]

有3*4矩阵,初始化它并输出,然后求最大值并输出

#include<stdio.h>

void printArrayDouble(int array[][4],int ihang,int ilie )
{
	int i;
	int j;
	for(i=0;i<ihang;i++){
		for(j=0;j<ilie;j++){
			printf("%d ",array[i][j]);
		}
		putchar('\n');
	}
   
}

void initArrayDouble(int array[][4],int ihang,int ilie)
{
	int i;
	int j;
	for(i=0;i<ihang;i++){
		for(j=0;j<ilie;j++){
			printf("请输入第%d行,第%d列的值\n",i+1,j+1);
			scanf("%d",&array[i][j]);
		}
		putchar('\n');
	}
   
}

int getMaxDataFromArrayDouble(int array[][4],int ihang,int ilie)
{
	int i;
	int j;
	int max;
	max=array[0][0];
	for(i=0;i<ihang;i++){
		for(j=0;j<ilie;j++){
			if(max<array[i][j]){
				max=array[i][j];
			}
		}
	}
   return max;
}

int main()
{
	int max;
	int array[3][4];
	
	initArrayDouble(array,3,4);
	printArrayDouble(array,3,4);
	
	max=getMaxDataFromArrayDouble(array,3,4);
	printf("二维数组最大的值:%d\n",max);
	return 0;
}
全局变量
#include<stdio.h>

int max;
int min;


float getResult(int arr[],int len)
{
	int i;
	int sum=0;//一定要赋值,不然系统赋得值偏大
	max=min=arr[0];
	for(i=0;i<len;i++){
		if(max<arr[i]){
			max=arr[i];
		}
		if(min>arr[i]){
			min=arr[i];
		}
		sum+=arr[i];
	}
	return (float)sum/len;
}



int main()
{
	
	int scores[]={66,87,98,35,65,78,99,31,59,100};
	float aver;
	
	aver=getResult(scores,sizeof(scores)/sizeof(scores[0]));
	printf("班级的最高分是:%d\n最低分是%d\n,平均分是%.2f\n",max,min,aver);
	return 0;
	
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值