第5章 函数
创始人
2024-05-03 06:39:56

🌞欢迎来到机器学习的世界 
🌈博客主页:卿云阁

💌欢迎关注🎉点赞👍收藏⭐️留言📝

🌟本文由卿云阁原创!

🌠本阶段属于练气阶段,希望各位仙友顺利完成突破

📆首发时间:🌹2021年3月12日🌹

✉️希望可以和大家一起完成进阶之路!

🙏作者水平很有限,如果发现错误,请留言轰炸哦!万分感谢!


目的:减少代码量,便于编程和调试。

比如:计算5!+8!+7!+10!的值,并输出结果。

#include
int fac(int n)
{   int i;int fac=1;for(i=1;i<=n;i++)fac=fac*i;return fac;
}
int main(void)
{int n;int sum;sum=fac(1)+fac(2)+fac(3);printf("sum=%d",sum);return 0; 
} 

调用函数的过程:

#include 
int max(int x,int y)
{return x>y?x:y;   //条件表达式求出x和y的最大值,用return 返回。
}
int main(void)
{int a,b,c;a=max(10,20);    //调用函数max,10、20为实参。b=max(15,19);    //再次调用函数max,15、19为实参。c=max(a,b);      //再次调用函数max,a、b为实参。printf("%d\n",c);  return 0;
}

   令y=a*a+b*bab是变量,定义一个函数,根据不同的ab值计算y的值,并在main函数中输入两个值,调用该函数,输出计算的结果。

#include 
int yum(int x,int y)
{return x*x+y*y;   //条件表达式求出x和y的最大值,用return 返回。
}
int main(void)
{int y;int a,b,c;printf("请输入a和b的值:\n");scanf("%d%d",&a,&b);c=yum(a,b);      //再次调用函数max,a、b为实参。printf("y=%d\n",c);  return 0;
}


数组作为函数参数传参

1.计算字符数组中字符串的长度

#include
/*注意形参的形式,加[],表明mystr是一个存放地址的变量,这个地址所在空间存放的是char型的数据*/
int MyStrlen(char mystr[])  
{int len=0;  //len存放字符串的长度。for(len=0; mystr[len]!='\0';len++); //用循环求串长,注意最后是空语句。return len;
}
int main(void)
{
char str[100];
gets(str);
printf("%d\n",MyStrlen(str)); //实参str的值所在地址存放char型数据。
return 0;
}

2.使得调用函数exchange后能把main函数中的两个数互换。

#include
/*注意形参的形式,加[],表明mystr是一个存放地址的变量,这个地址所在空间存放的是char型的数据*/
int exchange(int a[],int b[])  
{int temp;temp=a[0];a[0]=b[0];b[0]=temp;
}
int main(void)
{
int a=1;
int b=2;
printf("---调换前a,b的值:%d %d---\n",a,b); 
exchange(&a,&b);
printf("---调换前a,b的值:%d %d---\n",a,b); 
return 0;
}

3.写一个函数,用于对main函数中的元素类型为int型的一维数组进行排序,然后在main函数中进行调用,并输出排序后的数组各元素值。

#include
/*注意形参的形式,加[],表明mystr是一个存放地址的变量,这个地址所在空间存放的是char型的数据*/
int sort(int a[],int len)  
{int i,j,temp;for(i=0;ia[j+1]){temp=a[j];a[j]=a[j+1];a[j+1]=temp;}}
}
int main(void)
{int arr[10]={45,65,34,35,25,39,54,59,16,48};int i;sort(arr,10);printf("---原来的数组---\n"); for(i=0;i<10;i++)printf("%d ",arr[i]);putchar('\n');printf("---排序后的数组---\n"); for(i=0;i<10;i++)printf("%d ",arr[i]);return 0;
}


二维数组作为函数参数

1.定义一个函数,功能是计算一个4*3的二维矩阵中所有数据的和,并在main函数中调用,假设这个矩阵中的数据都是int型。

#include
int sum(int a[][3],int r,int l)
{int i,j;int sum;for(i=0;i

 

2.主调函数中定义有二维数组char str[5][10]; 看一下左边的实参数据类型和右边的形参数据类型是否一致?可作练习题思考。

  1. str          char ch[][10](元素类型是由10个char类型数据组成的一维数组类型)
  2. &str[0][0]    char ch[](元素类型是char类型)
  3. str[1]        char ch[](元素类型是char类型)
  4. str           char ch(不是,ch的元素类型是char类型)
  5. str[0]        char ch[](元素类型是char类型)
  6. str[0][0]      char ch(元素类型是char类型)
  7. str           char ch[][8](不是)

函数的嵌套调用

1.用函数的嵌套调用实现求四个值中的最大值。

#include
int max1(int a,int b) 
{return a>b?a:b;
}
int max2(int a,int b,int c,int d)
{int m;m=max1(a,b);m=max1(m,c);m=max1(m,d);return m;
}
int main()
{int ma;ma=max2(1,2,3,4);printf("四个数中最大的值:%d",ma);	                      return 0;
}

 

2.两个班的成绩数据以两个一维数组形式存放。编程计算两个班的平均成绩。

#include
float avgScore(float a[],int b) 
{   float sum=0,avg=0;int i;for(i=0;i

函数的递归调用

  (1)划分子问题(解决的方法是一样的)

(2)解决子问题

(3)基础解

1.定义一个递归函数,返回n!的值。

#include
int fac(int n)
{   if(1==n)return 1;//基础解 fac1=fac(n-1);//划分子问题 if(n!=1)return fac1*n;//用子问题解决主问题 
}
int main()
{int n=4;printf("n阶乘的值是:%d\n", fac(n));                    return 0;
}

 

2.一个递归函数,求一个int型一维数组中元素的最大值。

#include
int ArrayMax(int a[],int N)//求数组a中前N个元素的最大值
{int max;if (1==N) return a[0];     //基础解 max=ArrayMax(a,N-1);//划分子问题 if(max>a[N-1])  //在子问题解决的基础之上解决总问题。return max;else return a[N-1];
}
int main()
{int a[4]={1,2,3,4};printf("数组中的最大值是:%d\n", ArrayMax(a,4));                    return 0;
}

3.

#include
int add(int n)
{   int add1;if(1==n)return 1;//基础解 add1=add(n-1);//划分子问题 if(n!=1)return add1+n;//用子问题解决主问题 
}
int main()
{int n=4;printf("前四项的和:%d\n", add(n));                    return 0;
}

3.Hanoi(汉诺)塔问题。古代有一个梵塔,塔内有3个座A,B,C。开始时A座上有64个盘子,盘子大小不等,大的在下,小的在上。有一个老和尚想把这64个盘子借助B座从A座移都到C座,但规定每次只允许移动一个盘,且在移动过程中3个座上都始终保持大盘在下,小盘在上。要求编程输出移动盘子的过程。如图7-9所示为Hanoi塔示意图。

#include
//外部变量 
int a=0;
//主函数 
int main(){void hanoi(int i,char one,char two,char three);int n;printf("请输入盘子数:");scanf("%d",&n);hanoi(n,'A','B','C');printf("共需要%d步",a);return 0;
}//递归加嵌套函数 
void hanoi(int i,char one,char two,char three){void move(int x,int y);if(i==1)move(one,three);if(i!=1){hanoi(i-1,one,three,two);move(one,three);hanoi(i-1,two,one,three); 	}          
}//步骤和步数 
void move(int x,int y){a++;printf("%c-->%c\n",x,y);}

相关内容

热门资讯

北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...