指针与数组--动态数组(2)[1、长度可变的一维动态数组 2、长度可变的二维动态数组]

news2024/10/6 6:51:16

目录

一、长度可变的一维动态数组

二、长度可变的二维动态数组


    由上篇文章的理论,接下来使用例题来阐述。  

一、长度可变的一维动态数组

   例题1、编程输入某班学生的某门课成绩,计算并输出平均值。学生人数由键盘输入。

#include <stdio.h>
#include <stdlib.h>

void InputArray(int *p,int n);
double Average(int *p,int n);

int main(void)
{
	int *p = NULL,n;
	double aver;
	printf("How many students?");
	scanf("%d",&n);							//输入学生人数 
	p = (int *)malloc(n*sizeof(int));		//向系统申请内存 
	if(p==NULL)					//确保指着使用前是非空指针,当p为空指针时结束程序运行 
	{
		printf("No enough memory!\n");
		exit(1);
	 } 
	printf("Input %d socre:",n);
	InputArray(p,n);			//输入学生成绩 
	aver = Average(p,n); 		//计算平均分 
	printf("aver= %lf\n",aver); //输出平均分 
	free(p);					//释放系统申请的内存 
	return 0;
}
//形参声明为指针变量,输入数组元素值 
void InputArray(int *p,int n)
{
	int i;
	for(i=0;i<n;i++)
	{
		scanf("%d",&p[i]);
	}
}
//形参声明为指针变量,计算数组元素的平均值 
double Average(int *p,int n)
{
	int i,sum=0;
	for(i=0;i<n;i++)
	{
		sum = sum + p[i];
	}
	return (double)sum/n;
}

         程序第11行语句像系统申请n个int型的存储单元,用int型指针变量p指向了这段连续存储空间的首地址。这就相当于建立了一个一维动态数组,可通过首地址p来寻址数组中的元素,即可以使用*(p+i)或者p[i]来表示数组元素值。

注意:程序第12~16行的语句并非是可有可无的。因为堆栈空间是有限的,所以动态分配内存后,必须用第12~16行语句检测函数malloc()的返回值,确保指针使用前是非空指针(不是NULL)。如果动态内存分配后返回的指针为NULL,那么就说明内存分配未成功。一定是内存不足或者内存已经耗尽,此时必须用exit(1)终止整个程序的执行

最后,不要忘记使用free()释放不再使用的动态申请的内存。

删除分配的内存空间后:

二、长度可变的二维动态数组

例题2:编程输入m个班学生(每个班n个学生)的某门课成绩,计算并输出平均分。班级数和每班学生数由键盘输入。

#include <stdio.h>
#include <stdlib.h>
 
void InputArray(int *p,int m,int n);
double averarray(int *p,int m,int n);

int main(void)
{
	int *p= NULL,n,m;
	double aver;
	printf("How many classes?");
	scanf("%d",&m);
	printf("How many students?");
	scanf("%d",&n);
	p = (int *)calloc(m*n,sizeof(int));
	if(p==NULL)
	{
		printf("No enough memory!\n");
		exit(1);
	}
	InputArray(p,m,n);
	aver = averarray(p,m,n);
	printf("aver=%.lf\n",aver);
	free(p);
	return 0;
}

void InputArray(int *p,int m,int n)
{
	int i,j;
	for(i=0;i<m;i++)
	{
		printf("Please enter scores of  class %d:\n",i+1);
		for(j=0;j<n;j++)
		{
			scanf("%d",&p[i*n+j]);
		}
	}
}

double averarray(int *p,int m,int n)
{
	int i,j,sum=0;
	for(i=0;i<n;i++)
	{
		for(j=0;j<m;j++)
		{
			sum=sum+p[i*n+j];
		}
	}
	return (double)sum/(n*m);
}


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

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

相关文章

Apache服务器

文章目录 Apache服务器Linux安装ApacheApache文件结构Apache主配置文件案例 配置一台Web服务器 启动用户的个人网站虚拟主机的设定基于IP的虚拟主机基于域名的虚拟主机基于端口的虚拟主机 rewrite重写rewrite使用详解使用案例 域名跳转单个域名跳转多个域名跳转 status状态页ap…

