第八章 数组

第8章 数组

一、知识点总结

一维数组

1、数组定义:

   类型标识符 数组名[常量表达式]={值,值,…}

   一组具有相同类型的变量的集合。

   一个数组在内存中占一片连续的存储单元。

   直接对a的访问,就是访问此数组的首地址。

2、▲数组大小必须是值为正的常量,不能为变量。

   例:int n;int a[n];×

3、数组下标从0开始。

4、一维数组初始化:

   数组定义在主函数之外,起初始值为0;定义在主函数之内,起初始值是随机的。

5、使两个数组值相等的方法:

   ①列举赋值:b[0]==a[0] b[1]==a[1]...②循环赋值

   ③数组a复制k个元素到数组b:mencpy(b,a,sizeof(int)*k)

     数组a全部复制到数组b:mencpy(b,a,sizeof(a))

     使用mencpy函数要包含头文件cstring。

6、容错处理:保证输入在合法范围之间

 7、Fibonacci数列:

求其数列1,1,2,3,5,8,......的第k个数,即

              F1=1 (n=1)

              F2=1 (n=2)

              Fn=Fn-1+Fn-2 (n>=3)

8、数组的排序:

①选择排序:

for(j=0;j<n-1;j++)

{

l=j;

    for(i=1;i<n;i++)

    if(a[l]<a[i])

       l=I;

 if(l!=j) i=a[l],a[l]=a[j],a[j]=i;

}

②插入排序:

 l= i-1;temp=a[i];

 while(l>=0&&a[l]>temp)

{       

     a[l+1]=a[l];

     l--;

}

a[l+1]=temp;

③冒泡排序:

for (int j=1; j<=n-1; ++j) //冒泡法排序

for (int i=1; i<=n-j; ++i) //两两相比较           

if (a[i]<a[i+1]) //比较与交换

{t=a[i]; a[i]=a[i+1]; a[i+1]=t;}

9、折半查找用于有序序列中查找指定元素。

10、sort函数

    头文件为#include <algorithm>

    默认的sort函数是按升序排。

    sort(a,a+n); //两个参数分别为待排序数组的首地址和尾地址

二维数组

数据类型 数组名[常量表达式1] [常量表达式2] ;

字符数组和字符串数组

1、第一个元素同样是从ch1[0]开始,而不是ch1[1]。

   具体格式如下:

   [存储类型] char 数组名[常量表达式1]…

2.字符数组的赋值

 ①用字符初始化数组

  例如:char chr1[5]={‘a’,‘b’,‘c’,‘d’,‘e’};

  字符数组中也可以存放若干个字符,也可以来存放字符串。

两者的区别是字符串有一结束符(‘\0’)。

字符串是一维数组,但是一维字符数组不等于字符串。

 ②用字符串初始化数组

  用一个字符串初始化一个一维字符数组,可以写成char chr[5]=“abcd”;

  ③数组元素赋值

3、字符常量和字符串常量的区别

  ①两者的定界符不同,字符常量由单引号括起来,字符串常量由双引号括起来。

  ②字符常量只能是单个字符,字符串常量则可以是多个字符。

  ③可以把一个字符常量赋给一个字符变量,但不能把一个字符串常量赋给一个字符变量。

  ④字符常量占一个字节,而字符串常量占用字节数等于字符串的字节数加1。增加的一个字节中存放字符串结束标志‘\0’。例如:字符常量‘a’占一个字节,字符串常量“a”占二个字节。

4、字符串的输入

  (1)scanf语句

   格式:scanf(“%s”,字符数组名);

   说明:①系统会自动在输入的字符串常量后添加‘\0’标志,因此输入时,仅输入字符串的内容即可。

   ②输入多个字符串时,以空格分隔。

  (2)gets语句

   格式:gets(字符数组名);

   说明:使用gets只能输入一个字符串。读入的是一整行,包括空格。

5、字符串的输出

  (1)printf语句

   格式:printf(“%s”,字符数组名);

  (2) puts语句

   格式:puts(字符串名称);

   说明:puts语句输出一个字符串和一个换行符。对于已经声明过的字符串a,printf(“%s\n”,a)和 puts(a)是等价的。

6、字符串处理函数

     strlen(字符串名)  计算字符串的长度,终止符’\0’不算在长度之内

    strlwr(字符串名)  将字符串中大写字母换成小写字母

二、感受

这一章节的题目做起来明显感觉很吃力、很费劲。本打算着一天能做一道数组题,但是计划总是赶不上变化,没做几道就做不下去了?,因为每道题都会做很久才能AC。就算很快想到解题的思路,但是运行时总会出现错误,就在纠错的路上一去不复返?。这也让我意识到了做题一定要考虑全面,从而训练出缜密的思考方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值