当前位置: 首页 > 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 命令即可正常拉依赖...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...

作为测试我们应该关注redis哪些方面

1、功能测试 数据结构操作&#xff1a;验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化&#xff1a;测试aof和aof持久化机制&#xff0c;确保数据在开启后正确恢复。 事务&#xff1a;检查事务的原子性和回滚机制。 发布订阅&#xff1a;确保消息正确传递。 2、性…...

MyBatis中关于缓存的理解

MyBatis缓存 MyBatis系统当中默认定义两级缓存&#xff1a;一级缓存、二级缓存 默认情况下&#xff0c;只有一级缓存开启&#xff08;sqlSession级别的缓存&#xff09;二级缓存需要手动开启配置&#xff0c;需要局域namespace级别的缓存 一级缓存&#xff08;本地缓存&#…...

pycharm 设置环境出错

pycharm 设置环境出错 pycharm 新建项目&#xff0c;设置虚拟环境&#xff0c;出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...

消防一体化安全管控平台:构建消防“一张图”和APP统一管理

在城市的某个角落&#xff0c;一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延&#xff0c;滚滚浓烟弥漫开来&#xff0c;周围群众的生命财产安全受到严重威胁。就在这千钧一发之际&#xff0c;消防救援队伍迅速行动&#xff0c;而豪越科技消防一体化安全管控平台构建的消防“…...

Python打卡训练营学习记录Day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

数据库优化实战指南:提升性能的黄金法则

在现代软件系统中&#xff0c;数据库性能直接影响应用的响应速度和用户体验。面对数据量激增、访问压力增大&#xff0c;数据库性能瓶颈经常成为项目痛点。如何科学有效地优化数据库&#xff0c;提升查询效率和系统稳定性&#xff0c;是每位开发与运维人员必备的技能。 本文结…...