“插入排序:小数据量排序的王者“

文章目录 &#x1f50d;什么是插入排序&#xff1f;&#x1f511;插入排序的优缺点&#x1f680;实现插入排序 &#x1f50d;什么是插入排序&#xff1f; 插入排序是一种简单的排序算法&#xff0c;它的基本思想是&#xff1a;将待排序的元素&#xff0c;从第二个元素开始&…

阿里架构师整理的Java经典面试题1220道(附答案)

学习如逆水行舟&#xff0c;尤其是 IT 行业有着日新月异的节奏&#xff0c;我们更要抓紧每一次可以学习和进步的机会。所以&#xff0c;没有撤退可言 即使是面试跳槽&#xff0c;那也是一个学习的过程。只有全面的复习&#xff0c;才能让我们更好的充实自己&#xff0c;武装自…

内网隧道代理技术(五)之 Netcat反弹Shell

Netcat反弹Shell Netcat简称NC,是一个简单、可靠的网络工具,被誉为网络界的瑞士军刀。通NC可以进行端口扫描、反弹Shell、端口监听和文件传输等操作,常用参数如下&#xff1a; 参数作用-c指定连接后要执行的shell命令-e指定连接后要执行的文件名-k配置 Socket一直存活(若不想…

一文了解远程桌面连接

一文了解远程桌面连接 一、引言1.1、远程桌面连接的概述1.2、远程桌面连接的应用场景 二、远程桌面连接的基本原理2.1、远程桌面连接的工作方式2.2、远程桌面连接的安全性 三、远程桌面连接的实现方法3.1、Windows自带的远程桌面连接3.2、第三方远程桌面连接工具 四、远程桌面连…

一阶低通滤波器(CODESYS FC和FB应用介绍)

一阶RC低通滤波器详细算法介绍请参看下面文章链接: PLC信号处理系列之一阶低通(RC)滤波器算法_plc计算滤波频率_RXXW_Dor的博客-CSDN博客1、先看看RC滤波的优缺点 优点:采用数字滤波算法来实现动态的RC滤波,则能很好的克服模拟滤波器的缺点; 1、在模拟常数要求较大的场合这…

数据挖掘——甘肃省县(区)域农业综合实力研究(论文)

《数据挖掘与分析》课程论文 题目&#xff1a;甘肃省县&#xff08;区&#xff09;域农业综合实力研究 xx学院xx专业xx班&#xff1a;xx 2023年6月 甘肃省县&#xff08;区&#xff09;域农业综合实力研究 xx (xx学院 xx学院) 摘要&#xff1a;本文主要研究甘肃省各县&#…

C语言数组指针和指针数组

文章目录 1 数组指针和指针数组的区别2 数组首地址和数组首元素地址的区别参考 1 数组指针和指针数组的区别 对指针数组和数组指针的概念&#xff0c;相信很多C程序员都会混淆。下面通过两个简单的语句来分析一下二者之间的区别&#xff0c;示例代码如下所示&#xff1a; int…

C/C++的发展历程和未来趋势

文章目录 C/C的起源C/C的应用C/C开发的工具C/C未来趋势 C/C的起源 C语言 C语言是一种通用的高级编程语言&#xff0c;由美国计算机科学家Dennis Ritchie在20世纪70年代初期开发出来。起初&#xff0c;C语言是作为操作系统UNIX的开发语言而创建的。C语言的设计目标是提供一种功…

虚拟文件系统的数据结构

文章目录 虚拟文件系统的数据结构超级快挂载描述符文件系统类型索引节点目录项文件的打开实例和打开文件表 虚拟文件系统的数据结构 虽然不同文件系统类型的物理结构不同&#xff0c;但是虚拟文件系统定义了一套统一的数据结构。 &#xff08;1&#xff09;超级块。文件系统的…

【网络2】MII MDC/MDIO

