C语言学习第8天函数

1. 关于函数的一些小总结(50.5.7)

  • demo_ex_warning.c 被调用函数应在主函数之前,否则会warning警告,但也不用怕,可以先定义(被调用)函数就好
  • 被调函数中没有输出时,直接进入主函数,按先后函数顺序输出对应执行结果
#include 

int getMaxDataFromTwo(int x, int y);//终端warning不怕,先定义函数即可

int main()
{
	int data1;
	int data2;
	int max;
	//输入两个数
	//提示输入
	puts("请输入两个数:");
	//获取输入
	scanf("%d%d",&data1,&data2);
	//函数调用
	max = getMaxDataFromTwo(data1, data2);
	//输出结果
	printf("两个数据是%d,%d,大数是:%d\n",data1,data2,max);
	return 0;
}

int getMaxDataFromTwo(int x, int y)
{
	//int z;
	/*
	if(x > y){
		z = x;
	}else{
		z = y;
	}
	*/
	//z = x>y?x:y;
	return x>y?x:y;
	//return z;
}

2. 函数嵌套及编码实战(51.5.8)

  • demo_ex_nested.c 先写主调函数,再写被调函数,再写被调的被调即嵌套函数
#include 

int getTheBiggerFromTwo(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 = getTheBiggerFromTwo(a,b);
	max = getTheBiggerFromTwo(max,c);
	max = getTheBiggerFromTwo(max,d);
	
	return max;
}
int main()
{
	int data1;
	int data2;
	int data3;
	int data4;
	int max;
	
	puts("Please Input Four nums:");
	scanf("%d%d%d%d",&data1,&data2,&data3,&data4);
	max = getMaxDataFromFour(data1,data2,data3,data4);
	printf("The biggest num is %d.\n",max);
	return 0;
}

3. 递归函数编码实战(52.5.9)

不推荐在工作中使用,除非算法或以下特定场景或计算!n n的阶乘时,否则工作中开会会被批斗
  • demo_ex_recursion.c
#include 

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

4. 求阶乘案例(53.5.10)

面试中的笔试题,现场写代码
  • demo_ex_recursion2.c 输出(16以下的)阶乘
#include 
#include  
 
unsigned long int getFactorial(int num)
{
	long int result;
	if(num >= 17){
		printf("越界\n");
		exit(-1);
	}
	if(num == 1){
		result = 1;
	}else{
		result = getFactorial(num-1) * num;
	}
	return result;
} 
int main()
{
	int num;
	unsigned long int ret;
	
	puts("请输入要求的阶乘数:");
	scanf("%d",&num);
	ret = getFactorial(num);
	printf("%d阶乘是:%ld\n",num,ret);
	printf("%d\n",sizeof(long int));
	return 0;
}

5. 数组和函数开发初见(55.5.11)

  • demo_arrayfunc.c 数组名当做函数实际参数:调用函数输出数组内的数值
#include 

/*void printfData(int data)
{
	printf("%d\n",data);
}
int main()
{
	int array[5]={1,2,3,4,5};
	printfData(array[3]);
	return 0;
}*/

void printfData(int data[5])
{
	int i;
	for(i=0;i<5;i++){
		printf("%d ",data[i]);
	}
	printf("\n");
}
int main()
{
	int array[5]={10,2,30,4,50};
	printfData(array);
	return 0;
}

6. 数组传参中关于形式参数的秘密(56.5.12)

  • demo_arrayfunc2.c 形参中传递的是数组的首地址
#include 

void printArray(int array[], int len)//形参中不存在数组的概念,即便中括号约定了数组的大小,也无效
							//传递是一个地址,是数组的首地址
{
	printf("printArr: array(首地址)的内存大小是:%d\n",sizeof(array));//在os用8个字节来表示一个地址
	int i;
	for(i=0;i<len;i++){
		printf("%d ",array[i]);
	}
	putchar('\n');
}
int main()
{
	int len;
	int array[5] = {3,4,5,6};
	len = sizeof(array)/sizeof(array[0]);
	
	printf("main中array的内存大小是:%d\n",sizeof(array));
	printArray(&array[0],len);//第一个元素的地址也是数组的首地址
	//printArray(array,len);//数组名指向整个数组的首地址
	return 0;
}

