C语言基础(10)-数组
一.数组的定义
数组就是在内存中连续的相同类型的变量空间。
二.数组在内存中的存储方式
同一个数组所有的成员都是相同的数据类型,同时所有的成员在内存中的地址是连续的,数组名是一个地址的常量,代表数组中首元素的地址。
三.数组的初始化
3.1 一维数组初始化
int a[] = { , , };
int a[] = { };
int a[] = {,,,,,,,,,};
int a[] = {,,,,,,,,,}; // 此写法与上面的写法是等价的
注意:
在C语言中,数组未初始化就使用是极其危险的,系统会为数组中的每一个元素指定一个随机的值,因此在使用数组之前最好先初始化。
练习1:将指定数组反转
定义下列数组
int a[10] = {0,1,2,3,4,5,6,7,8,9};
将该数组中的元素进行反转(最大值在前,最小值在后)。
#include <stdio.h> void main() { int a[] = {,,,,,,,,,}; // int a[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; for (int i = ; i < ;i++) { printf("a[%d]=%d\n",i,a[i]);
} printf("------------------ 将数组反转 ------------------\n"); int min = ; // 记录当前数组的最小下标
int max = ; // 记录当前数组的最大下标 while (min < max) {
int tmp = a[min]; // 记录当前较小下标的值
a[min] = a[max]; // 将较大下标值赋值给较小下标的值
a[max] = tmp; // 将较小下标的值赋值给较大下标的值
min++;
max--;
} for (int i = ; i < ; i++) {
printf("a[%d]=%d\n",i,a[i]);
} system("pause"); }
运行结果:
练习2:遍历数组
上面的遍历方式虽然可以使用,但是相对死板,假如数组a变为了:
int a[] = {,,,,,,,,,9,10,11,12};
则for循环中i的值也应做相应的修改。推荐写法:
void main() { int a[] = { , , , , , , , , , 9,10,11 }; for (int i = ; i < sizeof(a) / sizeof(int); i++) { // int 类型占4个字节,sizeof(a)一共占40个字节,求得一共有10个元素
printf("a[%d]=%d\n",i,a[i]);
} system("pause");
}
可以利用sizeof来妥善解决上面的问题。
练习3:求一个数组中的最大值和最小值的下标
已知一个数组为
int a[] = {,,,,,,,,,,,,};
求其最大值和最小值的下标
void main() { // 找出该数组中最大值和最小值元素的下标
int a[] = {,,,,,,,,,,,,};
int min = a[]; // 最小值
int max = a[]; // 最大值
int min_loc = ; // 最小值下标
int max_loc = ; // 最大值下标 for (int i = ; i < sizeof(a) / sizeof(int); i++) {
if (a[i] > max) {
max = a[i];
max_loc = i;
} if (a[i] < min) {
min = a[i];
min_loc = i;
}
} printf("最大值:%d,最小值:%d\n",max,min);
printf("最大值的下标为:%d,最小值的下标为%d\n",max_loc,min_loc); system("pause"); }
练习4:查找数组中大于平均值的元素
已知一个数组为:
int a[] = { , , , , , , , , , , , ,};
查找该数组中大于平均值的元素
void main() { /* 查找数组中大于平均值的元素 */
int a[] = { , , , , , , , , , , , ,}; int num = sizeof(a) / sizeof(int); // 计算当前元素个数
int total = ; // 计算当前元素总和
for (int i = ; i < num; i++) {
total += a[i];
}
int avg = total / num; // 计算当前数组平均值
for (int i = ; i < num; i++) {
if (a[i] > avg) {
printf("%d\n",a[i]);
}
}
system("pause"); }
执行结果:
四.二维数组的定义及初始化
// 二维数组的定义
int a[][] = { {,,,}, {,,,}, {,,,} };
// int a[3][4] = { {1,2,3,4}, {5,6,7,8} }; // 正确,只初始化前两个维度
// int a[][4] = { { 1, 2, 3, 4 }, {5,6,7,8} }; 正确
// int a[2][] = { { 1, 2, 3, 4 }, {5,6,7,8} }; 这种写法是不对的
// int a[][] = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 } }; 这种写法是不对的
练习1:遍历二维数组
void main() { // 二维数组的定义
int a[][] = { {,,,}, {,,,}, {,,,} };
// int a[3][4] = { {1,2,3,4}, {5,6,7,8} }; // 正确,只初始化前两个维度
// int a[][4] = { { 1, 2, 3, 4 }, {5,6,7,8} }; 正确
// int a[2][] = { { 1, 2, 3, 4 }, {5,6,7,8} }; 这种写法是不对的
// int a[][] = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 } }; 这种写法是不对的 // 遍历当前二维数组
int num_1 = sizeof(a) / sizeof(a[]); // 一维数组元素个数
int num_2 = sizeof(a[]) / sizeof(a[][]); // 二维数组元素个数 for (int i = ; i < num_1; i++) { for (int j = ; j < num_2; j++) {
printf("a[%d][%d]=%d\t",i,j,a[i][j]);
}
printf("\n");
} system("pause");
}
执行结果:
C语言基础(10)-数组的更多相关文章
- R语言基础:数组&列表&向量&矩阵&因子&数据框
R语言基础:数组和列表 数组(array) 一维数据是向量,二维数据是矩阵,数组是向量和矩阵的直接推广,是由三维或三维以上的数据构成的. 数组函数是array(),语法是:array(dadta, d ...
- Go语言基础之数组
Go语言基础之数组 本文主要介绍数组(array)及它的基本使用. Array(数组) 数组是同一种数据类型元素的集合. 在Go语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化 ...
- GO学习-(8) Go语言基础之数组
Go语言基础之数组 Array(数组) 数组是同一种数据类型元素的集合. 在Go语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化. 基本语法: // 定义一个长度为3元素类型为 ...
- Java之--Java语言基础组成—数组
Java语言基础组成-数组 Java语言由8个模块构成,分别为:关键字.标识符(包名.类名.接口名.常量名.变量名等).注释.常量和变量.运算符.语句.函数.数组. 本片主要介绍Java中的数组,数组 ...
- 第二十四节:Java语言基础-讲解数组的综合应用
数组的综合应用 // 打印数组 public static void printArray(int[] arr) { for(int x=0;x<arr.length;x++) { if(x!= ...
- C语言基础知识-数组和字符串
C语言基础知识-数组和字符串 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数组概述 在程序设计中,为了方便处理数据把具有相同类型的若干变量按有序形式组织起来的方式我们称为数组 ...
- go语言基础之数组比较和赋值
1.go语音基础之数组比较和赋值 示例: package main //必须有个main包 import "fmt" func main() { //支持比较,只支持 == 或 ! ...
- js脚本语言基础和数组
js和PHP中,字符串赋值:要使用"双引号"或"单引号"引起来:例如:var c="你好"不同类型进行数学运算,要转换,类型转换:强制转换p ...
- C语言基础 (10) 变量作用域,生命周期 内存结构
01 课程回顾 1.指针数组 注意: 对于数组来说,在使用sizeof的时候a和&a[0]是不一样的, 虽然以%x打印出来他们都是地址 2.值传递 int a; fun(a); int *** ...
随机推荐
- kd树和knn算法的c语言实现
基于kd树的knn的实现原理可以参考文末的链接,都是一些好文章. 这里参考了别人的代码.用c语言写的包括kd树的构建与查找k近邻的程序. code: #include<stdio.h> # ...
- shell 脚本之 shell 练习题汇总
整理了一些 shell 相关的练习题,记录到这里. 1. 请按照这样的日期格式 xxxx-xx-xx 每日生成一个文件,例如:今天生成的文件为 2013-09-23.log, 并且把磁盘的使用情况写到 ...
- python安装后推荐的安装两款文本编辑器
Notepad++ 7.2.2和 Sublime Text --道心 Notepad++ 7.2.2 Notepad++ 是一款非常有特色的编辑器,是开源软件,可以免费使用.支持的语言: C, C++ ...
- WinformWPF 多线程访问控件【转】
大家知道WPF中多线程访问UI控件时会提示UI线程的数据不能直接被其他线程访问或者修改,该怎样来做呢? 分下面两种情况 1.WinForm程序 )第一种方法,使用委托: private delegat ...
- Double Dispatch讲解与实例-面试题
引言 说实话,我看过GoF<Design Patterns>,也曾深深的被李建忠<设计模式>系列Webcast吸引.但是还没有见过“Double Dispatch模式”.的确G ...
- 揭开C++类中虚表的“神秘面纱”
C++类中的虚表结构是C++对象模型中一个重要的知识点,这里咱们就来深入分析下虚表的在内存中的结构. C++一个类中有虚函数的话就会有一个虚表指针,其指向对应的虚表,一般一个类只会有一个虚表,每个虚表 ...
- Maven打包含有Main方法jar并运行
最近使用Kettle做定时数据抽取,因为Job更新或需求变更,修改Bug等种种原因,需要对重跑Job一般是针对每天的数据重跑一次.刚开始的做法是直接在自己的开发机器上重跑,这样速度比较慢,因为这时候你 ...
- ElasticSearch+Kibana 索引操作( 附源码)
一 前言 ElasticiSearch 简介 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elastics ...
- [网站公告]数据库服务器IOPS跑满造成网站不能正常访问
今年下午13:20-14:20左右,突增的访问量引发数据库服务器(阿里云RDS)IOPS跑满,造成大量请求执行缓慢,从而严重影响了网站的正常访问,给大家带来很大的麻烦,望大家谅解! 在出现故障时,当我 ...
- ServerSocket的介绍
导语 仅仅只有Socket类是不足以编写服务器的.要创建一个Socket,你需要知道希望连接哪个Internet主机.编写服务器程序时,无法预先了解哪个主机会联系你,即使确实知道,你也不清楚那个主机希 ...