文章目录 1.MII&#xff1a;ISO网络模型中物理层&#xff08;phy&#xff09;和数据链路层&#xff08;mac&#xff09;属于硬件&#xff0c;其余都属于软件kernel2.MDC/MDIO&#xff1a;不仅管phy&#xff0c;只要支持mdio协议都可以管2.1 BMC速率适配&#xff1a;phy和switch…

二层MAC地址介绍

目录 MAC地址介绍 MAC地址的组成 MAC地址分类 MAC地址的作用 二层交换机介绍 MAC地址表的定义 MAC地址表项类型 二层交换机对数据帧的处理动作 MAC地址介绍 MAC地址&#xff08;Media Access Control Address)&#xff0c;直译为媒体存取控制位地址 MAC地址的组成 MA…

【四、基本shell命令】

1 帮助命令 man 获取帮助信息 [root@redis100 a]# man lshelp 获得shell内置命令的帮助信息 [root@redis100 a]# help cd常用快捷键 2 文件目录类 pwd 显示当前工作目录的绝对路径 pwd:print working directory [root@redis100 ~]# pwd /rootls 列出目录的内容 ls: list…

Hyper-V虚拟机安装和使用

目录 什么是虚拟化技术虚拟化技术有以下几个关键概念&#xff1a;虚拟化技术的优点&#xff1a; 什么是Hyper-V虚拟机Hyper-V虚拟机的关键特点和优势&#xff1a;使用Hyper-V虚拟机我们能做什么 安装Hyper-V系统要求启用Hyper-V功能创建虚拟机安装操作系统 最近在研究人工智能A…

仙境传说RO:NPC对话| mes/next/close函数用法详解

仙境传说RO:NPC对话| mes/next/close函数用法详解 大家好&#xff0c;我是艾西&#xff0c;今天跟大家讲解下仙境传说mes/next/close函数&#xff0c;在游戏中所有的NPC对话都是用mes函数来创建的。 我们先打开官方文档的script _commands.txt文件&#xff0c;搜索*mes searc…

mmdetection调用模型训练

mmdetection调用模型训练 文章目录 mmdetection调用模型训练转化数据集格式从labelme到coco首先data导进来改一下coco.py改一下class_names.py在模型跑了之后看生成文件然后掐了包版本设置PYTHONPATHdiffustiondet模型模型训练跑完了检测模型 yolo模型yolof模型 转化数据集格式…

qemu arm-trusted-firmware atf 的编译

参考网站 ATF (arm-trusted-firmware&#xff09;&#xff0c;可以称之为 Trusted Firmware-A (TF-A)&#xff0c;也就是 TF-A https://www.trustedfirmware.org/ https://github.com/ARM-software/arm-trusted-firmware 环境 使用 qemu&#xff0c;就是不需要板子 win10 …

Node.js入门与 Webpack模块打包工具

目录 Node.js入门 fs模块-读写文件 path模块-路径处理 压缩前端html 认识URL中的端口号 http模块-创建Web服务 体验 Web 服务除了接口数据以外&#xff0c;还能返回网页资源等 Node.js模块化 ECMAScript标准-默认导出和导入 ECMAScript标准-命名导出和导入 包的…

攻防世界-Reverse-Game

题目描述&#xff1a;下载附件&#xff0c;得到一个exe程序&#xff0c;运行该程序&#xff0c;可以看到如下的界面 根据描述信息说明&#xff1a; a. 这是一个电路&#xff0c;有8个开关&#xff0c;只有8个开关全部闭合&#xff0c;才能够获取到flag&#xff1b; b. 其中n表…

Unity shader - 纹理采样

目录 1.什么是UV 2.凹凸纹理 3.渐变纹理映射 4.遮罩纹理 1.什么是UV 对于三维模型&#xff0c;有两个最重要的坐标系统&#xff0c;一是顶点的位置&#xff08;X&#xff0c;Y&#xff0c;Z&#xff09;坐标&#xff0c;另一个就是UV坐标。什么是UV&#xff1f;简单的…