数组(array)定义:

// 定义了变量名为a,长度为5

  1. int a[5];
  2. a[0] = 1;
  3. a[1] = 2;
  4. ……
  5. a[4] = 5;

数组的定义与操作

  1. #include <iostream>
  2. using namespace std;
  3. int main() {
  4. int a[5];
  5. // a[0] = 1;
  6. // a[1] = 2;
  7. // a[2] = 3;
  8. // a[3] = 4;
  9. // a[4] = 5;
  10. // 在c语言中,& 符表示 :取地址; * 符表示:取值
  11. cout << "数组a的值??: " << *a << endl;
  12. cout << "数组a的地址: " << a << endl;
  13. // cout a 表示输出数组a所在内存地址,其值为数组第一项的值
  14. // cout *a 表示输出当前地址(数组a的地址)所存储的值。
  15. cout << "数组a0的地址:" << &a[0] << endl;
  16. cout << "数组a1的地址:" << &a[1] << endl;
  17. cout << "数组a2的地址:" << &a[2] << endl;
  18. // 声明时初始化
  19. int b = 0;
  20. int c[5] = {1, 2, 3, 4, 5};
  21. cout << "数组c的内容:" << c[0] << c[1] << c[2] << c[3] << c[4] << endl;
  22. for(int i =0;i < 5 ; i++){
  23. cout << c[i];
  24. }
  25. cout << endl << "---------" << endl;
  26. // 只初始一部分内容
  27. int d[9] = {1,2,3,4,5};
  28. for(int i = 0 ; i < 9 ; i++){
  29. cout << d[i] ;
  30. }
  31. cout << endl << "---------" << endl;
  32. char s[7] = {'a','b','c','d','e','f'};
  33. cout << s << endl;
  34. }

数组元素查找

例子 给出 n 个(不超过 100 个)正整数,请输出 x 第一次出现的位置。

数组 - 图1

  1. #include <iostream>
  2. using namespace std;
  3. int main() {
  4. int n ;
  5. cin >> n;
  6. int a[101] ;
  7. // int a[100] = {12, 23, 44, 8, 36, 3, 1};
  8. for(int i = 1;i <= n;i++){
  9. cin >> a[i];
  10. }
  11. int x;
  12. cin >> x;
  13. for (int i = 1; i <= n; i++) {
  14. if (a[i] == x) {
  15. cout << i ;
  16. break;
  17. }
  18. }
  19. // for(int i = 0; i < n ; i++){
  20. // // 开始计数
  21. // int cnt = 0;
  22. // for(int j = 0 ; j < i -1; j ++){
  23. // if(a[j] < a[i]){
  24. // cnt ++;
  25. // }
  26. // }
  27. // cout << cnt << " ";
  28. // }
  29. }

小鱼比可爱 (p1428)

数组 - 图2

题意理解与转换:

有n个同学,不超过100个站成一排,大家都向前,每个同学身高为整数。 请计算,每位同学前面有几个同学比自己矮。

  1. #include <iostream>
  2. using namespace std;
  3. int main(){
  4. int a[101],n;
  5. cin >> n;
  6. // 存储小鱼的可爱值
  7. for(int i = 0; i < n; i++){
  8. cin >> a[i];
  9. }
  10. for(int i = 0; i < n ; i++){
  11. int cnt = 0;
  12. for(int j = i -1; j > 0; j--){
  13. if(a[j] < a [i]){
  14. cnt ++;
  15. }
  16. }
  17. cout << cnt << " ";
  18. }
  19. // for(int i = 0; i < n ; i++){
  20. // // 开始计数
  21. // int cnt = 0;
  22. // for(int j = 0 ; j < i -1; j ++){
  23. // if(a[j] < a[i]){
  24. // cnt ++;
  25. // }
  26. // }
  27. // cout << cnt << " ";
  28. // }
  29. }

小鱼的数字游戏

数组 - 图3

自己维护计数器N,统计cin录入个数。

  1. #include <iostream>
  2. using namespace std;
  3. int main(){
  4. int a[110] ;
  5. int tmp,n =0;
  6. do{
  7. cin >> tmp;
  8. a[n++] = tmp;
  9. }while(tmp != 0);
  10. for(int i = n-1; i >= 1;i--){
  11. cout << a[i] << " ";
  12. }
  13. }

方法二:

  1. #include <iostream>
  2. using namespace std;
  3. int main(){
  4. int a[110] ={0};
  5. int tmp,n =0;
  6. do{
  7. cin >> tmp;
  8. a[n++] = tmp;
  9. }while(tmp != 0);
  10. while(n--){
  11. cout << a[n] << " ";
  12. }
  13. }

数组 - 图4

  1. #include <iostream>
  2. using namespace std;
  3. int main() {
  4. int n, a[200]={0};
  5. int i = 1;
  6. cin >> n;
  7. a[0] = n;
  8. while (n != 1) {
  9. if (n % 2 == 0) {
  10. n = n / 2;
  11. } else {
  12. n = 3 * n + 1;
  13. }
  14. a[i++] = n;
  15. // cout << n << " ";
  16. }
  17. while (i--) {
  18. cout << a[i] << " ";
  19. }
  20. }

数组长度:

可以使用函数sizeof()来得到数组对应的长度。

使用memset()来进行数组统一初始化,这比用for循环要更简洁。

  1. #include <cstring>
  2. int a[10000] = {0} ; // 推荐,初始化时初始化
  3. memset(a,0,sizeof(a));
  4. for(int i = 0; i < sizeof(a); i++){
  5. a[i] = 0;
  6. }

数组如果不初始化就可能存有其他数值,因此我们在使用前必须 初始化,可以使用 for 循环依次赋初值,也可以在定义时直接初 始化。

校门外的树

数组 - 图5

数组 - 图6

  1. #include <iostream>
  2. using namespace std;
  3. int main() {
  4. // int num[30]={[0 ... 29]=99};
  5. int l ,g, tree[10005]={0};
  6. // l 表示路线长度, g 表示 区间段数
  7. cin >> l >> g;
  8. for(int i = 0; i < g ; i ++){
  9. int m,n;
  10. cin >> m >> n;
  11. // cout << "区间:" << i + 1 << "从" << m << "到" << n << endl;
  12. for(int j = m;j <=n ; j++){
  13. tree[j] = 1;
  14. }
  15. }
  16. // 输入数组内元素值为1的个数
  17. int cnt = 0;
  18. for(int k=0;k <= l; k++){
  19. //cout << tree[k] << endl;
  20. if(tree[k] ==0){cnt ++;}
  21. }
  22. cout << cnt;
  23. }