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

高端网站建设设常德网站建设制作

高端网站建设设,常德网站建设制作,做公司网站的,公司网站开发毕业设计c语言基础07 数组 数组的概念 数组是相同类型,有序数据的集合。 数组的特征 数组里的数据被称为数组的元素数组中的元素存放在内存空间 衍生概念:下标(索引) 下标或者索引代表了数组中元素距离第一个元素的偏移量。数组中元…

c语言基础07

数组

数组的概念

数组是相同类型有序数据的集合。

在这里插入图片描述

数组的特征
  • 数组里的数据被称为数组的元素
  • 数组中的元素存放在内存空间
衍生概念:下标(索引)
  • 下标或者索引代表了数组中元素距离第一个元素的偏移量。
  • 数组中元素的地址值,下标越大,地址值越大。(每一块内存空间都有一个独有的内存地址,内存中每8个bit编一个号,也就是内存地址)
  • 数组的下标是从0开始的。

一维数组

数组的定义
类型说明符/数据类型  数组名[数组容量]

说明:

  • 数组的类型说明符由数组中的元素来决定,类型说明符也就是数据类型。元素是什么类型,数组就是什么类型。同一个数组中,所有元素的类型都是一致的。
  • 数组名也是标识符,数组名,可以理解为数据类型是数组的变量。
  • 数组容量也可以叫做常量表达式或者元素个数,其值必须为整型,可以包含常量和符号常量,但不能是变量

类型:

​ 代表了数组中元素的类型

容量:

​ 数组中能存储多少个元素,数组容量可以是一个常量、常量表达式、还可以是符号常量,但必须是整型。

数组的最大下标 = 数组元素个数 - 1
数组元素的访问

原则:数组中的元素不能一次性访问所有,只能一个一个的访问。

访问方式:

数组名[下标]

注意:数组元素的访问一定不能越界

案例:

  • 利用循环结构给数组元素a[0]~a[9]赋值0~9,并且逆序输出。
#include <stdio.h>
int main(int argc,char *argv[])
{
// 创建一个数组,用来存放0~9的数字
int a[10];
// 使用for循环给数组元素赋值(一般数组配套的都是for循环)
// C语言中,没有提供数组的大小,需要我们自己计算,数组大小 = 数组总字节数 / 1个元素的字节数
int len = sizeof(a) / sizeof(a[0]); // 等价与 int len = sizeof(a) / sizeof(int)
for(int i = 0;i < len; i++)
{
a[i] = i;
}
// 逆序输出
// 遍历:通过循环将数组中的元素一个一个取出来
for(int j = len -1; j>= 0; j--)
{
printf("%4d",a[j]);
}
printf("\n");// 纯粹换行return 0;
}
数组初始化

定义数组的同时,用指定数据来给对应的元素赋值。

简化数组定义后,需要对元素一一赋值。

语法:

数据类型 数组名[数组容量] = {常量1,常量2,常量3...};

注意事项:

  • 数组可以部分初始化,也就是可以给数组中前几个元素初始化,未被初始化的元素将自动初始化,大概率是0;
int arr[10] = {11,12,13,14,15};
int arr[10] = {11,12,13,14,15,0,0,0,0,0};int arr[] = {11,12,13,14,15};
int arr[5] = {11,12,13,14,15};
  • 柔性数组

​ 在C99标准,针对结构体的最后一个成员可以是一个未指定大小的数组;

广义理解:数组容量待定或者待确定的数组,举例: int arr[] = {1,2,3,4,5}

面试题:

  • 在不知道数组类型的情况下,如何确定数组元素的个数
int length = sizeof(arr) / sizeof(arr[0])

说明:

​ 1.arr就是我们计算的数组本身, sizeof(arr) 用来计算该数组中总的字节大小。

​ 2.sizeof(arr[0]) 用来计算数组中一个元素所占的字节大小,因为数组中的元素类型相同,

所以计算哪一个都行。

​ 3.sizeof(arr)/sizeof(arr[0]) 就是用数组中总的字节数除以每一个元素所占的字节数,从

而得到元素的个数。

一维数组的案例

案例:

  • 斐波拉契数列
  • 代码:
#include <stdio.h>
int main(int argc,char *argv[])
{
int i;// 循环变量
// 定义一个数组,用来存储数列,默认存储的第1和第2的值是1
int f[20] = {1,1};
// 计算数组的大小
int len = sizeof(f) / sizeof(f[0]);
// 使用for循环,将生成的数据存入数组
for(i = 2;i < len; i++)// i=3
{
f[i] = f[i-2]+f[i-1];// 给数组元素赋值,从数组的第3个元素开始 1,1,2,3,5..
}
// 遍历数组
for(i = 0; i < len; i++)
{
// 遍历的时候,要求每5个换一行,也就是1行显示5个
if(i % 5 == 0)
{
printf("\n");
}
printf("%8d",f[i]);
}
printf("\n");
return 0;
}

案例:

  • 从键盘输入年、月、日,计算并输出该日是该年的第几天
  • 分析:
    • 首先创建一个数组,用来存放每一个月的天数,因为二月比较特殊,初始化的时候设置为0,int t[] = {31,0,31…}
    • 从控制台输入年、月、日
    • 闰年判断,修改数组中二月对应的天数(闰年:29,平年:28)
    • 定义一个变量,用来记录天数,默认值是我们输入的天数:int sum = 14
    • 将当前月之前所有的天数,从数组中取出来进行相加 sum += t[0]+t[1]…
    • 最后打印输出sum
  • 代码:
