程序设计总结三(12.25)

 

 

 

一、知识点总结

一维数组

1、数组定义:

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

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

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

 【可用指针定义动态数组】

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

  【a即pa(例如:int a[5];int * pa=a;)即&a[0]

 a+i即pa+i即&a[i] ,注意上述三种形式只有指针是变量

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

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

memset(a,0,sizeof(a))的作用是把数组a清零,它在cstring中定义。  

6、容错处理:保证输入在合法范围之间慎防数组越界

7、数组的排序:

选择排序

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;}

sort函数  O(n*log2(n))

    头文件为#include <algorithm> 在c++中

    sort(首地址(a),尾地址(a+n),排序方式(不写则默认从小到大));

关于排序方式:

1)定义函数bool complare(int a,int b{return a>b;}

用法:sort(a,a+n,complare);

2)内置:sort(a,a+n,less<数组元素的数据类型>)//从大到小

       sort(a,a+n,greater<数组的数据类型>)//从小到大

同理,sort()可以进行字符排序

8折半查找用于有序序列中查找指定元素。(可用bsearch函数(c))

   ow=0,high=n-1,mid=0;

    while(low<=high)

    {

                    mid=(low+high)/2;

                    if(a[mid]>temp) high=mid-1;

                    else if(a[mid]<temp) low=mid+1;

                            else  couture<<a[mid]<<endl;}

cout<<"Not Found!"<<endl;}  

 

二维数组

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

二维数组的列数必须被声明(要不然不知道啥时候换行...

字符数组和字符串数组

 1)  具体格式如下:

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

2)初始化:

字符char chr1[4]={‘a’,‘b’,c,\0’};

字符串 char chr2[5]=“abc” ;(chr1和chr2表示的一样

       char chr[3][4]={“abc”,“mno”,“xyz};

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

 定界符不同/量不同/‘\0’的使用

 

4字符串的输入

(1)scanf语句

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

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

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

(2)gets语句(cstdio中)

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

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

   (3)getline语句

   格式:getline(cin,line(字符数组eg.a[i]),‘#’)

   说明:到‘#’处停止输入,不写默认到‘\n

   (4)cin.getline()

cin.getline(字符指针(char*),字符个数N(int),结束符(char));

此函数会一次读取多个字符(包括空白字符)。它以指定的地址为存放第一个读取的字符的位置,依次向后存放读取的字符,直到读满N-1个,或者遇到指定的结束符为止。若不指定结束符,则默认结束符为'\n'

5字符串的输出

(1)printf语句

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

(2) puts语句

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

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

6字符串处理函数(均在string中,在c++中常用<string>)

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

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

二、应用

数组的主要应用是记录相同类型的数据,常见的递归问题也常使用数组解决。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值