新手c语言讲解及题目分享(十)——数组专项练习

news/2024/9/16 4:36:48/ 标签: c语言, 开发语言

C语言中的数组是一个用于存储多个同类型数据的集合。数组在内存中是连续分配的,可以通过索引访问其中的元素。以下是对C语言数组的详细讲解:

1. 数组的定义

数组的定义格式如下:

type arrayName[arraySize];

- `type`:数组中元素的数据类型(如 `int`, `float`, `char` 等)。
- `arrayName`:数组的名称。
- `arraySize`:数组的大小,表示可以存储的元素数量。

示例:
int numbers[5]; // 定义一个可以存储5个整数的数组

2. 数组的初始化

数组可以在定义时进行初始化,格式如下:
 

type arrayName[arraySize] = {value1, value2, ..., valueN};

如果数组的大小未指定,编译器会根据初始化的元素数量自动推断。

示例:

int numbers[5] = {1, 2, 3, 4, 5}; // 定义并初始化一个整数数组
int moreNumbers[] = {10, 20, 30}; // 编译器自动推断大小为3

3. 访问数组元素

数组元素通过索引访问,索引从0开始。例如,`arrayName[index]`表示访问数组中第`index`个元素。

示例:

int numbers[5] = {1, 2, 3, 4, 5};
printf("%d\n", numbers[0]); // 输出第一个元素: 1
printf("%d\n", numbers[2]); // 输出第三个元素: 3

4. 数组的大小

可以使用 `sizeof` 运算符来获取数组的大小(以字节为单位),然后通过元素大小计算元素数量。

示例:

int numbers[5] = {1, 2, 3, 4, 5};
int size = sizeof(numbers) / sizeof(numbers[0]); // 计算数组元素数量
printf("数组大小: %d\n", size); // 输出: 5

 5. 多维数组

C语言支持多维数组,最常见的是二维数组。定义格式如下:

type arrayName[size1][size2];

示例:
int matrix[3][4]; // 定义一个3行4列的二维数组

可以通过两个索引访问元素:
matrix[0][1] = 5; // 将第一行第二列的元素设置为5

6. 数组作为函数参数

数组可以作为函数参数传递。需要注意的是,传递数组时,实际上是传递数组的指针。示例:
 

void printArray(int arr[], int size) {for (int i = 0; i < size; i++) {printf("%d ", arr[i]);}printf("\n");
}int main() {int numbers[] = {1, 2, 3, 4, 5};printArray(numbers, sizeof(numbers) / sizeof(numbers[0])); // 传递数组return 0;
}

7. 注意事项

- 数组的大小在定义后不能更改。
- 访问数组时,确保索引在有效范围内(0到`size-1`),否则会导致未定义行为。
- C语言不提供数组边界检查,因此需要手动管理数组的大小和索引。

 总结

数组是C语言中非常重要的数据结构,适用于存储和处理多个同类型的数据。理解数组的定义、初始化、访问和传递是掌握C语言的基础。如果您有任何具体问题或需要更深入的讲解,请告诉我!
 

1.数组的最大值和最小值

#include <stdio.h>  int main() {  int n;  // 提示用户输入整数个数  printf("请输入整数的个数: ");  scanf("%d", &n);  int arr[n];  // 输入整数  printf("请输入 %d 个整数:\n", n);  for (int i = 0; i < n; i++) {  scanf("%d", &arr[i]);  }  int max = arr[0];  int min = arr[0];  // 查找最大值和最小值  for (int i = 1; i < n; i++) {  if (arr[i] > max) {  max = arr[i];  }  if (arr[i] < min) {  min = arr[i];  }  }  printf("最大值: %d\n", max);  printf("最小值: %d\n", min);  return 0;  
}

2.数组元素的平均值

#include <stdio.h>  int main() {  int n;  // 提示用户输入整数个数  printf("请输入整数的个数: ");  scanf("%d", &n);  int arr[n];  // 输入整数  printf("请输入 %d 个整数:\n", n);  for (int i = 0; i < n; i++) {  scanf("%d", &arr[i]);  }  int sum = 0;  // 计算总和  for (int i = 0; i < n; i++) {  sum += arr[i];  }  double average = (double)sum / n; // 计算平均值  printf("平均值: %.2f\n", average);  return 0;  
}

