首页 > 编程语言 >用函数实现模块化程序设计四

用函数实现模块化程序设计四

时间:2024-11-13 18:30:59浏览次数:1  
标签:函数 int 模块化 元素 数组名 score 数组 程序设计 实参

数组作为函数参数

调用有参函数时,需要提供实参,实参可以是常量、变量或表达式

数组元素的作用与变量相当,一般来说,凡是变量可以出现的地方,都可以用数组元素代替,因此,数组元素也可以用作函数实参,其用法与变量相同,向形参船体数组元素的值。此外,数组名也可以作实参和形参,传递的是数组第一个元素的地址

数组元素作函数实参

数组元素可以用作函数实参,不能用作形参。因为形参是在函数被调用时临时分配存储单元的,不可能为一个数组元素单独分配存储单元(数组是一个整体,在内存中占连续的一段存储单元)

在用数组元素作函数实参时,把实参的值传给形参,是“值传递”方式。数据传递的方向是从实参传到形参,单向传递

例:输入10个数,要求输出其中值最大的元素和该数是第几个数


#include <stdio.h>
#include <string.h>

int maxNum(int m, int n)//取最大值
{
	return m > n ? m : n;
}

int main(void)
{
	int arr[10];//定义

	memset(arr, 0, sizeof(arr));//初始化
	
	for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)//输入
		scanf("%d", &arr[i]);

	int iMax = arr[0];
	int iIndex = 1;

	for (int i = 1; i < sizeof(arr) / sizeof(arr[0]); i++)
	{
		if (iMax >= maxNum(iMax, arr[i]))
			continue;

		iMax = arr[i];
		iIndex = i + 1;
	}

	printf("\n%d\n%d\n", iMax, iIndex);//输出

	return 0;
}

在VS编译器内会报C4996错误,解决见下文:(下同)

C4996 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. - EricsT - 博客园 (cnblogs.com)

运行结果:

数组名作为函数参数

除了可以用数组元素作为函数参数外,还可以用数组名作为函数参数(包括实参和形参)

用数组元素作为实参时,向形参变量传递的是数组元素的值,而用数组名作函数实参时,向形参(数组名或指针变量)传递的是数组首元素的地址

例:有一个一维数组 score 内放 10 个学生成绩,求平均成绩


#include <stdio.h>
#include <string.h>

float ave(float score[], size_t iSize)
{
	float fRet = 0;

	for (int i = 0; i < iSize; i++)//求和
		fRet += score[i];
	
	return fRet / iSize;//平均值
}

int main(void)
{
	float score[10];//定义

	memset(score, 0, sizeof(score));//初始化
	
	for (int i = 0; i < sizeof(score) / sizeof(score[0]); i++)//赋值
		scanf("%f", &score[i]);

	printf("\n%f\n", ave(score, sizeof(score) / sizeof(score[0])));//平均值

	return 0;
}

运行结果:

用数组名作函数参数,应该是在主调函数和被调函数分别定义数组

实参数组与形参数组类型应该一致

C语言编译系统并不检查形参数组的大小,只是将实参数组的首元素的地址传给形参数组名。因此形参数组首元素和实参数组首元素是有同一地址,它们共占同一存储单元

形参数组可以不指定大小,在定义数组时在数组名后面跟一个空的方括号

用数组名作为函数实参时,不是把数组元素的值传递给形参,而是把实参数组的首元素地址传递给形参数组,这样子两个数组就共占同一段内存单元,所以形参数组元素的值改变,则实参数组元素对应的值也会改变

多维数组名作函数参数

多维数组元素可以作函数参数

可以用多维数组名作为函数的实参和形参,在被调用函数中对形参数组定义时可以指定每一维的大小,也可以省略第一维的大小

例:有一个3*4的矩阵,求所有元素中的最大值


#include <stdio.h>

int maxNum(int num[][4], size_t iSize)
{
	int iMax = num[0][0];

	for (int i = 0; i < iSize; i++)
		for (int j = 0; j < 4; j++)
			iMax = iMax > num[i][j] ? iMax : num[i][j];

	return iMax;
}

int main(void)
{
	int num[3][4] = 
	{ 
		{ 1, 3, 5, 7 },
		{ 2, 4, 6, 8 },
		{ 15, 17, 34, 12 }
	};

	printf("\n%d\n", maxNum(num, 3));

	return 0;
}

