第5章 函数

news2024/9/30 19:42:50

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

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

🌟本文由卿云阁原创!

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

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

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

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


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

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

#include<stdio.h>
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 <stdio.h>
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 <stdio.h>
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<stdio.h>
/*注意形参的形式,加[],表明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<stdio.h>
/*注意形参的形式,加[],表明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<stdio.h>
/*注意形参的形式,加[],表明mystr是一个存放地址的变量,这个地址所在空间存放的是char型的数据*/
int sort(int a[],int len)  
{
	int i,j,temp;
	for(i=0;i<len-1;i++)
	    for(j=0;j<len-1-i;j++)
	    {
	    	if(a[j]>a[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<stdio.h>
int sum(int a[][3],int r,int l)
{
	int i,j;
	int sum;
	for(i=0;i<r;i++)
	    for(j=0;j<l;j++)
	        sum=sum+a[i][j];
	return sum;
}
int main()
{
  int Arr[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};
  int su;
  su=sum(Arr,4,3);
  printf("数组的元素的和:%d",su);	                      
  return 0;
}

 

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<stdio.h>
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<stdio.h>
float avgScore(float a[],int b) 
{   float sum=0,avg=0;
    int i;
    for(i=0;i<b;i++)
        sum=sum+a[i];
    avg=sum/b;
	return avg;
}

int main()
{
  float score1[5]={98.5,97,91.5,60,55}; 
  float score2[10]={67.5,89.5,99,69.5,77,89.5,76.5,54,60,99.5}; 
  printf("The average of class A is %-6.2f\n", avgScore (score1,5)); 
  printf("The average of class B is %-6.2f\n", avgScore (score2,10));	                      
  return 0;
}

函数的递归调用

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

(2)解决子问题

(3)基础解

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

#include<stdio.h>
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<stdio.h>
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<stdio.h>
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<stdio.h>
//外部变量 
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);
 
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/128483.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件测试复习

软件测试定义 什么是软件测试 使用人工或自动手段运行或测定某个系统的过程&#xff0c;其目的在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别。软件测试就是“验证”和“确认”活动构成的整体。 软件测试的作用 验证软件需求和功能是否得到完整实现验证软…

花房集团成功上市,构建互联互通的在线社交娱乐生态

近日&#xff0c;花房集团正式在香港联合交易所主板上市。对于花房集团而言&#xff0c;登陆港股市场是新的征程、新的起点。 可以看到&#xff0c;花房集团在稳固“直播社交”业务基本盘的同时&#xff0c;持续探索元宇宙领域&#xff0c;上市当日首次发布了最新的战略方向“娱…

Apriori算法的python实现

文章目录函数介绍实例Step1:整理数据Step2:挖掘频繁项集Step3:挖掘关联规则Step4:进一步筛选规则作者&#xff1a;李雪茸函数介绍 实现Apriori关联规则挖掘是借助mlxtend第三方包&#xff0c;使用步骤如下&#xff1a; 1、调用apriori算法挖掘频繁项集&#xff0c;apriori()中…

十一、通过程序向闪存文件系统写入信息

1、闪存 (1)每一个esp8266都配有一个闪存&#xff0c;闪存就类似于一个小硬盘。 (2)我们编译上传的程序就存储在闪存中。 (3)闪存的全称是Serial Peripheral Interface Flash File System&#xff08;SPIFFS&#xff09;&#xff0c;串行外设接口Flash文件系统。 (4)闪存除…

docker高级篇-docker-compose容器编排介绍及实战

Docker-compose是什么?能干嘛?解决了哪些痛点? 是什么? Docker-compose是Docker官方推出 的一个工具软件,可以管理多个Docker容器组成的一个应用。你需要编写一个一个YAML格式的配置文件:docker-compose.yml。写好多个容器之间的调用关系。然后,只需要一个命令,就能…

嵌入式:ARM汇编语言程序设计基础教程

文章目录汇编语言程序设计的步骤顺序程序设计分支程序设计循环程序设计子程序设计寄存器传递参数方式存储区域传递参数方式堆栈传递参数方式汇编语言程序设计的步骤 ① 合理地分配存储器资源&#xff0c;将前述的目标系统‘数据结构模型’表示到各存储器单元。 ② CPU寄存器数…

pytorch集锦(4)-ResNet图像分类

目录加载训练好的模型下载模型权重图像预处理打开要预测的图像传递图像运行模型下载数据打开imagenet_classes.txt预测结果前5个最可能分类加载训练好的模型 pip3 install pillow>>> from torchvision import models >>> dir(models) [AlexNet, DenseNet, I…

有哪些简单、免费、适合中小型企业的 CRM 软件?

有哪些简单、免费、适合中小型企业的 CRM 软件&#xff1f; 为了更好的管理客户&#xff0c;和客户建立持续的良好关系&#xff0c;很多企业开始采用CRM软件。 但是免费且好用的CRM软件并不多见&#xff0c;因此选择一款适合中小型企业的CRM软件需要注意以下方面。 1. 知己&…

微信小程序布局图片上面显示文字

实现的效果&#xff1a; xml布局文件&#xff1a; <view class"image-parent"> <image classimage modewidthFix src../../images/answer-ad.png></image> <view class"child">child</view> </view> css文件&a…

26-剑指 Offer 29. 顺时针打印矩阵

题目 输入一个矩阵&#xff0c;按照从外向里以顺时针的顺序依次打印出每一个数字。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] [[1,2,3], [4,5,6], [7,8,9]] 输出&#xff1a;[1,2,3,6,9,8,7,4,5] 示例 2&#xff1a; 输入&#xff1a;m…

年终摸鱼:用高效的技术对抗繁琐的运维日常

2022年的最后一周 免疫系统直接把我带入高端局 霍一下子烧到40&#xff0c; 差点起来写遗嘱 好在第二天就降到了38.5 现在除了有点咳嗽、头昏、无力。。。 也没啥大问题——到底是年轻。 谁能想到疫情蔓延三年&#xff0c; 所有人还要来一场集体“免疫”呢&#xff1f; …

太力科技冲刺上市:石正兵为实控人,股东刘健为失信被执行人

近日&#xff0c;广东太力科技集团股份有限公司&#xff08;下称“太力科技”&#xff09;在深圳证券交易所递交招股书&#xff0c;准备在创业板上市。 本次冲刺上市&#xff0c;太力科技计划募资5.42亿元&#xff0c;其中3.20亿元用于太力武汉生产及物流中心建设项目&#xf…

高频次收集个人信息情况分析

奇安信 2022年第二季度App收集个人信息检测报告 下载地址 2022年第二季度 APP收集个人信息 检测报告 奇安信 病毒响应中心 研究背景 随着互联网和移动设备的发展&#xff0c;手机已成为人人都拥有的设备&#xff0c;其中各式各样的APP更是丰富了人们的生活&#xff0c;从社交…

TCP/IP网络编程(11) 套接字和标准IO

标准IO函数的优点 标准IO函数具备两大优点&#xff1a; 标准IO函数具备良好的移植性标准IO函数可以利用缓冲提高性能 不仅是IO函数&#xff0c;所有的标准函数都具有很好的移植性&#xff0c;为了支持所有的操作系统和编译器&#xff0c;这些函数都是按照ANSI C标准定义的&am…

大数据和数据可视化为什么这么受欢迎?

“大数据”已经从一个概念性质的词语转变为了对经济社会各个领域都具有渗透影响的事物&#xff1b;并且随着互联网技术的持续发展&#xff0c;大数据所产生的影响呈现出了范围不断扩大&#xff0c;深度持续扩展的新特征。 大数据时代就是指人们的生产、生活和工作中出现更多的…

windows VS2015 Steup 打包发布软件并附带动态链接库dll

打包&#xff1a; 方法一&#xff1a;VS 2015 Steup 打包发布软件_柠檬野生菌的博客-CSDN博客_vs2015 exe发布 1、插件下载Microsoft Visual Studio 2015 Installer Projects 工具->扩展与更新->联机->搜索 Installer Projects 2、安装 关掉VS 双击下载好的 .exe …

ArcGIS基础实验操作100例--实验21按区域修改栅格值

本实验专栏来自于汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 基础编辑篇--实验21 按区域修改栅格值 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff08;1&…

8、多线程

文章目录8、多线程8.1 线程中的进程8.2 进程中的线程8.3 自己的第一个线程8.4 线程的生命周期8.5 线程执行方式&#xff08;串行和并发&#xff09;8.6 线程休眠8.7 工作8.8 线程池8.9 同步8.10 wait和sleep8.11 线程安全问题Java零基础极速入门-讲师&#xff1a;海波 失败&…

一文快速上手Swagger

目录 1.什么是Swagger&#xff1f; 2.Swagger的作用&#xff1f; 3.Swagger的使用方法 &#xff08;1&#xff09;一般是在Spring Boot项目中进行集成&#xff0c;只需在项目中引入springfox-swagger2和springfox-swagger-ui依赖即可 &#xff08;2&#xff09;配置Swaage…

[虚幻引擎][UE][UE5]在UE中画一个线框球,网格连接画球,高阶画球并操控

[虚幻引擎][UE][UE5]在UE中画一个线框球&#xff0c;网格连接画球&#xff0c;高阶画球并操控1.材质法2.绘制调试球体3.网格连接4.高阶画球并操控1.材质法 缺点&#xff1a;是实体的&#xff0c;只能欺骗视觉&#xff0c;实际还是一个实体体积球&#xff0c;往里放东西显示不出…