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