3.反转数组

#include <stdio.h>  int main() {  int n;  // 提示用户输入整数个数  printf("请输入整数的个数: ");  scanf("%d", &n);  int arr[n];  // 输入整数  printf("请输入 %d 个整数:\n", n);  for (int i = 0; i < n; i++) {  scanf("%d", &arr[i]);  }  // 反转数组  printf("反转后的数组:\n");  for (int i = n - 1; i >= 0; i--) {  printf("%d ", arr[i]);  }  printf("\n");  return 0;  
}

4.合并两个数组

#include <stdio.h>  int main() {  int n1, n2;  // 输入第一个数组的大小  printf("请输入第一个数组的大小: ");  scanf("%d", &n1);  int arr1[n1];  // 输入第一个数组的元素  printf("请输入第一个数组的 %d 个整数:\n", n1);  for (int i = 0; i < n1; i++) {  scanf("%d", &arr1[i]);  }  // 输入第二个数组的大小  printf("请输入第二个数组的大小: ");  scanf("%d", &n2);  int arr2[n2];  // 输入第二个数组的元素  printf("请输入第二个数组的 %d 个整数:\n", n2);  for (int i = 0; i < n2; i++) {  scanf("%d", &arr2[i]);  }  // 合并数组  int merged[n1 + n2];  for (int i = 0; i < n1; i++) {  merged[i] = arr1[i];  }  for (int i = 0; i < n2; i++) {  merged[n1 + i] = arr2[i];  }  // 输出合并后的数组  printf("合并后的数组:\n");  for (int i = 0; i < n1 + n2; i++) {  printf("%d ", merged[i]);  }  printf("\n");  return 0;  
}

5.查找数组中的重复元素

#include <stdio.h>  int main() {  int n;  // 输入数组大小  printf("请输入整数的个数: ");  scanf("%d", &n);  int arr[n];  // 输入数组元素  printf("请输入 %d 个整数:\n", n);  for (int i = 0; i < n; i++) {  scanf("%d", &arr[i]);  }  printf("重复的元素有:\n");  int found[n]; // 用于标记已找到的重复元素  int found_count = 0;  for (int i = 0; i < n; i++) {  int is_duplicate = 0;  for (int j = 0; j < i; j++) {  if (arr[i] == arr[j]) {  is_duplicate = 1;  break;  }  }  if (is_duplicate) {  // 检查是否已经输出过该重复元素  int already_found = 0;  for (int k = 0; k < found_count; k++) {  if (arr[i] == found[k]) {  already_found = 1;  break;  }  }  if (!already_found) {  found[found_count++] = arr[i];  printf("%d ", arr[i]);  }  }  }  printf("\n");  return 0;  
}

6.旋转数组( 编写一个程序,要求用户输入一个整数数组和一个旋转次数k,程序将数组向右旋转k次并输出结果。)

#include <stdio.h>  void rotate(int arr[], int n, int k) {  k = k % n; // 处理k大于n的情况  int temp[n];  // 将后k个元素放到临时数组的前面  for (int i = 0; i < k; i++) {  temp[i] = arr[n - k + i];  }  // 将前n-k个元素放到临时数组的后面  for (int i = 0; i < n - k; i++) {  temp[k + i] = arr[i];  }  // 将临时数组的内容复制回原数组  for (int i = 0; i < n; i++) {  arr[i] = temp[i];  }  
}  int main() {  int n, k;  // 输入数组大小  printf("请输入整数的个数: ");  scanf("%d", &n);  int arr[n];  // 输入数组元素  printf("请输入 %d 个整数:\n", n);  for (int i = 0; i < n; i++) {  scanf("%d", &arr[i]);  }  // 输入旋转次数  printf("请输入旋转次数k: ");  scanf("%d", &k);  // 旋转数组  rotate(arr, n, k);  // 输出旋转后的数组  printf("旋转后的数组:\n");  for (int i = 0; i < n; i++) {  printf("%d ", arr[i]);  }  printf("\n");  return 0;  
}