#include <stdio.h>
int main(int argc,char *argv[])
{
// 定义一个数组,用来存放1~12月的天数,二月比较特殊,暂时不初始化
int t[] = {31,0,31,30,31,30,31,31,30,31,30,31};
// 定义三个变量,用来接收控制台输入的年,月,日
int year,month,day;
printf("请输入年份、月份、天:\n");
scanf("%d-%d-%d",&year,&month,&day);
// 润年的判断,给数组中的二月份赋值天数
if((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0))
t[1] = 29;// 润年
else
t[1] = 28;// 平年
// 创建一个变量,用来记录当前是第几天,默认位当前输入的天数
int sum = day;
// 将对应月份之前的所有月份天数加起来
for(int k = 0; k < month - 1; k++)
{
sum += t[k]; // 叠加前几个月的天数
}
printf("%d月%d日是%d年第%d天。\n",month,day,year,sum);return 0;
}
数组的典型应用:冒泡排序
向后冒泡
  • 思想:

    1.一次只排好一个数,针对n个数,最差情况需要n-1次排好

    2.每次排序将相邻数据两两比较,将较大或较小的数据向后交换,等所有数据都比较完成,较大或较小的数就会出现在最后。

    3.在余下的数中再次应用第二步的操作,直到只剩下1个数。

向前冒泡
  • 思想:

​ 1… 一次只排好一个数,针对n个数,最差情况需要n-1次就可以排好

​ 2.每次排序假定第一个元素是最大或者最小的,用第一个元素的后面的元素一一与第一个元素比较,遇到较大或者较小的和第一个元素交换,访问完数组的最后一个元素,就排好了一个数。

​ 3… 在余下的数中,再次应用第2步的操作,直到只剩下1个数。

  • 代码:
#include <stdio.h>
int main(int argc,char *argv[])
{
// 创建一个数组,用来存储排序的序列int arr[10];
// 定义三个变量 i:比较的轮数(0~len-1)j:每一轮比较的次数(0~len-1-i)temp:临时变量,用来实现两个变量值的交换int i,j,temp;printf("请输入10个整数:\n");
// 计算数组的大小int len = sizeof(arr) / sizeof(arr[0]);
// 通过循环录入数据for(i = 0; i < len; i++){scanf("%d",&arr[i]);}printf("\n");// 冒泡排序
// 第一次循环:控制比较的轮数:轮数 = len -1;for(i = 0; i < len - 1; i++){	
// 第二层循环:控制每一轮的比较次数:次数 = len - 1 - ifor(j = 0; j < len - 1 - i; j++){
// 相邻两个数进行比较,满足条件交换位置if(arr[j] > arr[j+1]) // 1 2{temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}
}
printf("冒泡排序后的数列:\n");
for(i = 0; i < len; i++)
{printf("%4d",arr[i]);
}printf("\n");return 0;
}

二维数组

定义

二维数组本质上是一个行列式的组合,也就是说二维数组由行和列两部分组成。属于多维数组。二维数组数据是通过行列进行解读。

语法
数据类型 数组名[行数][列数]; // 二维数组外层表示行数,内层表示列数
特殊写法
  • 下标可以是整型表达式,如: a[2-1] [2*2-1]
  • 下标可以是已经有值的变量或数组元素,如:a[2*x-1] [b[3] [1]]
  • 数组元素可以出现在表达式中,如:b[1][2] = a[2][3]/2
http://www.dtcms.com/wzjs/57320.html

相关文章:

  • 哈尔滨网页设计模板网站电商运营培训
  • 余姚网站建设报价windows优化大师的优点
  • 黄页推广网站下载网站更换服务器对seo的影响
  • 南宁seo网站排名优化公司定制网站开发公司
  • 建设网站的appseo系统培训
  • 宁波网站优化找哪家网站推广软件免费版
  • 第一次做网站热点新闻
  • 杭州集团网站建设方案2024年最新一轮阳性症状
  • 浙江省嘉兴市建设局网站站长seo推广
  • h5创建网站如何找到网络公关公司
  • 网络管理是什么搜索引擎优化工具
  • 宁波网站优化方案新冠疫情最新消息
  • 网站建设实训总结范文台州网站建设平台
  • php mysql 网站建设搜索引擎免费登录入口
  • 腾讯建站平台官网学大教育培训机构电话
  • 渭南建筑工程网百度搜索引擎关键词优化
  • php网站开发百度百科广西南宁市有公司网站设计
  • c语言做项目网站csdn深圳网站维护
  • 对接空间站廊坊关键词快速排名
  • 织梦cms可以做淘宝客网站么百度搜索榜排名
  • 台州做微网站大型网站建设公司
  • 做网站公司哪家公司宁波seo排名外包
  • 郑州网站建设亻汉狮网络2021最近最火的关键词
  • 大访问量的网站怎么做优化广东东莞疫情最新情况
  • 做购物网站的开题报告开发网站用什么软件
  • 网站建设外文文献网站友情链接的好处
  • 泉州网站建设公司首选免费开源代码网站
  • 怎样做网站分流赚钱泉州全网营销优化
  • 最新网络游戏排行榜2021seo的主要工作是什么
  • 北京网站建设签约网络赚钱推广