当前位置: 首页 > news >正文

C语言基础(六)

一维数组:

C语言中的数组是一种基本的数据结构,用于在计算机内存中连续存储相同类型的数据。
数组中的每个元素可以通过索引(或下标)来访问,索引通常是从0开始的。

数组的大小在声明时确定,并且之后不能改变(除非使用动态内存分配技术,如指针和malloc/free等)。如果初始化时省略数组的大小,编译器会自动根据初始化列表中元素的数量确定数组的大小。

数组索引越界是C语言中常见的错误。如果尝试访问数组边界之外的元素,程序会崩溃或产生不可预测的行为。
数组的大小在编译时确定,且固定不变。如果需要动态改变数组大小,应考虑使用指针和动态内存分配。
数组名在表达式中通常被当作指向数组首元素的指针。但是,数组名本身并不是一个指针变量,而是一个常量表达式,其值为数组首元素的地址。

测试代码1:

#include <stdio.h>  
int main() {  // 定义并初始化一个整型数组  int numbers[5] = {1, 2, 3, 4, 5};  // 访问并打印数组中的每个元素// 数组下标从0开始	for(int i = 0; i < 5; i++) {  printf("numbers[%d] = %d\n", i, numbers[i]);  }  // 修改数组中的某个元素  numbers[2] = 10; // 将索引为2的元素(即第三个元素)修改为10  // 再次访问并打印修改后的数组元素  printf("After modification:\n");  for(int i = 0; i < 5; i++) {  printf("numbers[%d] = %d\n", i, numbers[i]);  }  // 部分初始化和自动初始化为0  int partialInit[5] = {1, 2}; // 只初始化了前两个元素,其余自动初始化为0  printf("Partially initialized array:\n");  for(int i = 0; i < 5; i++) {  printf("partialInit[%d] = %d\n", i, partialInit[i]);  }  // 使用变量大小,变长数组(VLA) int size = 3;  int vla[size]; // 变长数组  for(int i = 0; i < size; i++) {  vla[i] = i * 2; // 初始化  }  printf("Variable Length Array:\n");  for(int i = 0; i < size; i++) {  printf("vla[%d] = %d\n", i, vla[i]);  }   return 0;  
}

运行结果如下:

 

测试代码2:

#include <stdio.h>  
// 冒泡排序  
void bubbleSort(int arr[], int n) {  int i, j, temp;  for (i = 0; i < n-1; i++) {  for (j = 0; j < n-i-1; j++) {  if (arr[j] > arr[j+1]) {  temp = arr[j];  arr[j] = arr[j+1];  arr[j+1] = temp;  }  }  }  
}  // 选择排序  
void selectionSort(int arr[], int n) {  int i, j, minIndex, temp;  for (i = 0; i < n-1; i++) {  minIndex = i;  for (j = i+1; j < n; j++) {  if (arr[j] < arr[minIndex]) {  minIndex = j;  }  }  temp = arr[minIndex];  arr[minIndex] = arr[i];  arr[i] = temp;  }  
}  int main() {  //户输入整数以及整数个数 int n, choice, i;  printf("请输入整数的个数: ");  scanf("%d", &n);  int arr[n];  printf("请输入%d个整数:\n", n);  for(i = 0; i < n; i++) {  scanf("%d", &arr[i]);  }  printf("选择排序算法(1: 冒泡排序, 2: 选择排序): ");  scanf("%d", &choice);  //选择排序方式 switch(choice) {  case 1:  bubbleSort(arr, n);  printf("冒泡排序后的数组:\n");  break;  case 2:  selectionSort(arr, n);  printf("选择排序后的数组:\n");  break;  default:  printf("无效的选择,请重新运行程序。\n");  return 1;  }  //打印排序后的数组 for (i = 0; i < n; i++)  printf("%d ", arr[i]);  printf("\n");  return 0;  
}

运行结果如下:

 

测试代码3:

#include <stdio.h>  
#include <stdlib.h>  
#include <time.h>  // 函数声明  
void generateRandomNumbers(int arr[], int n);  
void sortDescending(int arr[], int n);  
void insertNumber(int arr[], int *n, int number);  
void deleteNumber(int arr[], int *n, int m);  
void printArray(int arr[], int n);  int main() {  int n, number, m;  int *arr;  // 初始化随机数生成器  srand(time(NULL));  printf("Enter the number of two-digit integers: ");  scanf("%d", &n);  // 动态分配数组  arr = (int *)malloc(n * sizeof(int));  if (arr == NULL) {  printf("Memory allocation failed!\n");  return 1;  }  // 生成随机数  generateRandomNumbers(arr, n);  printf("Original array:\n");  printArray(arr, n);  // 排序  sortDescending(arr, n);  printf("Sorted array (descending):\n");  printArray(arr, n);  // 插入数字  printf("Enter a number to insert: ");  scanf("%d", &number);  insertNumber(arr, &n, number);  printf("Array after insertion:\n");  printArray(arr, n);  // 删除数字  printf("Enter the index (0-%d) to delete: ", n - 1);  scanf("%d", &m);  if (m >= 0 && m < n) {  deleteNumber(arr, &n, m);  printf("Array after deletion:\n");  printArray(arr, n);  } else {  printf("Invalid index!\n");  }  // 释放内存  free(arr);  return 0;  
}  // 实现函数  
void generateRandomNumbers(int arr[], int n) {  for (int i = 0; i < n; i++) {  arr[i] = rand() % 90 + 10; // 生成10到99之间的随机数  }  
}  //冒泡排序,按降序排列数组 
void sortDescending(int arr[], int n) {  for (int i = 0; i < n - 1; i++) {  for (int j = 0; j < n - i - 1; j++) {  if (arr[j] < arr[j + 1]) {  int temp = arr[j];  arr[j] = arr[j + 1];  arr[j + 1] = temp;  }  }  }  
}  
//在数组中插入一个数,并保持数组的有序性。  
void insertNumber(int arr[], int *n, int number) {  int i;  for (i = *n - 1; (i >= 0 && arr[i] < number); i--) {  arr[i + 1] = arr[i];  }  arr[i + 1] = number;  (*n)++;  
}  
//根据索引删除数组中的一个元素,并调整数组大小。 
void deleteNumber(int arr[], int *n, int m) {  for (int i = m; i < *n - 1; i++) {  arr[i] = arr[i + 1];  }  (*n)--;  
}  
// 打印数组 
void printArray(int arr[], int n) {  for (int i = 0; i < n; i++) {  printf("%d ", arr[i]);  }  printf("\n");  
}

运行结果如下:

 

测试代码4:

#include <stdio.h>  
//一维数组转换为二维数组
//"转换"只是逻辑上的,物理上仍然是一个一维数组。
//确保不要超出数组的实际边界,即index必须在0到total-1之间。
//这种方法在需要动态确定数组大小或数组大小较大时特别有用,
//可以避免使用二维数组可能带来的内存分配问题。 
int main() {  int i, j;  int rows = 3; // 3行  int cols = 4; // 4列  int total = rows * cols; // 总元素数量  // 初始化一维数组  int array[total];  for (i = 0; i < total; i++) {  array[i] = i + 1; //将数组元素初始化为1到total的整数  printf("%d ", array[i]);   }  printf("\n");// 使用二维数组的索引方式访问一维数组  // 通过计算索引(index = i * cols + j)访问一个二维数组。// i代表行索引,j代表列索引,cols是每行的列数。for (i = 0; i < rows; i++) {  for (j = 0; j < cols; j++) {  // 计算一维数组中的索引  int index = i * cols + j;  printf("%d ", array[index]);  }  printf("\n"); // 每完成一行的打印后换行  }  return 0;  
}

运行结果如下:

 

测试代码5:

#include <stdio.h>  
int main() {  // 定义一个5x3的二维数组  int twoDArray[5][3] = {  {1, 2, 3},  {4, 5, 6},  {7, 8, 9},  {10, 11, 12},  {13, 14, 15}  };  // 定义一个足够大的一维数组以存储二维数组的元素  int oneDArray[5 * 3]; // 因为是5x3的二维数组,所以一维数组需要15个元素的空间  // 遍历二维数组,并将元素复制到一维数组中  int index = 0; // 用于一维数组的索引  for (int i = 0; i < 5; i++) { // 遍历二维数组的行  for (int j = 0; j < 3; j++) { // 遍历二维数组的列  oneDArray[index++] = twoDArray[i][j]; // 将二维数组的元素复制到一维数组中,并更新索引  }  }   // 打印一维数组的元素for (int i = 0; i < 5 * 3; i++) {  printf("%d ", oneDArray[i]);  }   return 0;  
}

运行结果如下:

 

 

 

 

 


 

相关文章:

C语言基础(六)

一维数组&#xff1a; C语言中的数组是一种基本的数据结构&#xff0c;用于在计算机内存中连续存储相同类型的数据。 数组中的每个元素可以通过索引&#xff08;或下标&#xff09;来访问&#xff0c;索引通常是从0开始的。 数组的大小在声明时确定&#xff0c;并且之后不能改…...

什么是词向量?如何得到词向量?Embedding 快速解读

我第一次接触 Embedding 是在 Word2Vec 时期&#xff0c;那时候还没有 Transformer 和 BERT 。Embedding 给我的印象是&#xff0c;可以将词映射成一个数值向量&#xff0c;而且语义相近的词&#xff0c;在向量空间上具有相似的位置。 有了 Embedding &#xff0c;就可以对词进…...

AI视频创作应用

重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经…...

JAVA常见的工具类之Object类(超详细)

1、Java API简介 Java API(Java Application Programming Interface)是Java应用程序编程接口的缩写。Java中的API&#xff0c;就是JDK提供的具有各种功能的Java类&#xff0c;灵活使用Java API能够大大提高使用Java语言编写程序的效率。 Java API的帮助文档可到 http://docs.or…...

深度学习(YOLO、DETR) 十折交叉验证

二&#xff1a;交叉验证 在 K 折验证之前最常用的验证方法就是交叉验证&#xff0c;即把数据划分为训练集、验证集和测试集。一般的划分比例为 7&#xff1a;1&#xff1a;2。但如何合理的抽取样本就成为了使用交叉验证的难点&#xff0c;不同的抽取方法会导致截然不同的训练性…...

基于php网上差旅费报销系统设计与实现

网上报销系统以LAMP(LinuxApacheMySQLPHP)作为平台,涉及到PHP语言、MySQL数据库、JavaScript语言、HTML语言。 2.1 PHP语言简介 PHP&#xff0c;一个嵌套的缩写名称&#xff0c;是英文 “超级文本预处理语言”&#xff08;PHP: Hypertext Preprocessor&#xff09;的缩写。P…...

微服务及安全

一、微服务的原理 1.什么是微服务架构 微服务架构区别于传统的单体软件架构,是一种为了适应当前互联网后台服务的「三高需求:高并发、高性能、高可用」而产生的的软件架构。 单体式应用程序 与微服务相对的另一个概念是传统的单体式应用程序( Monolithic application ),…...

图文详解ThreadLocal:原理、结构与内存泄漏解析

目录 一.什么是ThreadLocal 二.ThreadLocal的内部结构 三.ThreadLocal带来的内存泄露问题 ▐ key强引用 ▐ key弱引用 总结 一.什么是ThreadLocal 在Java中&#xff0c;ThreadLocal 类提供了一种方式&#xff0c;使得每个线程可以独立地持有自己的变量副本&#xff0c;而…...

基于java的综合小区管理系统论文.doc

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统综合小区管理系统信息管理难度大&#xff0c;容错率低&am…...

如何合理设置PostgreSQL的`max_connections`参数

合理设置PostgreSQL的max_connections参数对于数据库的稳定性和性能至关重要。这个设置值决定了允许同时连接到数据库的最大客户端数量。如果设置不当&#xff0c;可能导致资源浪费或系统过载。以下是设置max_connections时需要考虑的几个关键因素&#xff1a; 1. 评估系统硬件…...

Kubectl 常用命令汇总大全

kubectl 是 Kubernetes 自带的客户端&#xff0c;可以用它来直接操作 Kubernetes 集群。 从用户角度来说&#xff0c;kubectl 就是控制 Kubernetes 的驾驶舱&#xff0c;它允许你执行所有可能的 Kubernetes 操作&#xff1b;从技术角度来看&#xff0c;kubectl 就是 Kubernetes…...

【Linux】Linux环境基础开发工具使用之Linux调试器-gdb使用

目录 一、程序发布模式1.1 debug模式1.2 release模式 二、默认发布模式三、gdb的使用结尾 一、程序发布模式 程序的发布方式有两种&#xff0c;debug模式和release模式 1.1 debug模式 目的&#xff1a;主要用于开发和测试阶段&#xff0c;目的是让开发者能够更容易地调试和跟…...

clickhouse_driver

一、简介 clickhouse_driver是一个Python库&#xff0c;用于与ClickHouse数据库进行交互。ClickHouse是一个高性能的列式数据库管理系统&#xff08;DBMS&#xff09;&#xff0c;它适用于实时分析&#xff08;OLAP&#xff09;场景。clickhouse_driver模块提供了与ClickHouse…...

BI分析实操案例分享:零售企业如何利用BI工具对销售数据进行分析?

在当下这个竞争激烈的零售市场&#xff0c;企业如何在波诡云谲的商场中站稳脚跟&#xff0c;实现销售目标的翻倍增长&#xff1f; 答案可能就藏在那些看似杂乱无章的数字里。 是的&#xff0c;你没有看错&#xff0c;答案正是那些我们日常接触的销售数据。它们就像是宝藏&…...

python : Requests请求库入门使用指南 + 简单爬取豆瓣影评

Requests 是一个用于发送 HTTP 请求的简单易用的 Python 库。它能够处理多种 HTTP 请求方法&#xff0c;如 GET、POST、PUT、DELETE 等&#xff0c;并简化了 HTTP 请求流程。对于想要进行网络爬虫或 API 调用的开发者来说&#xff0c;Requests 是一个非常有用的工具。在今天的博…...

宋红康JVM调优思维导图

文章目录 1. 概述2. JVM监控及诊断命令-命令行篇3. JVM监控及诊断工具-GUI篇4. JVM运行时参数5. 分析GC日志 课程地址 1. 概述 2. JVM监控及诊断命令-命令行篇 3. JVM监控及诊断工具-GUI篇 4. JVM运行时参数 5. 分析GC日志...

linux 网卡配置

linux网卡可以通过命令和配置文件配置,如果是桌面环境还可以通过图形化界面配置. 1.ifconfig(interfaces config)命令方式 通常需要以root身份登录或使用sudo以便在Linux机器上使用ifconfig工具。依赖于ifconfig命令中使用一些选项属性&#xff0c;ifconfig工具不仅可以被用来…...

IEEE |第五届机器学习与计算机应用国际学术会议(ICMLCA 2024)

第五届机器学习与计算机应用国际学术会议(ICMLCA 2024)定于2024年10月18-20日在中国杭州隆重举行。本届会议将主要关注机器学习和计算机应用面临的新的挑战问题和研究方向&#xff0c;着力反映国际机器学习和计算机应用相关技术研究的最新进展。 IEEE |第五届机器学习与计算机应…...

【网络安全】漏洞挖掘:IDOR实例

未经许可&#xff0c;不得转载。 文章目录 正文 正文 某提交系统&#xff0c;可以选择打印或下载passport。 点击Documents > Download后&#xff0c;应用程序将执行 HTTP GET 请求&#xff1a; /production/api/v1/attachment?id4550381&enamemId123888id为文件id&am…...

vue项目执行 cnpm install 报错证书过期的解决方案

拉下源码后执行依赖安装过程&#xff0c;报错 error Error: Certificate has expired&#xff0c;可以通过一下方发解决&#xff1a;npm config set strict-ssl false 再执行 cnpm 命令即可正常拉依赖...

XGboost的安装与使用

安装xgboost&#xff1a; conda install py-xgboost下载demo的数据&#xff1a; https://github.com/dmlc/xgboost 安装graphviz conda install python-graphviz数据 在demo/data里面&#xff1a; 训练集是&#xff1a;agaricus.txt.train、测试集是&#xff1a;agaricus…...

【AI趋势9】开源普惠

关于开源的问题&#xff0c;可以参考我之前的文章&#xff1a; 再说开源软件-CSDN博客 【AI】马斯克说大模型要开源&#xff0c;我们缺的是源代码&#xff1f;&#xff08;附一图看懂6大开源协议&#xff09;_分开源和闭源,我们要的当然是开源,马斯克开源。-CSDN博客 一、开…...

【Spark集群部署系列一】Spark local模式介绍和搭建以及使用(内含Linux安装Anaconda)

简介 注意&#xff1a; 在部署spark集群前&#xff0c;请部署好Hadoop集群&#xff0c;jdk8【当然Hadoop集群需要运行在jdk上】&#xff0c;需要注意hadoop&#xff0c;spark的版本&#xff0c;考虑兼容问题。比如hadoop3.0以上的才兼容spark3.0以上的。 下面是Hadoop集群部署…...

泛微OA 常用数据库表

HrmDepartment 人力资源部门 HrmSubCompany 人力资源分部 HrmResource 员工信息表 HrmRoles 角色信息表 T_Condition 报表条件 T_ConditionDetail 报表条件详细值 T_DatacenterUser 基层用户信息 T_FadeBespeak 调查退订表 T_fieldItem 调查项目表输入项信息 T_fieldItemDetail…...

宜佰丰超市进销存管理系统

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a; Java 数据库&#xff1a; MySQL 技术&#xff1a; JavaMysql 工具&#xff1a; IDEA/Eclipse、Navicat、Maven 系统展示 首页 管理员功能模块…...

生成Vue脚手架报错:npm error code ETIMEDOUT

遇到 ETIMEDOUT 错误通常表示你的 npm 请求在尝试连接到 npm 仓库&#xff08;如 https://registry.npmjs.org&#xff09;时超时了。这个问题通常与网络连接、代理设置或网络配置有关。以下是一些解决这个问题的步骤&#xff1a; 检查网络连接&#xff1a; 确保你的设备可以正…...

Readiness Probe可以解决应用启动慢造成访问异常的问题。

Readiness Probe可以解决应用启动慢造成访问异常的问题。 正确 错误 这句话是正确的。 ‌Readiness Probe确实可以解决应用启动慢造成的访问异常问题。‌ Readiness Probe&#xff0c;也称为就绪性探针&#xff0c;是Kubernetes中用于监控容器应用状态稳定性的重要机制之一。…...

第一批AI原住民开始变现:9岁小学生,用大模型写书赚1个w

前言 当人们正在观望&#xff0c;AI什么时候抢走自己的饭碗时&#xff0c;北京一名9岁的小学生在AI的帮助下写了一本小说&#xff0c;并赚到了2万元的版税。 这件看似不可思议的事&#xff0c;他是如何做到的&#xff1f;此外&#xff0c;他还带来一个启发&#xff1a;面对AI时…...

电路笔记(PCB):串扰的原理与减少串扰的几种方法

串扰 串扰&#xff08;Crosstalk&#xff09;是指在电路中&#xff0c;一条信号线上的电磁干扰不经意间耦合到另一条相邻的信号线上&#xff0c;从而影响其正常信号传输的现象。串扰会导致相邻信号线上的信号出现畸变或噪声&#xff0c;从而影响信号的完整性和电路的正常工作。…...

QT-监测文件内容重复工具)