每天不定时分享一些c语言题目和32项目,如果喜欢就点点关注吧!!!!大佬们,以下是32项目的链接

https://blog.csdn.net/qq_74267366/article/details/141721460?spm=1001.2014.3001.5501


http://www.ppmy.cn/news/1520513.html

相关文章

数据结构---链表

指针和数组 数组的用途: 固定大小的存储: 数组用于存储固定大小的一组相同类型的元素。数组的大小在声明时必须指定&#xff0c;并且在程序运行期间不能改变。访问效率高: 数组允许通过下标进行快速访问&#xff0c;时间复杂度为 O(1)。内存连续性: 数组的元素在内存中是连续存…

网络安全面试经验分享:蘑菇街/网络安全

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 蘑菇街 介绍…

蓝牙协议栈API分析

蓝牙协议栈API分析是一个复杂但重要的任务&#xff0c;它涉及到蓝牙通信的各个方面&#xff0c;包括设备发现、连接建立、数据传输以及安全管理等。以下是对蓝牙协议栈API的详细分析&#xff0c;旨在提供一个全面的视角。 一、蓝牙协议栈概述 蓝牙协议栈是蓝牙技术实现的基础…

解决reCaptcha v2 Invisible:识别和参数

概述 reCaptcha v2 Invisible是一种旨在提供安全性而不打扰用户体验的验证码类型。与传统的验证码不同&#xff0c;reCaptcha v2 Invisible在检测到可疑活动时才会要求用户进行互动。本文将引导您如何使用CapSolver API识别并解决reCaptcha v2 Invisible挑战。 什么是reCaptc…

ChatGPT与R语言融合技术在生态环境数据统计分析、绘图、模型中的实践与进阶应用

自2022年GPT&#xff08;Generative Pre-trained Transformer&#xff09;大语言模型的发布以来&#xff0c;它以其卓越的自然语言处理能力和广泛的应用潜力&#xff0c;在学术界和工业界掀起了一场革命。在短短一年多的时间里&#xff0c;GPT已经在多个领域展现出其独特的价值…

计算机网络-VRRP切换与回切过程

前面我们学习了VRRP选举机制&#xff0c;根据VRRP优先级与IP地址确定主设备与备份设备&#xff0c;这里继续进行主备切换与主备回切以及VRRP抢占模式的学习。 一、VRRP主备切换 主备选举时根据优先级选择主设备&#xff0c;状态切换为Master状态&#xff0c;那当什么时候会切换…

科研学习|论文解读——OceanGPT:用于海洋科学任务的大型语言模型

摘要 海洋覆盖我们星球表面70%以上&#xff0c;对于理解生命的丰富储备和生物多样性至关重要。鉴于海洋在调节全球气候和支持经济中的关键作用&#xff0c;海洋科学研究具有重大意义。最近&#xff0c;大型语言模型&#xff08;LLMs&#xff09;的进步改变了科学的范式。尽管在…

Linux下递归设置目标目录及其子目录和文件的权限

〇、背景 本文旨在简单介绍一个在Linux环境下批量修改目录及其子目录和文件的权限的方法。 一、实现 首先新建一个shell脚本文件&#xff0c;使用指令$ vi chmod.sh&#xff0c;然后在文件中输入下述代码。 #!/bin/bashOFFSET_INDEX" " DIR_MODE755 FILE_MODE664…

Oracle---PAG程序全局区的组成:堆栈区、会话区、游标区、排序区

文章目录 PGA程序全局区PGA主要内容1、排序区&#xff08;SORT AREA&#xff09;**为什么给排序设置合理的排序区大小** 2、会话区&#xff08;USER SESSON DATA&#xff09;3、堆栈区保存变量信息(STACK SPACE)4、游标区 (CURSOR STATE) PGA程序全局区 程序全局区或进程全局区…

AN7536PT时钟电路

