第十四章 数组

第十四章 数组

1.  什么是数组

三要素:数组类型  数组名  下标

2.  数组元素

3.  数组下标越界

一旦越界程序就会报错

4.  倒序输出

5.  将数组的下标定义为常量以便于修改

6.  手动操作数组元素

7.  数组的初始化

空间不够报错,多了用0补

字符数组的初始化

char array[10]={“hello”}

等价于char array[10]= “hello”

char array[10]={‘h‘,‘e‘,‘l‘,‘l‘,‘o‘,’\0’};

不等价于char array[10]={‘h‘,‘e‘,‘l‘,‘l‘,‘o‘};

char array[]={‘h‘,‘e‘,‘l‘,‘l‘,‘o‘};占用5个字节

char array[]={‘h‘,‘e‘,‘l‘,‘l‘,‘o‘,’\0’};占用6个字节

char array[]=”hello”;占用6个字节

空间不够报错,多了用\0补

char a[3]={‘a’,’b’,’c’}    //没有错误

char
a[3]=”abc”             
//报错 overland 字符串数组系统自动加\0

8.  求平均考试成绩

total=total+girl[i];

9.  兔子繁殖问题

rabbit[13]={1,1};

for(n=2;n<13;n++)

{

rabbit[n]= rabbit[n-1]+ rabbit[n-2];

cout<<rabbit[n]<<endl;

}

10.  数字排序问题

for(int i=0;i<5;i++)        
//气泡法

{

for(int j=0;j<5-i;j++)

{

if(a[j]<a[j+1])

t=a[j];

a[j]=a[j+1];

a[j+1]=t;

}

}

选择法:

for(j=0;j<5;j++)                         
//一轮下来最小的数已经在最下面了,所以每比较一轮就可以减少一次比较

{

min=j;

for(i=j+1;i<6;i++)                     
//此处与其气泡法有两点不同j+1, 6;

{

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

{

t=a[i];

a[i]=a[min];

a[min]=t;

min=i;

}

}

}

11.  数组在内存中的分布

下标越界,C++不提供报错。只有靠程序员自己时时注意。

12.  数组名

数组名代表的是第一个元素的地址

int a[4]={1,2,3,4}

//int *a=&a[0];  //系统自动生成一个指向数组第一个元素的指针

13.  数组名与函数

☆14.  传递与接收

接收的三种方法:

①void a(int x[])       
      //被调用函数的声明

②void a(int *x)        
      //被调用函数的声明

③void a(int x[30])         
//被调用函数的声明

15.  将数组传递给函数

folat Average(const float *,int )      
//指针的声明

16.  求数组所有元素的和

17.  用递增法查找数据

int find(int m,int a[],int n)

{

for(int i=0;i<n;i++)

{

if(a[i]==m)

return i;

}

return n;

}

18.  用二分法来查找数据

//用于排序好的数组(且不能有相同大小的数字)

int find(int m,int a[],int n)

{

int s=0,l=n-1,i;

while(s<=l)

{

i=(s+l)/2;

if(a[i]==m)

return i;

if(a[i]<m)       //数组递增时用< 递减时用>

s=i+1;

else l=i-1;

}

return n;

}

19.  判断数组是否按照顺序排列

bool check(int a[],int n)

{

for(int
i=1;i<n;i++)        
//此处的i=1是重点因为这里只是比较前                                  
      //后数列的大小

if(a[i]<a[i-1])

return false;

return ture;

}

20.  判断数组排列方式然后执行不同的函数

int check(int a[],int
n)               
//返回的可以是任意值

21.  数组在对象中的传参

22.  对象数组

23.  在对象数组中初始化成员变量

area one[4]={area(10,10),area(13,34),area(20,30),area(40,40)};

24.  堆中对象

for(int i=0;i<10000;i++)

{

area *pone=new area(i,2*i);

}

//在堆中存放一个area类的对象,并用area类的指针pone来指向它,然后初始化该对象的两个成员的值

这个程序只能保存最后一个对象的地址,所以前面的产生了内存泄露

25.  指针数组

解决办法

