C语言程序设计P5-2【应用函数进行程序设计 | 第二节】——知识要点:函数的参数及返回值和函数的调用及声明
知识要点:函数的参数及返回值和函数的调用及声明
视频:
目录
一、任务分析
二、必备知识与理论
三、任务实施
一、任务分析
1.求x的n次方的值也就是求n个x的乘积,可把x和n作为函数的形参,定义一个函数power来完成这个功能;
2.主调函数里提供实参,通过函数调用将实参的值传递给形参,调用完成后,power函数将所求的x的n次方的值作为返回值返回主调函数;
3.数据从主调函数里传递,可以增加程序的灵活性。
二、必备知识与理论
1.函数的参数
函数的参数用于建立函数之间的数据联系。当一个函数调用另一个函数时,实际参数的值会传递给形式参数,以实现主调函数与被调函数之间的数据通信。同时,函数参数的运用还可以提高函数的灵活性和通用性。
(1)形式参数和实际参数
形式参数(简称形参)是指在定义函数时,跟在函数名后面的小括号中的变量名。实际参数(简称实参)是指调用函数时,跟在函数名后面的小括号中的表达式。
(2)参数的传递
在调用函数时,主调函数和被调函数之间有数据的传递——实参传递给形参。
关于形参与实参的说明:
(1)在定义函数中指定的形参变量,在未出现函数调用时,它们并不占内存中的存储单元。只有在发生函数调用时,函数中的形参才被分配内存单元。在调用结束后,形参所占的内存单元也被释放。
(2)实参可以是常量、变量、表达式、函数等,无论实参是何种类型的变量,在进行调用时,它们都必须具有确定的值,以便在调用时将实参的值赋给形参,因此,实参在使用前必须事先赋值。
(3)实参和形参,名称可相同也可不同,但实参与形参的类型应一致,参数个数、对应顺序上也必须保持一致,否则,会发生“类型不匹配”的错误。在C语言中,字符型数据与0~255之间的整型数据可以互相通用。
(4)实参向形参传递数据,有两种方式:
①数值传递,也称传数值,如常量值、变量值、表达式值、数组元素值、函数值等,这些值都是由用户程序决定。
②地址传递,也称传地址,如变量地址、指针、数组名所代表的地址等,值由系统分配决定,用户不能指定。当然,地址也是数值,是一个地址数据值。
③数值传递和地址传递的区别:只是传递的数据类型不同。
(5)实参变量对形参变量的数值传递属于单向传递,只由实参传给形参,而不能由形参传回来给实参。
(6)函数调用,如果是数值传递,传递后实参仍保留原值并不改变。如果是地址传 递,传递后实参地址的值也不会改变,但地址的内容可能会改变。
2.函数的返回值
通常,希望通过函数调用使主调函数能得到一个确定的值,这就是函数的返回值。下面对函数值作一些说明:
(1) return语句:函数的返回值是通过函数中的return语句获得的。return语句的一般形式为:
return(表达式);
return语句将被调用函数中的一个确定值带回主调函数中,如果需要从被调用函数带回一个函数值(供主调函数使用),被调用函数中必须包含return语句。如果不需要从被调用函数带回函数值可以不要return语句。
①return语句后面的括弧也可以不要,如“return(z);”与“return z;”等价。
②return后面的值可以是一个表达式,例如:任务一中的max函数可以改写为:
max(int x,int y){ return(x>y?x:y); }
这样的函数体更为简短,return语句的功能是计算表达式的值,并返回给主调函数。
③在函数中允许有多个return语句,但要求每个return后面的表达式的类型应相同。每次调用只能有一个return 语句被执行,因此只能返回一个函数值。
④如果被调函数中没有return语句,并不带回一个确定的、用户所希望得到的函数值,但实际上,函数并不是不带回值,而只是不带回有用的值,带回的是一个不确定的值。
(2)函数值的类型。既然函数有返回值,这个值当然应属于某一个确定的类型,应当在定义函数时指定函数值的类型。例如:
int max(int x,int y) /* 函数值为整型 */
double min(int x,int y) /*函数值为双精度型*/
C语言规定,凡不加类型说明的函数,一律自动按整型处理。为了便于以后代码在不同编译环境下重复使用,建议在定义时对所有的函数都要指定函数类型。
(3)在定义函数时指定的函数类型一般应该和return语句中的表达式类型一致。如果两者不一致,则以函数类型为准。对数值型数据,可以自动进行类型转换。即函数类型决定返回值的类型。
(4)对于“不带回值”的函数,应当使用“void”定义为“空类型”。这样,系统就保证在函数中不能使用return带回任何值。但系统仍然允许void类型函数使用return语句,此时语句的作用是结束函数的运行,返回到主调函数。
3.函数的调用
(1)函数调用的一般形式
函数定义一旦完成,我们就可以通过函数名来调用函数,执行函数体的内容,其过程与其它语言的子程序调用相类似。C语言中,函数调用的一般形式为:
函数名(实际参数表列);
如果是调用无参函数,则实参表列可以没有,但括号不能省略。实参表列中的参数可以是常量、变量或其它构造类型数据及表达式。如果实参表列包含多个实参,则各实参之间用逗号分隔。实参与形参的个数应相等,类型应匹配。实参与形参按顺序一一对应传递数据。
(2)函数调用的方式
在C语言中,按照函数在程序中出现的位置,函数的调用方式有三种:
①函数表达式:
②函数语句:
③函数实参:
4.函数的声明
(1)对被调用函数的声明在主调函数中调用另一函数(即被调用函数)需要满足如下条件:
①首先被调用的函数必须是已经存在的函数(是库函数或用户自己定义的函数)。
②如果使用库函数,一般还应该在本文件开头用#include命令将调用有关库函数时所需用到的信息包含到本文件中来。例如,前面已经使用过的命令:
#include <stdio.h> 也可以写成 #include "stdio.h"
③如果使用用户自己定义的函数,而且该函数与主调函数在同一个文件中,一般还 应该在主调函数中对被调函数作声明,即向编译系统声明将要调用此函数,并将有关信息通知编译系统。
(2)函数声明的形式
从程序中可以看到对函数的声明与函数定义首部基本上是相同的,只差一个分号,因此可以简单地照写已定义的函数的首部,再加一个分号,就成为了对函数的“声明”。
函数声明的一般形式为:
函数类型 函数名(参数类型1,参数类型2,…,参数类型n);
函数类型 函数名(参数类型1 形参1,参数类型2 形参2,…,参数类型n 形参n);
其中,第一种形式是基本的形式。为了便于阅读程序,也允许在函数原型中加上参数名,就成了第二种形式。但编译系统不检查参数名,因此参数名是什么都无所谓,并不要求和函数的定义处保持一致。
(3)函数声明的位置:
三、任务实施
编写一函数,求x的n次方的值,其中n是整数。
算法分析:
(1)求x的n次方的值也就是求n个x的乘积,可把x和n作为函数的形参,定义一个函数power来完成这个功能。
(2)主调函数里提供实参,通过函数调用将实参的值传递给形参,调用完成后,power函数将所求的x的n次方的值作为返回值返回主调函数。
(3)power函数中用循环结构来实现该算法。
#include <stdio.h>long power(int x,int n) /* 函数定义 */{ int i;long p=1;for(i=1;i<=n;i++)p*=x;return p;}main() /* 主调函数 */{ int x,n;long y;printf("Enter two numbers: x,n!\n");scanf("%d,%d",&x,&n); y=power(x,n); /* 函数调用 */printf("Value=%ld\n",y);}
运行结果如下:
Enter two numbers: x,n!
2,10↙
Value=1024
注意:本程序中power函数的定义在主调函数main之前,所以在程序中省略了对power函数的声明。
相关文章:
C语言程序设计P5-2【应用函数进行程序设计 | 第二节】——知识要点:函数的参数及返回值和函数的调用及声明
知识要点:函数的参数及返回值和函数的调用及声明 视频: 目录 一、任务分析 二、必备知识与理论 三、任务实施 一、任务分析 1.求x的n次方的值也就是求n个x的乘积,可把x和n作为函数的形参,定义一个函数power来完成这个功能&am…...
【LeetCode】169.多数元素
题目连接: https://leetcode.cn/problems/majority-element/solutions/2362000/169-duo-shu-yuan-su-mo-er-tou-piao-qing-ledrh/?envTypestudy-plan-v2&envIdtop-interview-150 题目描述: 思路一: 使用哈希表unordered_map记录每个元…...
0x0118消息 WM_SYSTIMER
0x0118消息就是WM_SYSTIMER 编辑框出现输入光标时,产生的消息. 0x0118 would be the undocumented WM_SYSTIMER, which appears to be used for caret blinks. 0x0118是一个undocument 消息, 微软没有记录。 但在一些库的源码中可以看到,比如ATL的库文…...
【Linux内核】Hello word程序
创建测试目录 mkdir -p ~/develop/kernel/hello-1 cd ~/develop/kernel/hello-1 创建MakeFile文件和内核.c文件 nano Makefile nano hello-1.c 编写内容 /* * hello-1.c - The simplest kernel module. */ #include <linux/module.h> /* Needed by all modules */…...
黑马redis
Redis的多IO线程只是用来处理网络请求的,对于读写操作命令Redis仍然使用单线程来处理 Redisson分布式锁实现15问 文章目录 主线程和IO线程是如何协作的Unix网络编程中的五种IO模型Linux世界一切皆文件生产上限制keys *、flushdb、flushall等危险命令keys * 遍历查询100W数据花…...
Robust Depth Enhancement via Polarization Prompt Fusion Tuning
paper:论文地址 code:github项目地址 今天给大家分享一篇2024CVPR上的文章,文章是用偏振做提示学习,做深度估计的。模型架构图如下 这篇博客不是讲这篇论文的内容,感兴趣的自己去看paper,主要是分享环境&…...
集合框架(3)Map
Map接口 现实生活与开发中,我们常会看到这样的一类集合:用户ID与账户信息、学生姓名与考试成绩、IP地址与主机名等,这种一一对应的关系,就称作映射。Java提供了专门的集合框架用来存储这种映射关系的对象,即java.util…...
Java反射机制—Class
Java反射机制是指在运行时动态地获取类的信息以及操作类的成员变量、方法和构造方法的能力。反射机制通过使用Class类来实现,Class类是Java中表示类的类。 通过反射机制,我们可以在运行时动态地创建对象、调用方法、访问属性等。反射机制提供了一种强大…...
C# 新语法中的字符串内插$和{}符号用法详解
自C#6.0开始提供一个新的语法糖,即"$" 符号,配合“{}”使用,它的作用除了是对String.format的简化,还可设置其格式模板,实现了对字符串的拼接优化。 语法格式: $"string {变量表达式}” 语…...
WordPress 独立站是否需要 CDN:深度解析及必要性分析
WordPress 是目前全球最流行的开源内容管理系统(CMS),其易用性和丰富的插件生态使得它成为搭建独立站的首选。然而,随着流量的增加以及用户体验的需求,网站的速度和可靠性变得至关重要。在这种情况下,CDN&a…...
dell电脑开不了机怎么回事?戴尔电脑无法开机解决方法
dell戴尔电脑开不了机,这是很多使用dell电脑用户常遇到的问题。这种故障情况是由多种原因引起,包括硬件故障、软件问题或电源问题等等。dell电脑开不了机怎么办呢?下面便为大家介绍一下相关解决修复方法,帮助用户解决戴尔电脑无法…...
如何解决 JavaScript 中的数组方法不生效?
在 JavaScript 中,数组方法是常用的工具,可以用来对数组进行操作。常见的数组方法包括 push(), pop(), shift(), unshift(), map(), filter(), reduce() 等。 然而,有时候我们会遇到数组方法“失效”或者不按预期工作的情况。这个问题的原因…...
道可云人工智能元宇宙每日资讯|全国工商联人工智能委员会成立会议在南京举办
道可云元宇宙每日简报(2024年12月5日)讯,今日元宇宙新鲜事有: 全国工商联人工智能委员会成立会议在南京举办 全国工商联人工智能委员会成立会议日前在江苏省南京市举办。中央统战部副部长、全国工商联党组书记沈莹出席会议并讲话…...
华为HCIP-Datacom H12-821H12-831 (12月最新题库)
备考HCIP-datacom的小伙伴注意啦 !!! 2024年下半年12月份最新(H12-821和H12-831)题库带解析,有需要的小伙伴移动至文章末 H12-821: H12-831: 1.BGP 邻居建立过程的状态存在以下几种:那么建立一个成功的连接所经历的状态机顺序是 A、3-1-2-5-4 B、1-3-5-2-4 C、…...
模型案例:| 手机识别模型!
导读 2023年以ChatGPT为代表的大语言模型横空出世,它的出现标志着自然语言处理领域取得了重大突破。它在文本生成、对话系统和语言理解等方面展现出了强大的能力,为人工智能技术的发展开辟了新的可能性。同时,人工智能技术正在进入各种应用领…...
AWS创建ec2实例并连接成功
aws创建ec2实例并连接 aws创建ec2并连接 1.ec2创建前准备 首先创建一个VPC隔离云资源并且有公有子网 2.创建EC2实例 1.启动新实例或者创建实例 2.创建实例名 3.选择AMI使用linux(HVM) 4.选择实例类型 5.创建密钥对下载到本地并填入密钥对名称 6.选择自己创建的VPC和公有子网…...
短视频矩阵系统开发|技术源代码部署
短视频矩阵系统通过多账号运营管理、多平台视频智能分发等功能,助力企业实现视频引流、粉丝沉淀和转化。 短视频矩阵系统是一种创新的营销工具,它整合了多账号管理、视频智能分发、数据可视化等多种功能,为企业在短视频领域的发展提供了强大…...
C# GDI绘制的小熊进度条
C# GDI小熊进度条 1、添加自定义控件winform using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;…...
java书 核心技术+卷一+4
5.4 对象包装器与自动装箱 package 反射; import java.util.AbstractList; import java.util.ArrayList; public class test {public static void main(String[] args) {int a10;ArrayList<Integer> xxnew ArrayList<>();xx.add(a); //自动装箱int bxx.get(0);//…...
用Python开发一个经典打砖块小游戏
Python 的 pygame 库让我们可以轻松开发经典的小游戏。今天,我们将实现一个“打砖块”小游戏,带你体验游戏开发的乐趣。 一、游戏设计 1.1 游戏规则 玩家通过移动滑板接住弹起的球。球撞击砖块会让砖块消失,玩家得分。如果球落地,游戏失败。1.2 技术点 碰撞检测:检测球与…...
RTCMultiConnection 跨域问题解决
js套件地址 https://github.com/muaz-khan/RTCMultiConnection server套件地址 https://github.com/muaz-khan/RTCMultiConnection-Server 要解决的就是server代码的跨域问题 原装写法: 解决写法: // 喜欢组合语法的自己组 const io new ioServer.S…...
使用GO--Swagger生成文档
概述 在前后端分离的项目中,后端配置swagger可以很好的帮助前端人员了解后端接口参数和数据传输。go-swagger 是一个功能全面且高性能的Go语言实现工具包,用于处理Swagger 2.0(即OpenAPI 2.0)规范。它提供了丰富的工具集&#x…...
简易图书管理系统
javawebjspservlet 实体类 package com.ghx.entity;/*** author :guo* date :Created in 2024/12/6 10:13* description:* modified By:* version:*/ public class Book {private int id;private String name;private double pri…...
探索自然语言处理奥秘(NLP)
摘要 自然语言处理(NLP)是人工智能领域的一个重要分支,它致力于使计算机能够理解、解释和生成人类语言。这项技术让机器能够阅读文本、听懂语音,并与人类进行基本的对话交流。 通俗理解 自然语言处理(NLP)…...
刘铁猛C#入门 030 泛型,partial类,枚举,结构
泛型(generic)无处不在 为什么需要泛型:避免成员膨胀或者类型膨胀 正交性:泛型类型(类/接口/委托/......)泛型成员(属性/方法/字段/....类型方法的参数推断 泛型接口/类的 类型参数不只有一个泛型与委托、lambda表达式实现泛型接口类时 ,实现…...
迅雷 11.2.2 | 本地会员版,不限速下载,支持云盘
迅雷 v11.2.2 是一款带网盘功能的绿色版下载工具。双击“!)绿化”文件即可在桌面生成快捷图标。该版本干净简洁,仅保留下载和云盘两项核心功能。点击左上角的【新建】按钮,可新建链接下载任务。即使在网络条件一般的情况下(如50M宽带…...
P3131 [USACO16JAN] Subsequences Summing to Sevens S
题目描述 Farmer Johns NN cows are standing in a row, as they have a tendency to do from time to time. Each cow is labeled with a distinct integer ID number so FJ can tell them apart. FJ would like to take a photo of a contiguous group of cows but, due to a…...
股指期货基差为正数,这是啥意思?
在股指期货的世界里,有个挺重要的概念叫“基差”。说白了,基差就是股指期货的价格和它对应的现货价格之间的差价。今天,咱们就来聊聊当这个基差为正数时,到底意味着啥。 基差是啥? 先复习一下,基差 股指…...
docker自动拉取最新镜像并更新
目录 一、自动检查和更新所有正在运行的容器(每24h一次) 二、仅仅更新特定的容器(每24h一次) 三、指定更新间隔(300秒) 四、Watchtower 不会主动删除旧镜像,使用 --cleanup 参数在更新容器后…...
unicloud微信小程序云端一体项目DEMO
最近应客户需求,做了一个产品展示的云开发小程序,从了解云开发到应用到实际项目的产品demo,希望大家能从中获取到对自己有用的东西。 说下心得体会吧,一般小项目用这种云开发确实会减少很多开发成本,人力成本…...
Spring+Mybatis 整合所需准备
文章目录 SpringMybatis SpringMybatis 准备pom.xml 项目所需jar文件 <spring.version>4.0.2.RELEASE</spring.version> <!-- spring框架包 --><dependency><groupId>org.springframework</groupId><artifactId>spring-test</a…...
后端工程师成长路线图
后端开发工程师是软件开发领域中的一个重要角色,主要负责平台设计、接口设计和功能实现。他们的主要职责包括服务器端业务开发、架构设计、系统性能调优等。 后端开发工程师的工作内容通常涉及服务器开发、数据库管理、业务逻辑实现等方面。他们需要与前端工程…...
java -jar ./target/pay.war ./target/pay.war 中没有主清单属 为什么?
当你尝试使用 java -jar ./target/pay.war 来启动你的 WAR 包时,遇到的错误是因为该 WAR 包没有包含主清单属性(Main-Class)。这是因为你的项目是一个 Spring Boot 项目,并且默认是作为 WAR 文件部署到外部容器(如 Tom…...
封闭式论文写作--全面掌握ChatGPT-4o的写作技能,掌握提示词使用技巧、文献检索与分析方法,帮助您选定研究方向,提炼学术论文题目
在当今学术研究中,科研人员在撰写论文时面临诸多挑战。首先是信息量的剧增,科研人员需要快速消化新知识,筛选相关信息并清晰表达。但论文写作不仅是信息的罗列,还需要条理清晰、逻辑严密、语言精准,特别是在竞争激烈的…...
解决Centos6.9的yum的失效问题
相信大家,如果遇到了yum问题的话,经常会很头疼,因此,这里给出了两条命令,这里的前提是你的wget是能用的 1、mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak 2、wget -O /etc/yum.re…...
【日常记录-Java】查看Maven本地仓库的位置
1. 简介 Maven本地仓库主要用于存储和管理项目所需的依赖项,如jar包、pom文件等。默认情况下,其位于用户家目录下的.m2/repository文件夹内。开发者也可以在Maven的配置文件settings.xml中修改本地仓库路径。 2. 方法 2.1 查看settings.xml文件 Maven本…...
软件测试丨Web自动化测试用例录制与编写全攻略
Web自动化测试的功能简介 Web自动化测试主要是使用特定的工具或框架自动执行对Web应用程序进行的测试。通过模拟用户的操作,自动化测试能够验证应用程序的功能及性能。这一过程的大致流程是: 用例设计:明确测试目标、场景及所需功能。录制测…...
.Net学习
1 什么是.NET Core .NET是开发平台,.NET Framework、.NET Core、Xamaarin/Mono的统称。 .NET Framework是只能在Windows上开发的技术 .NET Core是可以跨平台开发的技术 Xamaarin/Mono是移动端开发的技术 .NET Core:跨平台、免费、开源,可…...
2024年华中杯数学建模A题太阳能路灯光伏板的朝向设计问题解题全过程文档及程序
2024年华中杯数学建模 A题 太阳能路灯光伏板的朝向设计问题 原题再现 太阳能路灯由太阳能电池板组件部分(包括支架)、LED灯头、控制箱(包含控制器、蓄电池)、市电辅助器和灯杆几部分构成。太阳能电池板通过支架固定在灯杆上端。…...
Spring Cloud Zookeeper 快速入门demo
1.什么是Spring Cloud Zookeeper ? Spring Cloud Zookeeper 是一个用于构建分布式系统的工具,它利用 Apache Zookeeper 提供的服务来实现服务注册与发现、配置管理、负载均衡等功能。具体来说,Spring Cloud Zookeeper 可以做以下几件事情&am…...
防火墙有什么作用
防火墙的作用:1. 提供网络安全防护;2. 实施访问控制和流量过滤;3. 检测和阻止恶意攻击;4. 保护内部网络免受未经授权的访问;5. 监控网络流量和安全事件;6. 支持虚拟专用网络(VPN)。防…...
使用aspx,完成一个转发http的post请求功能的api接口,url中增加目标地址参数,传递自定义header参数
使用aspx,完成一个转发http的post请求功能的api接口,url中增加目标地址参数,传递自定义header参数 首先,简单实现一下,如何在ASPX页面中实现这个功能实现代码说明:注意事项: 然后进阶࿰…...
ES使用script进行复杂排序
es数据字段,关注_source内容,为自定义的es表字段内容 {"clerk_id": 3150036230,"clerk_follow_status": 60,"create_time": 1729156110000,"channel": 1,"mid": 1538020071,"binlog_timestamp&…...
大数据技术Kafka详解 ② | Kafka基础与架构介绍
目录 1、kafka的基本介绍 2、kafka的好处 3、分布式发布与订阅系统 4、kafka的主要应用场景 4.1、指标分析 4.2、日志聚合解决方法 4.3、流式处理 5、kafka架构 6、kafka主要组件 6.1、producer(生产者) 6.2、topic(主题) 6.3、partition(分区) 6.4、consumer(消费…...
观察者模式的理解和实践
引言 在软件开发中,设计模式是开发者们为了解决常见的设计问题而总结出来的一系列最佳实践。观察者模式(Observer Pattern)是其中一种非常经典且使用率极高的设计模式。它主要用于定义对象之间的一对多关系,使得当一个对象的状态发…...
Web3.0:连接分布式未来的纽带
随着技术的不断进步,Web3.0正逐渐成为人们关注的焦点。作为Web的下一代,Web3.0将引领我们进入一个全新的数字时代,重新定义了我们与互联网的关系 Web3.0,也称为“分布式Web”,是互联网的下一代演进。它不仅是信息的传…...
鸿蒙Next通过oss上传照片到阿里云
前言 最近在写纯血鸿蒙的APP,需要用到oss上传照片,之前的客户端 Android 和 IOS 都已经实现了,获取的阿里云签名的上传地址是服务端实现的,相信大部分公司都是这样的模式,服务端也是调用阿里云的SDK来实现的ÿ…...
微信小程序实现图片拖拽调换位置效果 -- 开箱即用
在编写类似发布朋友圈功能的功能时,需要实现图片的拖拽排序,删除图片等功能。 一、效果展示 **博主的小程序首页也采用了该示例代码,可以在威信中搜索:我的百宝工具箱 二、示例代码 1.1、在自己的小程序中创建组件 1.2、组件…...
Django异步视图adrf解决办法
提问 在Django编写异步视图的时候会出现 AssertionError: Expected a Response, HttpResponse or HttpStreamingResponse to be returned from the view 或者 TypeError: sync_to_async can only be applied to sync functions. 诸如此类的错误的时候一般发生在异步视图中…...
C++:类和对象(2)
1. 类的默认成员函数: 类的默认成员函数就是用户没有显示实现,编译器会自动生成的成员函数称为默认成员函数。一个类,我们不写的情况下编译器会默认生成6个默认成员函数(构造函数,析构函数,拷贝构造函数&a…...