硕士阶段开始了专业课学习,也就是工程师编程,涉及到的编程语言有C、C++和嵌入式编程语言。
当然,再从基础开始打起,那就是从C开始了。
这次的问题就是谈到数组(Array)了。
在谈及这个问题时,我会从三个方面来思考:
1、数组的定义是什么,也就是何为数组?
2、如何在数组中填充元素(数据)?
3、如何用数组来解决实际问题,缩短和简化程序?
抱着这三个疑问我去查找了相关知识。
首先针对第一个问题:数组的定义是什么,何为数组?
这其实很简单,数组就是用来存储一个固定大小的相同类型元素的顺序集合,关键点在于:存储、固定大小、相同类型元素、集合。
比方说,在C语言中这样定义一个数组,其中2代表整个数组中存在2个元素,后面的{0,1}代表这两个元素分别为0和1。
int array[2] = {0,1};
其次,针对第二个问题:如何在数组中填充元素(数据)?
要在数组中填充元素,那首先必须把整个数组给遍历一遍,这里要用到的知识点就是循环。
给定一个数组,如何把整个数组遍历,最有效的方法就是用一个for循环。
#include<stdio.h>
int main(){
int array[10] = {0};
for(int i = 0;i < 10;i++){
array[i] = i;
printf("%d ",array[i]);
}
}
正如这串代码所示,for循环正好能用来遍历一整个数组,最后给出相应的结果。
最后,我们再来谈谈第三个问题:如何用数组来解决实际问题,缩短和简化程序?
谈到这个问题,我就得给出具体实例了,当然,我会给出两个实例。
第一个是斐波那契数列的实现,之所以选择这个,一方面是因为这个数列大家比较熟悉,另一方面,用数组来实现斐波那契数列的难度也比较简单。
斐波那契数列:1,1,2,3,5,8,13,21,35
不难发现,斐波那契数列的规律是前一个数加后一个数等于第三个数。
那么,用数组来表示的话,就可以得到array[i+2] = array[i] + array[i+1]。
这里的i指的就是前一个数,i+1指的就是后一个数,而i+2指的就是第三个数。
再结合之前所讲,也就能直接给出斐波那契数列的程序代码:
#include <stdio.h>
int main(){
int array[20] = {1,1,0};
for(int i = 0; i<20; i++){
array[i+2] = array[i+1] + array[i];
printf("%d ",array[i]);
}
}
结果如图所示:经过验算,该程序最终结果是正确的。
那么,这只是数组在实现数学公式方面的应用,除了这个方面,还有其它方面也能应用到此程序。
题目给定:给你五个集合,每个集合中各有16个数据,每个集合依次出现,你心中想一个数据,在每个集合出现时,输入1(代表这个数据存在该集合中),输入0(代表这个数据不存在该集合中),五个集合结束后,最终输出的结果将会成为你猜的数据。
针对这道题,看起来很麻烦,但其实并不难,我们先对题目进行一个分析。
1、五个集合,每个集合各有16个数据,那么我们所要做的,就是要定义5个数组,每个数组中各有16个数据,根据解决的第一个问题,不难得到:
2、要进行猜测,必须要把这五个数组中的内容显示在控制台中,才能判断自己心中所想的数据是否存在这五个数组中,显然,这需要一个for循环,同时,还要进行判断猜测的数据是否存在其中,用1或0来显示,这里就需要scanf用来输入1或0,还需要一个if条件语句进行判断。
剩下的,无非只需要多加几个for循环即可把最终答案给出来。
#include <stdio.h>
int main() {
int x;
int number,number1,number2,number3,number4;
int set1[16] = {1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31};
int set2[16] = {2,3,6,7,10,11,14,15,18,19,22,23,28,29,30,31};
int set3[16] = {4,5,6,7,12,13,14,15,20,21,22,23,28,29,30,31};
int set4[16] = {8,9,10,11,12,13,14,15,24,25,26,27,28,29,30,31};
int set5[16] = {16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31};
for(int i = 0; i < 16; i++){
printf("%d ",set1[i]);
}
printf("\n你想的数字是否存在: ");
scanf("%d",&x);
if(x == 1){
number = set1[0];
}
if(x == 0){
number = 0;
}
for(int i = 0; i < 16; i++){
printf("%d ",set2[i]);
}
printf("\n你想的数字是否存在: ");
scanf("%d",&x);
if(x == 1){
number1 = set2[0];
}
if(x == 0){
number1 = 0;
}
for(int i = 0; i < 16; i++){
printf("%d ",set3[i]);
}
printf("\n你想的数字是否存在: ");
scanf("%d",&x);
if(x == 1){
number2 = set3[0];
}
if(x == 0){
number2 = 0;
}
for(int i = 0; i < 16; i++){
printf("%d ",set4[i]);
}
printf("\n你想的数字是否存在: ");
scanf("%d",&x);
if(x == 1){
number3 = set4[0];
}
if(x == 0){
number3 = 0;
}
for(int i = 0; i < 16; i++){
printf("%d ",set5[i]);
}
printf("\n你想的数字是否存在: ");
scanf("%d",&x);
if(x == 1){
number4 = set5[0];
}
if(x == 0){
number4 = 0;
}
int sum = number + number1 + number2 + number3 + number4;
printf("你猜的数字是: %d ",sum);
}
最终结果:
总结:数组其实并不难,关键是弄清楚数组的用法,才能事半功倍,有效果的做题。