30天学会C语言: Day 9-Arrrrrrrrrrrrray~~

目前的内容中,一个变数在同一个时间只能储存一个资料,如果有多笔资料就需要有多个变数
如果要计算三个数的总和,必须要宣告三个变数来储存输入的数值

#include<stdio.h>
#include<stdlib.h>

int main(){
	int x, y, z;
	scanf("%d%d%d", &x, &y, &z);
	printf("%d\n", x+y+z);
	
	return 0;
}

但如果今天要输入几十个、甚至是几百个、几千个数值该怎麽办?难道真的要帮这一千个数想一千个名字?

而且程序中变数的数量是固定的,在这编写程序码时就决定了,但在现实生活中,输入数值的数量常常不是固定的,今天可能有一百笔资料,明天有一万笔,後天却只有十来笔

阵列(Array)

以上的问题都可以用阵列解决,阵列是一种可以用一个变数储存多个同型别资料的资料类型,可以想成是数列或是表格的概念

阵列中的一笔资料称为一个元/元素(Element)

使用阵列

宣告阵列的语法是

<型别> <名称>[<阵列大小>]

阵列大小(长度)表示这个阵列可以储存几个数值

宣告一个大小为5的一维整数阵列

#include<stdio.h>
#include<stdlib.h>

int main(){
	int arr[5];

	return 0;
}

阵列中元的性质和一般的变数相同,以 <变数名>[<索引>] 表示

  • 索引(Index)
    表示顺序或编号的数值,在程序设计中通常从 0 开始

指派阵列中第一个元的数值,并显示到萤幕上

#include<stdio.h>
#include<stdlib.h>

int main(){
	int arr[5];
	arr[0]=10;
	printf("%d\n", arr[0]);

	return 0;
}

这个阵列的长度是5,但索引只到4(因为从0开始,所以第五个元的索引是4)

#include<stdio.h>
#include<stdlib.h>

int main(){
	int arr[5];
	arr[0]=10;
	arr[1]=10;
	arr[2]=20;
	arr[3]=20;
	arr[4]=30;
	printf("%d %d %d %d %d\n", arr[0], arr[1], arr[2], arr[3], arr[4]);

	return 0;
}

透过键盘输入值

#include<stdio.h>
#include<stdlib.h>

int main(){
	int arr[5];
	scanf("%d%d", &arr[0], &arr[1]);
	printf("%d %d\n", arr[0], arr[1]);

	return 0;
}

阵列初始化

{} 可以在 宣告的时候 指派阵列中的多个值,值的数量不能超过阵列的大小

#include<stdio.h>
#include<stdlib.h>

int main(){
	int arr[10]={10, 10, 20, 20, 30};
	printf("%d %d %d %d %d\n", arr[0], arr[1], arr[2], arr[3], arr[4]);
	return 0;
}

索引可以用变数表示

#include<stdio.h>
#include<stdlib.h>

int main(){
	int arr[5]={10, 10, 20, 20, 30};
	int i;
	scanf("%d", &i);
	printf("%d\n", arr[i]);
	return 0;
}

结合回圈,可以快速地设定、使用阵列的内容

#include<stdio.h>
#include<stdlib.h>

int main(){
	int arr[100], n;
	scanf("%d", &n)
	for(int i=0; i!=n; i++)
		arr[i]=i;
	for(int i=0; i!=n; i++)
		printf("%d ", arr[i]);

	return 0;
}

版本较旧的C语言在宣告阵列时阵列大小不能用变数表示,所以常会先宣告一个较大的阵列

下面例子中的 n 表示数字的数量,第一个回圈会执行 nsacnf(),所以可以输入 n 个数值
第二个回圈中的 if() 会在 i 不为0时才显示+,因为 i 为0时视窗上还没有数字,所以不需要显示+

#include<stdio.h>
#include<stdlib.h>

int main(){
	int arr[1000], n;
	scanf("%d", &n);
	
	int sum=0;
	for(int i=0;i<n;i++){
		scanf("%d", &arr[i]);
		sum+=arr[i];
		i++;
	}
	
	for(int i=0;i<n;i++){
		if(i!=0)
			printf("+");
		printf("%d", arr[i]);
		i++;
	}
	printf("=%d\n", sum);
	
	return 0;
}

补充

新版本的阵列

较新版本的C语言在宣告阵列时,可以用变数当作阵列长度

#include<stdio.h>
#include<stdlib.h>

int main(){
	int n;
	scanf("%d", &n);
	
	int arr[n], i=0, sum=0;
	while(i!=n){
		scanf("%d", &arr[i]);
		sum+=arr[i];
		i++;
	}
	i=0;
	while(i!=n){
		if(i!=0)
			printf("+");
		printf("%d", arr[i]);
		i++;
	}
	printf("=%d\n", sum);
	

	return 0;
}

初始化阵列时,如果省略阵列长度,会自动将阵列长度设为述职的数量

下面例子中,arr 的长度是3

#include<stdio.h>
#include<stdlib.h>

int main(){
	int arr[]={1, 2, 3};
	return 0;
}

如果要让阵列全部为0,可以指派 {0}

#include<stdio.h>
#include<stdlib.h>

int main(){
	int arr[10]={0};
	for(int i=0; i!=10;i++)
		printf("%d ", arr[i]);

	return 0;
}


挖坑清单:

  • main() 前面的 int,和最後一行的 return 0;
  • 可以拆成多行的情况
  • \0 在字串、字元中的意思
  • 指标

<<:  #25 JS: HTML DOM Events - Part 3(Start Over Version)

>>:  Day 11 用 Context 来组织你的测试区块

【必收藏系列】查找并清理 Mac 上重复的档案/图片

日常我们在使用 Mac 机时,总是很容易重复下载一些档案或图片,例如 复制整理档案或移动档案时,很容...

# Day31 Golang Protobuf 介绍与使用

Day31 Golang Protobuf 介绍与使用 Protobuf 介绍 Protobuf 是...

Vue.js 从零开始:箭头函式

上篇説到传统函式This指向基本原则:呼叫时前面的物件是谁,和怎麽定义无关,但箭头函式的This指向...

IT 铁人赛 k8s 入门30天 -- day11 Helm - Package Manager

前言 今天要来讲说 Helm 这个工具 因为 Helm 版本会不断推陈出新, 因此在今天的内容着重再...

[Python学习笔记] 文件I/O-Day2

读取键盘输入 input函数 读取和写入标准输入和输出 开启的txt档案会写入 程序中的"...