C++笔记--数组、函数、预处理
数组
1.1 一维数值数组的概述
用一段连续空间存放相同类型的变量这样的容器(结构)叫数组。
数组的下标是从0开始。
假设数组有n个元素:
下标范围:0~n-1
元素范围:arr[0]~arr[n-1]
1.2 一维数值数组的定义
定义数组的步骤:
①数组名和[]表示数组
②将数组的个数放入[]里面
③用元素的类型定义—个变量
④从上往下替换。
案例1:定义一个数组有5个元素每个元素为int
int arr[5];
案例2:定义一个数组 有五个元素 每个元素为int*
int *arr[5];
案例3:定义一个数组 有5个元素 每个元素为数组,该数组有10个元素每个元素为int
int arr[5][10];
案例4:定义一个数组 有5个元素 每个元素为函数的入口地址,该函数有两个int型形参,int返回值类型
int (*arr[5])(int,int);
数值数组:必须逐元素访问
int arr[5]; int n = sizeof(arr)/sizeof(arr[0]); int i=0; for(i=0;i<n;i++) { cout<<arr[i]<<" "; } cout<<endl;

数组未初始化,值是随机的。
1.3 一维数组的初始化
1.3.1 全部元素 初始化
int arr[5] = {10,20,30,40,50}
int arr[ ] = {10,20,30,40,50}
注意:如果数组的全部元素都初始化可以省略[]的数值,
如果省略[]里面数值 数组的元素个数就由初始化的元素个数确定
1.3.2 部分元素 初始化
未被初始化的部分 自动补0
int arr[5] = {10,20,30}; //10 20 30 0 0
1.3.3 建议将数组所有元素初始化为0
int arr[5] = {0};
//将第0个元素初始化为0 其他未被初始化自动补0
1.3.4 指定下标初始化
int arr[5] = {[2]=10,[4]=30}; //0 0 10 0 30
//新版本可能会报错
1.4 一维数值数组的元素操作
1、元素的操作 对元素的读或写 必须逐个元素操作,对数组每个变量的操作等价于对元素的操作
int arr[5] = {0}; int n = sizeof(arr)/sizeof(arr[0]); //数组取值、数组赋值、变量给数组赋值、数组++ cout<<arr[2]<<endl; arr[2] = 10 ; arr[3]= arr[2]; arr[3]++; //arr[3] = arr[3] +1 int i=0; for(i=0;i<n;i++) { cout<<arr[i]<<" "; } cout<<endl;
2、键盘给数组元素获取输入
//键盘给数组元素获取输入 int i = 0; int arr[5] = {0}; int n = sizeof(arr)/sizeof(arr[0]); cout<<"请输入"<<n<<"个数组元素的值,用空格隔开:"; for(i=0;i<n;i++) { cin>>arr[i]; } for(i=0;i<n;i++) { cout<<arr[i]<<" "; } cout<<endl; }
案例5:键盘输入10个int数 求这10个数的最大值和最小值
//键盘输入10个int数 求这10个数的最大值和最小值 int arr[10] = {0}; int n= sizeof(arr)/sizeof(arr[0]); int i = 0; cout<<"请输入10个int整数:"; for(i=0;i<n;i++) { cin>>arr[i]; } //求最大值和最小值 int min = arr[0]; int max = arr[0]; for(i=1;i<n;i++) { max = max>arr[i]? max:arr[i]; min = min<arr[i]? min:arr[i]; } cout<<max<<" "<<min<<endl; }
2.1二维数组的概述
二维数组:数组的数组
二维数组的总大小 == 行数*列数*每个元素的大小
数组的总大小 == sizeof(arr)
行数:sizeof(arr)/sizeof(arr[0])
列数:sizeof(arr[0])/sizeof(arr[0][0])
2.2二维数值数组的初始化
1 分段初始化
//完全初始化 int arr[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; //完全初始化 只能省略行数 int arr[][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; //部分初始化 int arr[3][4]={{1,2},{5,6},{9,10,11}};
2 连续初始化
/完全初始化 int arr[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12}; //如果完全初始化 只能省略行数 int arr[][4] = {1,2,3,4,5,6,7,8,9,10,11,12}; //部分初始化 int arr[3][4] = {1,2,5,6,9,10,11};
2.2 二维数值数组的元素操作
1 二维数值数组 获取键盘输入
//二维数值数组 获取键盘输入 int arr[3][4] ={0}; int row = sizeof(arr)/sizeof(arr[0]); int col = sizeof(arr[0])/sizeof(arr[0][0]); int i=0,j=0; for(i=0;i<row;i++) { for(j=0;j<col;j++) { cin>>arr[i][j]; } } cout<<"---------"<<endl; for(i=0;i<row;i++) { for(j=0;j<col;j++) { cout<<arr[i][j]<<" "; } cout<<endl; } }
2 求每人的平均成绩
int arr[5][4] = {56,75,78,89,89,98,76,67,88,99,77,66,67,78,89,90,98,97,96,95}; //int arr[5][4] = {{56,75,78,89},{89,98,76,67},{88,99,77,66},{67,78,89,90},{98,97,96,95}}; int row = 5; int col = 4; int i=0; float scoreAvg[5]={0}; for(i=0;i<row;i++) { int j=0; float sum = 0; for(j=0;j<col;j++) { sum+=arr[i][j]; } scoreAvg[i]=sum/col; } for(i=0;i<row;i++) { cout<<scoreAvg[i]<<" "; }
3.1 一维字符数组初始化
1 逐个元素初始化(不推荐)
char arr[5] = {'h','e','l','l','o'};
2 以字符串的方式初始化一维字符数组(推荐)
''''描述的是字符串,比如字符串"hello",编译器会自动在字符串的末尾添加\0'字符作为字符串的结束标记
char arr[6] = ”hello “;
3 以上两种初始化的区别:第二种末尾自动添加'\0'。
3.2 字符数组遍历
使用循环方式逐个遍历(逐个元素操作)
char arr[6] ="hello"; int i=0; for(i=0;i<6;i++) { cout<<arr[i]; }
使用cout直接输出字符串,需要字符数组的数组名,遇到‘\0’才结束。(遍历字符串)
char arr1[]="hello"; cout<<arr1; //hello
3.3 键盘获取字符串
获取一个字符串 求该字符串的长度(不使用strlen)
//获取字符串长度
char str[32]=""; cout<<"请输入一个字符串:"; cin.getline(str,sizeof(str)); int i = 0; while(str[i] != '\0') i++; cout<<str<<"的长度:"<<i<<endl;
4.1二维数组遍历
char str[128]= "hello";
char arr[5][128] = {"hello","world","xixi","haha","lala"}; int row = sizeof(arr)/sizeof(arr[0]); int i; for(i=0;i<row;i++) { cout<<arr[i]<<" "; } cout<<arr[0][1]<<endl;
4.2 二维数组获取键盘输入(获取多个字符串)
char arr[5][32] = {""}; int row = sizeof(arr)/sizeof(arr[0]); int i = 0; for(i=0;i<row;i++) { cin>>arr[i]; } for(i=0;i<row;i++) { cout<<arr[i]<<endl; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?