area *one[10000];    
//声明一个由10000个指向类area的指针组成的数组,即指针数组(存放指针的数组)

for(int i=0;i<10000;i++)

{

area *pone=new area(i,2*i);

one[i]=pone;

cout<<one[i]->get()<<endl;

}

//由于这个数组元素保存的是堆中对象的内存地址,所以必须用成员指针运算符->来访问该对象的成员函数,((*one[i]).get())

//表示是利用指针的一次间接访问

26.  堆中对象数组

area *one=new area[10000];
         
//声明了一个由10000个area对象组成的数组,通过调用new操作符把整个数组创建在堆区中

one[i].set(i,i*2);        //设置堆中每个对象的参数

delete []one;
                 
//删除数组中的每个对象

☆总结:

对象数组,指针数组,堆中对象数组

27.  枚举常量与数组

enum
day{Monday=1,Tuesday,Wendesday,Thursday,Firday,Saturday,Sunday}    
   //enum 是关键字,day 是类型

enum weekl
{sun,mon,tue=5,wed,thu,fri,sat};

则枚举常量的初值如下:sun值为0,mon值为1,tue值为5, wed值为6,thu值为7,fri值为8,sat值为9。

枚举变量:

enum color
{red,yellow,blue}c_l;
c_l=yellow;
//正确,将值为1的枚举常量yellow赋予枚举型变量c_1
c_l=1; //错误,不能直接将整型常量赋予枚举型变量
c_l=(enum
color)l; //正确,先将l强制转换成枚举型常量yellow再赋值

28.  多维数组

29.  多维数组的初始化

30.  定义字符数组

31.  二维数组输出图形

32.  字符串数组

33.  字符串的输入问题

34.  strcat函数

Char:strncat(ch1,ch2,3);//将ch2的头三个字符连接到ch1后;

String:str1.append(str2,3,1);//将str2的下标为3的头1个字符连接到str1中

35.  strcpy函数

先清除a中的所有字符,再将b中的所有字符(包括空字符)复制到a中

另外string还有自己的赋值函数assign

str1.assign(str2,3,1);//将字符串str2下标为3开始的头1个字符赋给str1

cout<<str1<<endl;//输出:c

36.  strcmp函数

if(strcmp(str1,str2)>0)//(string compare)

如果 str1小于 str2,返回负数;如果 str1大于 str2,返回正数;二者相等则返回
0。

37.  strupr函数

转化为大写字

38.  strlwr函数

转化为小写字

39.  strlen函数 sizeof关键字的区别

strlen(string length),sizeof(测容量)

40.  打印杨辉三角形

#include "iostream"

#include<iomanip>

using namespace std;

int main()

{

const int n=10;

int a[n][n];

for(int i=0;i<n;i++)

{

for (int
m=0;m<2*(n-i-1);m++)

{

cout<<" ";

}

for(int
j=0;j<=i;j++)

{

if(j==0||j==i)

a[i][j]=1;

else

a[i][j]=a[i-1][j-1]+a[i-1][j];

cout.width(4);

cout.fill(‘_‘);

cout<<a[i][j];

//放后面有区别

/*cout.width(4);

cout.fill(‘_‘);*/

//cout<<a[i][j]<<setw(4);//这个需要加头文件

}

cout<<"\n\n";

}

cout<<"
"<<"1"<<endl;//说明一个空格占一个字节

}

41.  重载数组下标操作符

char& operator[](int o);//此处&一定要用,因为返回的的是一个数组元素????????????

return size[length-1];//此处的length-1是关键????????????????

本章总结:

时间: 2025-01-16 15:25:07

第十四章 数组的相关文章

Java-第十四章-代参的方法(二)-编程实现,输入班里10名学生的身高,获得身高最高的学生要求对象数组类型方法

