工程师编程,C语言学习,关于数组的一些问题

硕士阶段开始了专业课学习,也就是工程师编程,涉及到的编程语言有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);
}

最终结果:

总结:数组其实并不难,关键是弄清楚数组的用法,才能事半功倍,有效果的做题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值