目录 1 时钟电路概述2 时钟晶振电路2.1 需求分析2.2 晶振选型&#xff08;Datasheet表5-7解读&#xff09;2.3 设计晶振电路&#xff08;表4-1、图5-4&#xff09; 1 时钟电路概述 时钟电路是一种用于产生稳定、周期性脉冲信号的电子电路。它通常由晶体振荡器和相关逻辑电路组…

Luminar Neo for Mac智能图像处理软件【操作简单,轻松上手】

Mac分享吧 文章目录 效果一、下载软件二、开始安装1、双击运行软件&#xff0c;将其从左侧拖入右侧文件夹中&#xff0c;等待安装完毕2、应用程序显示软件图标&#xff0c;表示安装成功 三、运行测试安装完成&#xff01;&#xff01;&#xff01; 效果 一、下载软件 下载软件…

Hackme靶场渗透攻略

步骤一&#xff0c;注册登录进去 步骤二&#xff0c;点击search 我们发现有很多书 步骤三&#xff0c;搜索一本书抓包发放到重放器 步骤四&#xff0c;数据改为1*&#xff0c;复制数据包到1.txt&#xff0c;然后打开sqlmap 步骤五&#xff0c;sqlmap查看当前数据库 python s…

阿尔茨海默病症识别+图像识别Python+人工智能+深度学习+TensorFlow+机器学习+卷积神经网络算法

一、介绍 阿尔茨海默病症识别。使用Python作为主要编程语言进行开发&#xff0c;基于深度学习等技术使用TensorFlow搭建ResNet50卷积神经网络算法&#xff0c;通过对病症图片4种数据集进行训练[‘轻度痴呆’, ‘中度痴呆’, ‘非痴呆’, ‘非常轻微的痴呆’]&#xff0c;最终得…

TeeChart助力科研软件:高效实现数据可视化

在当今的科学研究中&#xff0c;数据可视化已经成为理解和传播复杂信息的关键工具。尤其是在物理研究领域&#xff0c;科学家们经常需要处理大量的数据&#xff0c;并通过可视化将这些数据转化为更易理解的形式。TeeChart作为一个强大且灵活的图形展示工具&#xff0c;能够帮助…

前端按钮通过浏览器下载附件

html <a click"downloadAttach(record.memoryAddress)">下载附件</a> js downloadAttach(url){var fileUrl window._CONFIG[staticDomainURL] url;window.open(fileUrl); } 配置文件 window._CONFIG[staticDomainURL] http://127.0.0.1:3000/xxx…

Spring Cloud Gateway的使用

Spring Cloud Gateway的使用 1. Spring Cloud Gateway原理2. Spring Boot项目中集成Spring Cloud Gateway2.1 创建项目与添加依赖2.2 配置网关 3. 高级功能与实践**3.1 配置过滤器****3.2 分组路由** 4. 监控与故障处理5. 部署与持续集成 在微服务架构中&#xff0c;服务发现、…

计算机网络(一) —— 网络基础入门

目录 一&#xff0c;关于网络 二&#xff0c;协议 2.1 协议是什么&#xff0c;有什么用&#xff1f; 2.2 协议标准谁定的&#xff1f; 2.3 协议分层 2.4 OSI 七层模型 2.5 TCP/IP 四层模型 三&#xff0c;网络传输基本流程 3.1 局域网中两台主机通信* 3.2 报文的封装与…

uniapp网站和微信小程序 添加 百度统计

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、首先&#xff0c;需要在百度统计平台注册一个账户或登录现有的账户二、新建站点(应用)、添加代码三、代码获取与安装1.在官方网站 新增应用&#xff0c;根据官方…

kernel底层的蓝牙开发流程

kernel底层的蓝牙开发流程是一个复杂且细致的过程&#xff0c;它涉及到从内核配置、驱动编写、工具编译到最终的设备调试等多个环节。以下是一个详细的蓝牙开发流程&#xff0c;旨在为读者提供一个全面的视角。 一、前期准备 1. 确定开发环境 首先&#xff0c;需要确定开发所…

复数遍历4联通区域

怎么理解虚数和复数&#xff1f; - 知乎