package com.ww.yzpA; public class Students { int No; int Height; } package com.ww.yzpA; public class Height { public Students getMaxHeigth(Students[] str) { Students A = new Students(); for (int i = 0; i < str.length; i++) { if (str[i].Height > A.He

C和指针 (pointers on C)——第十四章:预处理器

第十四章 预处理器 我跳过了先进的指针主题的章节. 太多的技巧,太学科不适合今天的我.但我真的读,读懂.假设谁读了私下能够交流一下.有的小技巧还是非常有意思. 预处理器这一章的内容.大家肯定都用过.什么#include,#define #ifdef #undef这些,可是绝对用的不多.作为全面了解学C,还是应该都看一看. 预处理器使用方法非常讲究,用不好会失误,用好了会大大加快执行时速度(不是编译速度). 总结: C程序的第一个步骤就是预处理.预处理器共包括下面几个符号: 1.#define 定

perl 第十四章 Perl5的包和模块

第十四章 Perl5的包和模块 by flamephoenix 一.require函数  1.require函数和子程序库  2.用require指定Perl版本二.包  1.包的定义  2.在包间切换  3.main包  4.包的引用  5.指定无当前包  6.包和子程序  7.用包定义私有数据  8.包和系统变量  9.访问符号表三.模块  1.创建模块  2.导入模块  3.预定义模块 一.require函数    用require函数可以把程序分割成多个文件并创建函数库.例如,在myfi

Java(第十四章)

第十四章 1.Java中的包(package) 2.1 包,对应到磁盘中的文件夹 2.2 新建一个class,默认保存在缺省包中 2.3 声明包的关键字:package package语句,置顶位置 2.4 导入包的关键字:import import 包名.类名(*表示所有); 2.5 作用: 分类存放,解决同名冲突.方便查找和管理 2.6 命名规范 l  Java包名通常由小写字母组成,不能以圆点开头或结尾. l  一个唯一包名的前缀通常是全部小写的ASCII字母,并且是一个顶级域名com.e

第十四章 兼容性和高级互操作

在这一章,我们将学习F# 与其他语言进行互操作所需的内容,不仅包括在.NET 框架内,而且也包括从F# 中使用非托管代码,以及从非托管代码中使用 F#. 警告 在本书中,我尽一切努力保证使你只需要了解 F#:然而,在这一章,虽然我一直保持代码对这些语言中的最低需求,但是,如果你知道一点 C#. C++ 或 .NET Common IL 的内容,对你是有帮助的. C# 调用 F# 库 在 F# 中可以创建两种类型的库:一种是只在 F# 中使用的库,另一种是可以在任何.NET 语言中使用的库.这是因

javascript高级程序设计 第十四章--表单脚本

javascript高级程序设计 第十四章--表单脚本 在HTML中表单由<form>元素表示,在js中表单对应的是HTMLFormElement类型,这个类型也有很多属性和方法:取得表单元素的引用还是为它添加id特性,用DOM操作来获取表单元素:提交表单:把<input>或<button>元素的type特性设置为"submit",图像按钮把<input>元素的type特性设置为"image",也可以调用submit(

java-第十四章-代参的方法(二)-实现MyShopping系统的添加会员功能

 package com.wxws.sms; public class Customer {  int No;  int integarl; } package com.wxws.sms; public class Customers {  Customer[] customers = new Customer[100];  public void add(Customer cust){   for (int i = 0; i <customers.length; i++) {    if (c

java-第十四章-代参的方法(二)-查找会员积分

 package com.wxws.smsB; public class Customer {  int No;  int integarl; } package com.wxws.smsB; public class Customers {  Customer[] customers = new Customer[100];  public void add(Customer cust) {   for (int i = 0; i < customers.length; i++) {    i

R in action读书笔记(19)第十四章 主成分和因子分析

第十四章:主成分和因子分析 本章内容 主成分分析 探索性因子分析 其他潜变量模型 主成分分析(PCA)是一种数据降维技巧,它能将大量相关变量转化为一组很少的不相关变量,这些无关变量称为主成分.探索性因子分析(EFA)是一系列用来发现一组变量的潜在结构的方法.它通过寻找一组更小的.潜在的或隐藏的结构来解释已观测到的.显式的变量间的关系. PCA与EFA模型间的区别 主成分(PC1和PC2)是观测变量(X1到X5)的线性组合.形成线性组合的权重都是通过最大化各主成分所解释的方差来获得,同时还要保证个