QT-监测文件内容重复工具 一、演示效果二、核心代码三、下载链接 一、演示效果 二、核心代码 #include "widget.h" #include "ui_widget.h" #include <QDir> #include <QFile> #include <QCryptographicHash> #include <QApplicatio…...

网站页面多少/班级优化大师官网登录

as3中的根即顶级容器是stage&#xff0c;stage是Stage类的唯一实例&#xff0c;当你创建一个文档时&#xff0c;就创建了stage实例。上节提到的root就是stage下的一个可视实例。由于stage和root都是容器&#xff0c;所以当在时间轴写代码时&#xff0c;可以有2个选择&#xff0…...

武汉新闻头条/sem和seo是什么

1、Matplotlib 简介 数据可视化有助于更有效地讲述有关数据的故事并使其易于呈现。有时很难用静态图表来解释数据的变化,为此,我们将讨论matplotlib提供的名为“Animation”的动画库之一。以下是要涵盖的主题。 最流行的Python二维绘图库是Matplolib。大多数人从Matplotlib开…...

山东美建站/提升神马seo关键词自然排名

学习用图形化表示分析数据是一个非常重要的技能&#xff0c;它可以帮助我们快速理解数据的趋势、分布以及关系。 在实验中&#xff0c;我们可以使用各种图表来展示数据&#xff0c;比如折线图、柱状图、饼图、散点图等。这些图表都有各自的优点和适用场景&#xff0c;我们要根据…...

那个网站可以免费做风面/百度推广四川成都地区服务中心

摘要&#xff1a;在前一篇文章中我们并没有考虑配置的组件参数是什么类型&#xff0c;也没有在配置文件中指定过类型&#xff0c;那么Castle IOC是如何进行类型转换的&#xff1f;如何配置一些复杂的数据类型&#xff1f;如果有自定义的类型如何去进行类型转换&#xff1f;本文…...

龙岗网站制作公司/获客渠道有哪些

插件名说明open in browser浏览器中打开live server实时预览prettier代码格式化 Auto Close Tag Chinese (Simplified) Auto Rename Tag Beautify BEM Helper Code Runner CSS Tree Easy LESS EditorConfig for VS Code Git Graph GitHub Copilot HTML CSS Support Live Server…...

wordpress 视频课堂/湖南专业的关键词优化

一、Config配置简介在微服务系统中&#xff0c;服务较多&#xff0c;相同的配置&#xff1a;如数据库信息、缓存、参数等&#xff0c;会出现在不同的服务上&#xff0c;如果一个配置发生变化&#xff0c;需要修改很多的服务配置。spring cloud提供配置中心&#xff0c;来解决这…...