c语言(函数、数组与函数、全局变量)

#include <stdio.h>

//函数三要素:返回值,参数列表,功能


int test(int x)//形参,函数定义中的形参需要包含变量类型,函数被调用时才为形参申请内存,调用结束释放内存
{
	int y;
	printf("test函数内的x地址:%p,值:%d\n",&x,x);
	return y;
}

int main()
{
	int x;
	int y;
	
	puts("请输入x值");
	scanf("%d",&x);
	
	printf("主函数的x地址:%p,值:%d\n",&x,x);
	y=test(x);//实参
	
	
	return 0;
}

函数嵌套 测试:键入5个数输出最小值

#include <stdio.h>

//返回5个数中最大的一个

int getmaxtwo(int data1,int data2)
{
	int max;
	max = data1<data2?data1:data2; //三目运算
	
	return max;
}

int getmaxfive(int data1,int data2,int data3,int data4,int data5)
{
	int max;
	max = getmaxtwo(data1,data2);
	max = getmaxtwo(max,data3);
	max = getmaxtwo(max,data4);
	max = getmaxtwo(max,data5);
	return max;
}

int main()
{
	int max;
	int data1;
	int data2;
	int data3;
	int data4;
	int data5;
	
	printf("请输入五个数:\n");
	scanf("%d%d%d%d%d",&data1,&data2,&data3,&data4,&data5);
	max = getmaxfive(data1,data2,data3,data4,data5);
	printf("最大的是:%d\n",max);
	
	return 0;
}

递归法求阶乘

#include <stdio.h>


//阶乘
long int jiecheng(int n)
{
	long int y;
	
	if(n == 1)
	{
		y = 1;
	}
	else
	{
		y = jiecheng(n-1)*n;
		n--;
	}
	
	return y;
}

int main()
{
	int n;
	int long value;
	
	printf("请输入n的值:\n");
	scanf("%ld",&n);
	
	value = jiecheng(n);
	printf("n的阶乘为:%ld",value);
	return 0;
}

数组与函数:

#include <stdio.h>


//数组与函数
void printarr(int arry[],int len) //在形参中没有数组的概念,即便中括号约定了数组大小,也无效。
{                                 //传递的是一个地址,是数组的首地址
	int i;
	printf("该函数中arr的大小是:%d\n",sizeof(arry));//8个字节代表一个地址
	for (i = 0;i < len;i++)
	{
		printf("%d ",arry[i]);
	}
	putchar('\n');
}

int main()
{
	int len;
	int arry[5] = {3,4,5,6,7};
	len = sizeof(arry)/sizeof(arry[0]);
	printf("主函数中arry的大小是:%d\n",sizeof(arry));
	
	printarr(&arry[0],len);
	printarr(arry,len);//改写法给跟上面的效果一致;数组名代表整个数组的首地址
	return 0;
}

实例:求俩班平均成绩

#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("done");
}

void printarry(int arry[],int len)
{
	int i;
	printf("%d ",len);
	for(i=0;i<len;i++)
	{
		printf("%d ",arry[i]);
	}	
	puts("done");
}

float getaverage(int arry[],int len)
{
	int i;
	float aver = 0.0;
	int sum = 0;
	
	for(i=0;i<len;i++)
	{
		sum = sum+arry[i];
	}
	aver = (float)sum/len;
	return aver;
}

int main()
{
	int classone[5];
	int classtwo[10];
	float averageone;
	float averagetwo;
	
	int lenone = sizeof(classone)/sizeof(classone[0]);
	int lentwo = sizeof(classtwo)/sizeof(classtwo[0]);
	
	initarry(classone,lenone);
	initarry(classtwo,lentwo);
	
	printarry(classone,lenone);
	printarry(classtwo,lentwo);
	
	averageone = getaverage(classone,lenone);
	averagetwo = getaverage(classtwo,lentwo);
	
	printf("一班平均分:%f\n",averageone);
	printf("二班平均分:%f\n",averagetwo);
	
	return 0;
}

案例:( 找矩阵中的最大值)

#include <stdio.h>

//在3行2列的数组中找最大值

void initarrtwo(int arr[][4],int ihang,int jlie)
{
	int i,j;
	for(i=0;i<ihang;i++)
	{
		for(j=0;j<jlie;j++)
		{
			printf("请输入第%d行第%d列值:\n",i,j);
			scanf("%d",&arr[i][j]);
		}
	}	
}

int getmaxtwo(int arr[][4],int ihang,int jlie)
{
	int i,j;
	int max=arr[0][0];
	
	for(i=0;i<ihang;i++)
	{
		for(j=0;j<jlie;j++)
		{
			if(max<arr[i][j])
			{
				max = arr[i][j];
			}
		}
	}
	return max;
}


int main()
{
	int max;
	int arr[3][4];
	
	initarrtwo(arr,3,4);
	
	max = getmaxtwo(arr,3,4);
    //max = getmaxtwo(arr[0][0],3,4);//跟上一行一样
	printf("二维数组最大的是:%d\n",max);
	return 0;
}

全局变量

#include <stdio.h>

//相同时输出多个值,可采用全局变量

int max,min;//在所有函数前定义是全局变量;有风险

void initarr(int arr[],int len)
{
	int i;
	for(i=0;i<len;i++)
	{
			printf("请输入%d个值:\n",i);
			scanf("%d",&arr[i]);
	}	
}

float getresult(int arr[],int len)
{
	float sum=0.0;
	int i;
	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 arr[5];
	int len;
	len = sizeof(arr)/sizeof(arr[0]);
	float average;
		
	initarr(arr,len);
	average = getresult(arr,len);
	
	printf("最大:%d,最小:%d,平均:%.2f\n",max,min,average);
	return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值