文章目录
第一节:函数
第二节:数组是个大仓库
数组的概念
根据前面的知识,基本展示并使了了如何使用变量,可是,单个的变量有什明显的缺点,那就是它只能存储少量的数据,比如一个数,或一个字符,那么如果想要处理很多数据,那就需要很多的变量,然而变量一旦太多,便难以管理,因此就必需有一个更适宜的存储方式。这就是数组。
数组的声明与初始化
数组的本质也是变量,所以在数组使用前,也必须声明数组。
1、数组的语法格式
数据类型 数组名[常量表达式];
注意:数组的类型、命名规则与变量相同,特征是有
[ ],每个存在数组中的变量称为数组元素,中括号内的常量表达式,指的是数组的大小
例:
// 声明一个可以存放5个整型数据的数组
int a[5]
2、操作数组
- 数组元素的下标
数组会给每个存储在里面的每个元素进行编号,这些号码称为下标,操作数组是可使用数组名[下标],访问对应的数组元素,数组的下标从0开始。
例:

- 将元素存入数组
对数组的操作跟对变量在操作大同小异,也是通过赋值的形式,但要注意下标是否有效
例:
int array[5];
// 对数组元素进行赋值
array[0] = 1;
array[1] = 3;
array[2] = 5;
array[3] = 7;
array[4] = 9;
//访问元素,并输出
cout << array[3] << endl;
cout << array[0] << endl;
执行结果:

3、数组的初始化
在学习变量时,变量在声明的同时可以进行初始化。同样地,数组也可以在声明时同时进行初始化。
格式:
数据类型 数组名[常量] = {元素0初始值,元素1初始值...}
注意:
大括号中值 的个数不能大于声明数组的大小。
不能通过添加逗号的方式跳过
值的个数可以小于声明数组的大小
例:
int a1[3] = { 0, 1, 2, }; // 正确
int a2[3] = { 0, 1, 2, 3}; // 错误,初始化值个数大于数组大小
int a3[3] = { 0, , 2, }; // 错误,初始化值被跳过
int a4[3] = { 0, 1, }; // 错误,最后一个不能在后面加逗号
int a5[3] = { 0, 1 }; // 正确,初始化值少于数组大小是可以的
4、省略数组的大小
面对初始化一个数组,既要进行赋值,又要数元素的个数,这显然非常不方便 ,因此省略数组的大小,也是一个方便的操作。
例:
// 正常初始化赋值
int a[4] = {0, 3, 6, 8};
// 省略数组大小赋值
int a[] = {0, 3, 6, 8};
省略数组大小的写法便于在声明数组元素时的插入或修改,不必再去考虑数组的大小变化,计算机会自动根据数组的元素定义大小。
字符数组在内存中的存储
1、内存和地址
在计算机中,变量和数组者是放在内存里的,内存里就像有一个个的小房间,数据都存在这些房间里面。然而每个房间都有唯一的房间号码,因此计算机就是通过寻找这些房间号码进行访问和修改指定的数据。这些号码就是
内存地址,通常这些内存地址都以一串16进制的数来表示。
一个小房间只能存储一个字节的数据(即1B,一个汉字至少是2B), 因此不同的变量需要的房间大小都是不同的
2、数组在内存中的存储
不同的变量存储的内存大小是不同的,而数组在内存中则是由N个相邻的元素按顺序组成,声明时若省略数组的大小,访问时便很可能会越界。
sizeof(数组名或数据类型) ————求数组/ 数据内型的大小
例:
int a[] = {3, 5, 6, 8, 7, 9} ;
int s1 = sizeof(a);
cout << "a所占内存是:" << s1 << endl;
int s2 = sizeof(int);
cout << "a的数据类型所占内存是:" << s2 << endl;
int s3 = s1 / s2;
cout << "数组的大小是:" << s3 << endl;
执行结果:

3、字符的储存
- ASCII字符集
【什么是字符集】
计算机记录文本的方式是通过字符集序号来记录的;
每一个字符的存储,都是以其位于字符集中的序号来实现的,包括空格、换行符、标点等;
最早的字符集是ASCII,只包含包括大小写字母、阿拉伯数字、一些基本符号;
随着计算机在全球各国的普及,由于世界的语言众多,就诞生了各种适应不同语种的字符集;
专门适应中文的字符集有GBK、GB2312等,例如Windows操作系统中文版所使用的就是GBK字符集;
但无论何种字符集,都默认将ASCII完整包含在前128位当中;
防止由于不同主机中使用的字符集不同,导致了严重的数据传输乱码问题;
UTF-8字符集包含了世界各种不同语言中的常用字符,正逐渐成为某种意义上的、心照不宣的业界标准;
【什么是ASCII字符集】
美国标准信息交换码(American Standard Code for Information Interchange);
包括最基本的128个字符,是最早也最基本的字符集;
内容包括大小写字母、阿拉伯数字、以及一些常用符号;
序号和字符的互换可以使用chr(order)和ord(character)两个系统内建函数;