7. 数组实参很有意思的问题启发(57.5.13)

  • demo_changedata.c 局部变量传递的是数值,内存空间是不同的
#include 

void changeData(int data)//数值传递,操作的是不同的内存空间
{
	data = data + 100;
	printf("address: %p,dataInfunc = %d\n",&data,data);
}

int main()
{
	int data = 10;
	changeData(data);
	printf("address: %p,data = %d\n",&data,data);
}
  • demo_changedata2.c 数组名传递的是内存空间地址,所以其数值也相等
#include 

void changeData(int data[])//操作一定是相同的内存空间,数组名当作实参,到底传了什么(地址)
{							//所以,形参元素大小的值才和实参元素大小的值相同
	data[0] = data[0] + 100;
	printf("address: %p,dataInFunc = %d\n",&data[0],data[0]);
	data[1] = data[1] + 102;
	printf("address: %p,dataInFunc = %d\n",&data[1],data[1]);
}

int main()
{
	int data[2] = {10,20};
	changeData(data);
	printf("address: %p,data = %d\n",&data[0],data[0]);
	printf("address: %p,data = %d\n",&data[1],data[1]);
}

8. 数组实战之计算不同班级学生的平均分(58.5.14)

  • demo_ex_aver.c 把初始化和打印写一起了:
#include 

void initArray(int array[], int len)
{
	int i;
	for(i = 0;i<len; i++){
		printf("请输入第%d个学生的成绩:\n",i+1);
		scanf("%d",&array[i]);
	}
	puts("done\n");
	
	printf("总人数%d个\n该班分数为:\n",len);
	for(i = 0;i<len; i++){
		printf("%d ",array[i]);
	}
	puts("\ndone\n");
}

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

	for(i = 0;i<len; i++){
		sum += array[i];//sum=sum+array[i]
	}
	aver = (float)sum/len;
	return aver;
}

int main()
{
	int classOne[5];
	int classTwo[8];
	float averOfClassOne;
	float averOfClassTwo;
	
	int lenOne = sizeof(classOne)/sizeof(classOne[0]);
	int lenTwo = sizeof(classTwo)/sizeof(classTwo[0]);
	
	puts("请输入一班的成绩:");
	initArray(classOne,lenOne);
	puts("请输入二班的成绩:");
	initArray(classTwo,lenTwo);//API  application Interface
	
	averOfClassOne = getAverage(classOne,lenOne);
	averOfClassTwo = getAverage(classTwo,lenTwo);
	
	printf("一班的平均分:%.2f\n",averOfClassOne);
	printf("二班的平均分:%.2f\n",averOfClassTwo);
	return 0;
}

C语言学习第8天函数_第1张图片

  • demo_ex_aver_.c 把初始化和打印写分开了:
#include 

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

void printArray(int array[],int len)
{
	int i;
	printf("总人数%d个\n该班分数为:\n",len);
	for(i = 0;i<len; i++){
		printf("%d ",array[i]);
	}
	puts("\n done\n");
}

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

	for(i = 0;i<len; i++){
		sum += array[i];//sum=sum+array[i]
	}
	aver = (float)sum/len;
	return aver;
}

int main()
{
	int classOne[5];
	int classTwo[8];
	float averOfClassOne;
	float averOfClassTwo;
	
	int lenOne = sizeof(classOne)/sizeof(classOne[0]);
	int lenTwo = sizeof(classTwo)/sizeof(classTwo[0]);
	
	puts("请输入一班的成绩:");
	initArray(classOne,lenOne);
	puts("请输入二班的成绩:");
	initArray(classTwo,lenTwo);//API  application Interface
	
	printf("一班的");
	printArray(classOne,lenOne);
	printf("二班的");
	printArray(classTwo,lenTwo);
	
	averOfClassOne = getAverage(classOne,lenOne);
	averOfClassTwo = getAverage(classTwo,lenTwo);
	
	printf("一班的平均分:%.2f\n",averOfClassOne);
	printf("二班的平均分:%.2f\n",averOfClassTwo);
	return 0;
}

C语言学习第8天函数_第2张图片

你可能感兴趣的:(c语言,学习,算法)