数组(array)定义:
// 定义了变量名为a,长度为5
int a[5];
a[0] = 1;
a[1] = 2;
……
a[4] = 5;
数组的定义与操作
#include <iostream>
using namespace std;
int main() {
int a[5];
// a[0] = 1;
// a[1] = 2;
// a[2] = 3;
// a[3] = 4;
// a[4] = 5;
// 在c语言中,& 符表示 :取地址; * 符表示:取值
cout << "数组a的值??: " << *a << endl;
cout << "数组a的地址: " << a << endl;
// cout a 表示输出数组a所在内存地址,其值为数组第一项的值
// cout *a 表示输出当前地址(数组a的地址)所存储的值。
cout << "数组a0的地址:" << &a[0] << endl;
cout << "数组a1的地址:" << &a[1] << endl;
cout << "数组a2的地址:" << &a[2] << endl;
// 声明时初始化
int b = 0;
int c[5] = {1, 2, 3, 4, 5};
cout << "数组c的内容:" << c[0] << c[1] << c[2] << c[3] << c[4] << endl;
for(int i =0;i < 5 ; i++){
cout << c[i];
}
cout << endl << "---------" << endl;
// 只初始一部分内容
int d[9] = {1,2,3,4,5};
for(int i = 0 ; i < 9 ; i++){
cout << d[i] ;
}
cout << endl << "---------" << endl;
char s[7] = {'a','b','c','d','e','f'};
cout << s << endl;
}
数组元素查找
例子 给出 n 个(不超过 100 个)正整数,请输出 x 第一次出现的位置。
#include <iostream>
using namespace std;
int main() {
int n ;
cin >> n;
int a[101] ;
// int a[100] = {12, 23, 44, 8, 36, 3, 1};
for(int i = 1;i <= n;i++){
cin >> a[i];
}
int x;
cin >> x;
for (int i = 1; i <= n; i++) {
if (a[i] == x) {
cout << i ;
break;
}
}
// for(int i = 0; i < n ; i++){
// // 开始计数
// int cnt = 0;
// for(int j = 0 ; j < i -1; j ++){
// if(a[j] < a[i]){
// cnt ++;
// }
// }
// cout << cnt << " ";
// }
}
小鱼比可爱 (p1428)
题意理解与转换:
有n个同学,不超过100个站成一排,大家都向前,每个同学身高为整数。 请计算,每位同学前面有几个同学比自己矮。
#include <iostream>
using namespace std;
int main(){
int a[101],n;
cin >> n;
// 存储小鱼的可爱值
for(int i = 0; i < n; i++){
cin >> a[i];
}
for(int i = 0; i < n ; i++){
int cnt = 0;
for(int j = i -1; j > 0; j--){
if(a[j] < a [i]){
cnt ++;
}
}
cout << cnt << " ";
}
// for(int i = 0; i < n ; i++){
// // 开始计数
// int cnt = 0;
// for(int j = 0 ; j < i -1; j ++){
// if(a[j] < a[i]){
// cnt ++;
// }
// }
// cout << cnt << " ";
// }
}
小鱼的数字游戏
自己维护计数器N,统计cin录入个数。
#include <iostream>
using namespace std;
int main(){
int a[110] ;
int tmp,n =0;
do{
cin >> tmp;
a[n++] = tmp;
}while(tmp != 0);
for(int i = n-1; i >= 1;i--){
cout << a[i] << " ";
}
}
方法二:
#include <iostream>
using namespace std;
int main(){
int a[110] ={0};
int tmp,n =0;
do{
cin >> tmp;
a[n++] = tmp;
}while(tmp != 0);
while(n--){
cout << a[n] << " ";
}
}
#include <iostream>
using namespace std;
int main() {
int n, a[200]={0};
int i = 1;
cin >> n;
a[0] = n;
while (n != 1) {
if (n % 2 == 0) {
n = n / 2;
} else {
n = 3 * n + 1;
}
a[i++] = n;
// cout << n << " ";
}
while (i--) {
cout << a[i] << " ";
}
}
数组长度:
可以使用函数sizeof()
来得到数组对应的长度。
使用memset()
来进行数组统一初始化,这比用for循环要更简洁。
#include <cstring>
int a[10000] = {0} ; // 推荐,初始化时初始化
memset(a,0,sizeof(a));
for(int i = 0; i < sizeof(a); i++){
a[i] = 0;
}
数组如果不初始化就可能存有其他数值,因此我们在使用前必须 初始化,可以使用 for 循环依次赋初值,也可以在定义时直接初 始化。
校门外的树
#include <iostream>
using namespace std;
int main() {
// int num[30]={[0 ... 29]=99};
int l ,g, tree[10005]={0};
// l 表示路线长度, g 表示 区间段数
cin >> l >> g;
for(int i = 0; i < g ; i ++){
int m,n;
cin >> m >> n;
// cout << "区间:" << i + 1 << "从" << m << "到" << n << endl;
for(int j = m;j <=n ; j++){
tree[j] = 1;
}
}
// 输入数组内元素值为1的个数
int cnt = 0;
for(int k=0;k <= l; k++){
//cout << tree[k] << endl;
if(tree[k] ==0){cnt ++;}
}
cout << cnt;
}