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

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

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

例:对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.数组名:数组名不可以自加,他是常量名。

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

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


相关文章
|
6月前
|
数据采集 SQL 分布式计算
在数据清洗过程中,处理大量重复数据通常涉及以下步骤
【4月更文挑战第2天】在数据清洗过程中,处理大量重复数据通常涉及以下步骤
162 2
|
6月前
|
存储 C语言
谭浩强 第六章利用数组处理批量数据
谭浩强 第六章利用数组处理批量数据
68 0
第6章 利用数组处理批量数据
第6章 利用数组处理批量数据
65 0
|
程序员 Go 开发者
使用切片的区别分析|学习笔记
快速学习使用切片的区别分析。
109 0
使用切片的区别分析|学习笔记
|
SQL 数据采集 NoSQL
数据预处理-航线类型操作类型-读取规则到程序|学习笔记
快速学习数据预处理-航线类型操作类型-读取规则到程序
308 0
数据预处理-航线类型操作类型-读取规则到程序|学习笔记
|
Go 开发者
切片注意事项和细节(1) | 学习笔记
简介:快速学习切片注意事项和细节(1)
124 0
切片注意事项和细节(1) | 学习笔记
|
存储 程序员 Go
切片注意事项和细节(2) | 学习笔记
简介:快速学习切片注意事项和细节(2)
139 0
切片注意事项和细节(2) | 学习笔记
|
Go vr&ar 开发者
切片注意事项和细节(3) | 学习笔记
简介:快速学习切片注意事项和细节(3)
切片注意事项和细节(3) | 学习笔记
|
数据采集 NoSQL 大数据
数据预处理-航线类型操作类型实现详细思路|学习笔记
快速学习数据预处理-航线类型操作类型实现详细思路
|
前端开发 JavaScript 数据库
(简易)测试数据构造平台: 14 (工具列表删除功能前端)
(简易)测试数据构造平台: 14 (工具列表删除功能前端)
(简易)测试数据构造平台: 14 (工具列表删除功能前端)