1. 学习内容

1.1 参考
  1. 《程序设计基础》6.1.1 一维数组的定义、 6.1.2 数组初始化
1.2 数组初始化

数组可以通过一串值进行初始化,而不用显式指定数组大小。例如:

int v1[] = {1, 2, 3, 4};
char v2[] = {'a', 'b', 0};

上面v1的类型为int[4],v2的类型为char[3]。

当提供的初始化元素少于指定的数组大小时,编译器会自动补充0。例如:

int v5[8] = {1, 2, 3, 4};  
//相当于
int v5[] = {1, 2, 3, 4, 0, 0, 0, 0};
1.3 数组的访问
#include <iostream> //C++方式
#include <stdio.h>  //C的输入输出
using namespace std;

int main() {
  //初始化时指定初始值
  int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

  // 通过下标赋值
  arr[3] = 11;

  //通过指针访问
  int *p = arr;
  p += 4;
  cin >> *p; //输入20

  // C写法,arr是一个地址,可以直接增加
  scanf("%d", arr + 8); //输入28

  for (int i = 0; i < 10; ++i) {
    if (i > 0)
      cout << ",";

    cout << arr[i];
  }
  cout << endl;
  //输出:1,2,3,11,20,6,7,8,28,10
}

2. 代码示例

3. 作业

1、

【NOIP 2018 普及组初赛 q21】阅读程序写结果:

#include <stdio.h>
int n, d[100];
bool v[100];

int main() {
    scanf("%d", &n);
    for (int i = 0; i < n; ++i) {
        scanf("%d", d + i);
        v[i] = false;
    }
    int cnt = 0;
    for (int i = 0; i < n; ++i) {
        if (!v[i]) {
        	for (int j = i; !v[j]; j = d[j]) {
        		v[j] = true;
        	}
        	++cnt;
        }
    }
    printf("%d\n", cnt);
    return 0;
}

输入:10 7 1 4 3 2 5 9 8 0 6

4. for语句的格式和执行过程

graph TD exp1(求解表达式1) --> exp2{测试表达式2}; exp2 -->|真| stmt(执行循环体语句); exp2 ---->|假| stmt_next(执行for的下一条语句); stmt --> exp3(求解表达式3) --> exp2;