第六章 利用数组处理批量数据

简介: 第六章 利用数组处理批量数据

数组是一组有序数据的集合。用一个数组名和下标确定数组中的元素。数组中的每一个元素都属于同一个数据类型

例:对10个数组元素依次赋值为0,1,2,3,4,5,6,7,8,9.要求按逆序输出

#include<stdio.h>
int main(){
    int i,a[10];
    for(i=0;i<=9;i++)
    a[i]=i;
    for(i=9;i>=0;i--)
    printf("%d\n",a[i]);
    printf("\n");
    return 0;
}

例:用数组处理Fibonacci数列问题

#include<stdio.h>
int main(){
    int i;
    int f[20]={1,1};
    for(i=2;i<20;i++)
    f[i]=f[i-2]+f[i-1];
    for(i=0;i<20;i++){
        if(i%5==0)printf("\n");
        printf("%12d",f[i]);    
    }
    printf("\n");
    return 0;
}

6.2.1 怎样定义二维数组

二维数组表示形式为:数组名[下标][下标]

例:输出一个已知的字符串

#include<stdio.h>
int main(){
    char c[15]={'I','','a','m','','a','','s','t','u','d','e','n','t','.'};
    int i;
    for(i=0;i<15;i++)
    printf("%c",c[i]);
    printf("\n");
    return 0;
}

例:输出一个菱形图

#include<stdio.h>
int main(){
    char lingxing[][5]={{'','','*},{'','*','','*'},{'*','','','','*'},{'','*','','*'},{'','','*}};
    int i,j;
    for(i=0;i<5;i++)
        for(j=0;j<5;j++)
        printf("%c",lingxing[i][j]);
        printf("\n");
}
return 0;

字符串:

puts函数:输出字符串的函数,一般形式为:puts,作用是将一个字符串输出到终端。

gets函数:输入字符串的函数,一般形式为:gets,作用是输入一个字符串到字符数组。

strcpy:strcpy(字符数组1,字符串2),作用是将字符串2复制到字符数组1中去。

strcmp函数:字符串比较函数,一般形式为:strcmp(字符串1,字符串2),作用是比较字符串1和字符串2。

strlen函数:测字符串长度的函数,一般形式为:strlen(字符数组),函数的值为字符串中的实际长度。

(%A)具体格式如下:

%d

有符号十进制整数

%i

有符号十进制整数

%o

无符号八进制整数

%u

无符号十进制整数

%x

无符号十六进制数字

%X

无符号十六进制数字

%c

单个字符

%s

字符串

数组的赋值:

数组a[n]只赋值a[0]-a[n-1]项,a[n]系统不会填补为零

#include<stdio.h>
int main(){
    int a[2]={1,2};
    for(int i=0;i<2;i++){
        a[i]=i;    
    }
    printf("%d\n%d\n",a[0],a[1]);
    return 0;
}

指针变量的使用:

//声明一个指针变量,指向变量a的地址

int *pa;

//通过取地址符&,获取a的地址,赋值给指针变量

//通过间接寻址符,获取指针指向的内容

printf("%d",*pa)

多维数组的地址:

int num[2][2]={
    {1,2},{2,3}
}

多维数组的指针:

int num[5]={2,3,4,5,6};
int *p=nums;

函数参数为指针:

void swap(int *x,int *y);
void main(){
    int x=20,y=20;
    swap(&x,&y);
    printf("x=%d,y=%d",x,y);
}
void swap(int *x,in *y){
    int t;
    t=*x;
    *x=*y;
    *y=t;
}

数组倒置

void invert(int *a){
    int LEN=length(a);
    int b;
    for(int i=1;i<LEN;i++){
        for(int j=0;j<LEN-i;j++){
            b=a[j];
            a[j]=a[j+i];
            a[j+i]=b;        
        }    
    }
}

输出杨辉三角形前十行

#include<stdio.h>
int main(void){
    int a[10][10];
    int b=0;
    for(int i=0;i<10;i++){
        b++;
        for(int j=0;j<b;j++){
            if(j==0||j==b-1){
                a[i][j]=1;            
            }        
            else if(j>0&&j<b-1&&b>=3){
                a[i][j]=a[i-1][j]+a[i-1][j-1];            
            }
            printf("%5d",a[i][j]);
        }    
        printf("\n");
    }
    return 0;
}

重难点:

1.int *p中,*p和p的差别:*p是数值,p是地址。

2.*p++是地址会变化:取当前值,然后再移动地址。

(*p)++是数值会要变化:取当前值,然后再使数值增加1。

3.二级指针:

*p:一级指针:存放变量的地址。

**p:存放一级指针的地址。

4.数组名:数组名不可以自加,他是常量名。

函数名:表示该函数的入口地址。

字符串常量名:表示第一个字符的地址。


相关文章
|
9月前
|
存储 C语言
谭浩强 第六章利用数组处理批量数据
谭浩强 第六章利用数组处理批量数据
90 0
|
数据处理 Windows
数据处理第一节:选取列的基本到高级方法
博客原文:https://suzan.rbind.io/2018/01/dplyr-tutorial-1/ 作者:Suzan Baert 注意:所有代码都将作为管道的一部分呈现,即使它们中的任何一个都不是完整的管道。
1023 0
|
Rust 自然语言处理 算法
【算法】1389. 按既定顺序创建目标数组(多语言实现)
给你两个整数数组 nums 和 index。你需要按照以下规则创建目标数组: 目标数组 target 最初为空。 按从左到右的顺序依次读取 nums[i] 和 index[i],在 target 数组中的下标 index[i] 处插入值 nums[i] 。 重复上一步,直到在 nums 和 index 中都没有要读取的元素。 请你返回目标数组。 题目保证数字插入位置总是存在。
【算法】1389. 按既定顺序创建目标数组(多语言实现)
|
9月前
2569. 更新数组后处理求和查询(模板 + 普通线段树熟练掌握)
2569. 更新数组后处理求和查询(模板 + 普通线段树熟练掌握)
|
8月前
|
算法 搜索推荐
数据结构和算法——表排序(算法概述、物理排序、复杂度分析,包含详细清晰图示过程)
数据结构和算法——表排序(算法概述、物理排序、复杂度分析,包含详细清晰图示过程)
71 0
|
算法 C++
数据结构上机实践第八周项目1- 建立顺序串的算法库
数据结构上机实践第八周项目1- 建立顺序串的算法库
182 0
数据结构上机实践第八周项目1- 建立顺序串的算法库
|
存储 算法 程序员
嵌入式C实战项目开发技巧:如果对一个有规律的数组表进行位移操作
在嵌入式项目开发中,LED灯的操作是一定要会的,也是基础中的基础,比如用51单片机写个跑马灯,这不简单嘛,定义一个数组把那8个跑马灯存起来,然后搞个for循环不就可以了嘛,但是,实际工作开发中写一个跑马灯可不像学校和书本上那么简单噢,往往最简单的东西,有可能也是最复杂的。
1065 0
|
3月前
|
存储 机器学习/深度学习 数据可视化
数据集中存在大量的重复值,会对后续的数据分析和处理产生什么影响?
数据集中存在大量重复值可能会对后续的数据分析和处理产生多方面的负面影响
189 56
|
Python
用Python语言对任意图像进行m*n的均匀分块(思路非常清晰,步骤简单)
用Python语言对任意图像进行m*n的均匀分块(思路非常清晰,步骤简单)
241 0

热门文章

最新文章