例:
char t;
t = 33;
cout << t <<endl;
执行结果:

例:
char t;
for(int i=32;i<=127;i++){
t = i;
cout << t << endl;
}
执行结果:

2) 字符与字符串
字符和字符串是不同的,字符中能是一个,而字符串是由若干个字符连接而成。例如:‘a’ 和"a".字符串在结尾处会默认加上一个看不见的结尾符’\0’.它也是个转义字符。所以字符串"a"实际上的两个字符:“a\0”,因此在声明若按字符串初始化时要注意空间是否足够
例:
char a[] = {"hello"};// 按字符串初始化
char b[] = {'h','e','l','l','o'};// 按字符初始化
char c[] = {'h','e','l','l','o','\n'};// 按字符串初始化
cout << "数组a的大小是:" << sizeof(a) << endl;
cout << "数组b的大小是:" << sizeof(b) << endl;
cout << "数组c的大小是:" << sizeof(c) << endl;
cout << a << endl;
cout << b << endl;
cout << c << endl;
执行结果:

二维数组的声明与初始化
1、什么是二维数组
二维数组与一维数组的关系就像是线与面的关系,一条线,数学上用一条数轴来表示,而一个平面,数学上则是用平面坐标系来表达。
数组中用下标来描述数组中的某个元素就像是描述一条线上的一点。如果使用两个下标,就能形成一个平面。像表格一样,有行和列,所有数据都能存在这些表格里。

通常把二维数组的两个下标分别称为行下标和列下标,在前面的是
行下标,在后面的是列下标。
用到二维数组一般有两种情况,一种是描述一个二维的事物,比如1表示墙,0表示通路。还有一种是描述多个具有多项属性的事物,比如有多个学生,每个学生有语、数、英的成绩,这些成绩就可以用于二维数组表示。
2、二维数组的声明与初始化
-
声明的结构
数据类型 数组名[行数][列数] -
声名二维数组
二维数组的初始化分两种,一种是顺序初始化,另一种是按行初始化。
例:
int a[3][2] = {4, 2, 5, 6}; //顺序初始化
int b[3][2] = {{4,2}, {5}, {6}}; //按行初始化
cout << "以下是数组a" << endl;
for (int i=0;i<3;i++){
for(int j=0;j<2;j++){
cout <<setw(2) << a[i][j];
}
cout << endl;
}
cout << "以下是数组b" << endl;
for (int k=0;k<3;k++){
for(int l=0;l<2;l++){
cout <<setw(2) << b[k][l];
}
cout << endl;
}
执行结果:

3) 可省略的第一维
一维数组的大小可以省略,可是二维数组的元素个数是行数和列数的乘积,如果只有元素个数,计算机是无法知道在第几行,第几列的位置的,因些C++有规定,在声明和初始化一个二维数组时,只有第一维(行数)可以省略。
例:
int array[2][3] = {1, 2, 3, 4, 5, 6};
//等同于
int array[][3] = {1, 2, 3, 4, 5, 6};
二维数组和一维数组的关系
1、二维数组可以转化为一维数组
有些时候用二维数组来描述某些事物非常方便 。例如用二维数组来画一个地图,那么使用行下标和列下标就如同平面直解坐标系一样。可是在某些情况下,不能使用二维数组,或者难以制造一个二维数据。由于二维数组在内存中的存储情况和一维数组是相同的,所以可以用一个一维数组来代替它

一个二维数组a[x][y]在一维数组b中的转化关系为:
a[x][y] = b[ x*列数 + y ]
向函数传递数组的方法
数组的空间很大,如果能够把它作为参数传递给函数,那么就能发挥很大的作用,例如,普通的参数只能比较两个或三个数的大小,如果能使用数组,便能比较一堆数中的最大的数,这大大提高了程序的效率。
例:
#include<iostream>
using namespace std;
int max(int a[],int size);
int main(){
int numb[] = {2,45,12,6,23,98,13,3};
int mb = sizeof(numb)/sizeof(int);
cout << "最大的数是:" << max(numb,mb)<<endl;
return 0;
}
int max(int a[],int size){
int max = 0;
for(int i=0;i<size;i++){
if(a[i]>max){
max = a[i];
}
}
return max;
}
执行结果:

第二节:函数
函数的概念
什么是函数
函数,是可以用来解决问题,得到想要的结果的工具。例如日常生活中,画表格需要用到尺子、吃饭需要筷子、开瓶子需要开瓶器等。工具是现成的,而且是可以重复使用的,有了工具直接用就能得到我们想要的结果。函数也是同样的道理。
源函数与调用函数
每个工具都有自己的使用说明书,函数也不例外,这份说明书就叫源函数,又可以称为函数的原形。
例:求最值函数
int max(int a,int b);
此函数的函数名为max,一听就知其意。运行该函数后会产生一个整数的结果。括号内表示需要填上两个整形参数,这两个参数规定了所填的类型、位置、序顺,因此使用时需要一一对应
例:使用(调用)最值函数
int r=3,s=5,t;
t = max(r,s);
cout << "较大的数是:" << t <<endl;
执行结果:

注:调用函数时放入括号内的变量名r和s与源函数里a、b的名字是可以不一们的,a和b只是一个代表,只是形式参数,不是实际参数。调用函数后的结果可以任意赋值
例: 输出函数
void output(char c);
函数名称:output(见名知意,输出的意思,方便记忆);
函数结果类形: void(即空类型,表示不会产生任何定量的结果)
函数参数个数:1个
参数的类型:char
常用的函数
前面的学习中,第一行往往是
#include xxxx头文件。其实在头文件中就有不少系统已经为你准备好的函数(工具),max()函数就是其中之一,它们叫做标准库函数。include一个头文件,就相当于指定使用某个工具箱。所以使用系统定义好的函数,就要知道这些函数在哪个头文件。
系统已经为我们准备了很多函数,只要通过文件头就能够调用它们。(可以通过C++工具书查或使用IDE)
标准C++文件头(部分)


例:使用标准库退出程序的方法
#include<iostream>
#include<cmath>
#include<cstdlib>
using namespace std;
int main(){
// 定义一个圆周率常量
const double PI = 3.141592654;
// 定义一个度数
double a = 90;
cout << "sin(a) = "<< sin(a/360*2*PI) << endl;
//调用退出程序的方法
exit(1) ;
cout << "能看到我吗?";
return 0;
}
执行结果:

函数的声明和定义方法
系统给了我们标准库函数,大大地方便了我们平时的操作,不必再一点一滴地写代码。然而,仅靠系统给出的标准库函数是不够用的,有时候要根据实际需求,自己做一个属于自己的函数。
1、函数的声明
告诉电脑我要创建一个新的函数,即
声明一个函数。其次,要告诉电脑如何运作,这是定义一个函数。函数产生的结果,叫函数的返回值。
函数的结构:
返回值类型 函数名(参数1,参数2);
2、函数的定义
不解释,一图说完函数头与函数体

3、函数的返回值
返回值和运行结果是两种概念。返回值是函数反馈给调用函数处的信息,运行结果是程序通过屏幕反馈给用户的信息。
return xxx称为返回语句,retrun 是语句的关键字。
例:真假悟空
#include<iostream>
using namespace std;
string monkey(); //声明函数
int main(){
string t;
t = monkey();
cout << t <<"才是真的悟空!" <<endl;
return 0;
}
string monkey(){
cout << "有筋斗云的猴子" <<endl;
return "有金箍棒的猴子";
}
运行结果:

主函数
主函数是一个特殊的函数,不管把它放在代码的什么位置 ,程序的运行都是从主函数开始的。所以,每个程序有且只能有一个主函数,否则计算机将不知道从何处开始运行。因为主函数只有一个,因此就没必要声明主函数的存在了。
主函数也有返回值,就是0,一般地返回这个值是告诉系统运行了该程序,并且正常结束。一般地返回其他值则表示程序异常,只要类型正确,不影响运行。
【小提示】
C++有不同版本的编译器,像Visual C++ 、Borland C++、GCC 等,美国国家标准机构和国际化标准组织规定C++语法和编译器无关,并制定相关标准,目前最高标准是ISO/IEC 144882:2014 ,简称C++14
主函数除了可以使用int main外,还可以使用argc,char*argv[]等,有兴趣可参考相关书籍
注意:在同一个函数里,不能有相同的变量或参数,否则将导致报错,而在两个不同的函数中,可以有相同的变量或参数
例:
#include<iostream>
using namespace std;
int func1(int a,int b);
int func2(int a,int b);
int func3(int a,int b);
int main(){
int x=3,y=4,res1,res2,res3;
res1 = func1(x,y);
res2 = func2(x,y);
res3 = func3(x,y);
cout << res1 <<endl;
cout << res2 <<endl;
cout << res3 <<endl;
return 0;
}
int func1(int a,int b){
return (a+b);
}
int func2(int a,int b){
return (a-b);
}
int func3(int a,int b){
return 666;
}
执行结果:

2515

被折叠的 条评论
为什么被折叠?