运行结果:

标签:函数,int,模块化,元素,数组名,score,数组,程序设计,实参
From: https://www.cnblogs.com/EricsT/p/18542555

相关文章

  • 极速启动,函数计算弹性降本能力再升级
    作者:墨飏在数字化转型的大潮中,云计算成为推动创新和优化业务流程的关键力量。作为阿里巴巴集团的核心产品之一,函数计算(FunctionCompute)引领着Serverless计算的新时代。本文将深入探讨函数计算如何通过技术革新实现提效降本,以及其在AI业务、数据处理和Web应用等多个领域的......
  • 函数递归详细知识点
    函数递归的基本概念函数递归是指在函数体内部直接或间接地调用该函数本身的编程技术。递归通常用于解决可以分解为更小、更相似子问题的问题,尤其适用于数据结构如树、图、链表等的操作,以及数学问题如斐波那契数列、阶乘计算等。递归的基本结构递归函数通常包含两个关键部分:......
  • 第十届中国大学生程序设计竞赛 重庆站(CCPC 2024 Chongqing Site)
    B.osu!mania按照题目的公式进行计算,注意四舍五入的精度问题。#include<bits/stdc++.h>usingnamespacestd;usingi32=int32_t;usingi64=longlong;usingldb=longdouble;usingvi=vector<int>;usingpii=pair<int,int>;voidsolve(){ intppmax;......
  • C++函数传递引用或指针
    常见变量用法下面通过例子分别展示传递值、字符串、数组的用法示例代码#include<iostream>#include<string>//函数接受一个整数的引用和一个整数的指针voidmodifyValue(int&refValue,int*ptrValue){refValue=100;//通过引用修改值std::cout......
  • 【Java Web】JSTL及其核心库介绍 JSTL函数
    文章目录JSTL介绍核心库表达式控制\<c:out>\<c:set>\<c:remove>\<c:catch>流程控制\<c:if>\<c:choose>循环标签\<c:forEach>URL标签\<c:import>\<c:url>\<c:param>\<c:redirect>格式化JSTL函数JSTL介绍JSTL(JavaSer......
  • C题目:写一个函数,计算一个字符串的长度。在main函数中输入字符串,并输出其长度。
    题目要求如下:写一个函数,计算一个字符串的长度。在main函数中输入字符串,并输出其长度。提示:(1)定义intlength(char*p)函数,统计指针变量p指向的字符数组中的字符个数,返回其字符个数。(2)在main函数中,输入一个字符串,存入字符数组,调用length函数,求出字符串的长度,输出其长度值。代......
  • C小题目:输入10个整数,将其中最小的数与第1个数对换,将最大的数与最后一个对换。要求写3
    题目要求如下:输入10个整数,将其中最小的数与第1个数对换,将最大的数与最后一个对换。要求写3个函数:(1)输入10个数;(2)进行处理;(3)输出10个数。提示:(1)定义voidinput(int*p)函数,用来输入10个整数,存放到指针变量p所指向的数组中;(2)定义voidmax_min_value(int*p)函数,在指针变量p所指......
  • 在线性坐标系中绘制对数函数图象
    本文记述了用Matplotlib在线性坐标系中绘制对数函数图象的例子。代码主体内容如下:...defmain():fig,ax=plt.subplots(figsize=(8,8))#1ax=configure_axes(ax,'LogarithmicFunction',8,3,1,0.25,1,0.25)#2x=np.linspace(......
  • C语言——字符串函数
    1.字符分类函数 2.字符转换函数3.strlen的使⽤和模拟实现4.strcpy的使⽤和模拟实现5.strcat的使⽤和模拟实现6.strcmp的使⽤和模拟实现7.strstr的使⽤和模拟实现8.strtok函数的使⽤接下来让我们一一介绍每个函数的使用方法和如何模拟实现吧!!!1 .C语⾔中有......
  • Java后台微信在线教育视频点播学习小程序设计与实现(论文+作品)
     博主介绍:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育、辅导。所有项目都配有从入门到精通的基础知识视频课程,学习后应对毕业设计答辩,提供核心代码讲解,答辩指导。项目配有对应开发......