定义:
1,表明数组的类型。
2,标识数组的名称。
3,确定数组的长度,或事先定义好各元素。
4,下标可以是整型常量或整型表达式。
形式:
1,int a[5]; 2,int a[8]={0,1,2,3,4,5};//未赋值的元素默认为0 3,int a[]={0,1,2,3,4,5};//系统自行定义数组的长度 4,define N 10int a [N];//数组的下标只能以这种变量形式存在 12345
数组的输入与输出:
类型1: #include<stdio.h> #define N 10 main() { char a[N]; //改变N值,可改变数组的长度 gets(a); puts(a); }//越界C语言不负责喔 类型2: #include<stdio.h> #define N 10 main() { int a[N]; //改变N值,可改变数组的长度 int i,j; for(i=0;i<N;i++) scanf("%d",&a[i]); for(j=0;j<N;j++) printf("%d",a[j]); }//使用char型时注意回车键也会被输入进去
12345678910111213141516171819202122(1),数组元素的插入
插入前:(插入7)
插入后:
1,比较上面二者可以发现,为了插入7,并使原数据能够保存完好。则我们需要将9,8依次往后移,然再插入7。所以我们设计的程序也要完美的复制此过程。
2,同时我们插入的7是否能够插入到指定的位置,也需要一个比较条件。没有这个条件,我们也无从下手。
(2),数组元素的查找与删除
删除前:(删除6)
删除后:
1,由以上可发现,当我们需要删除数组中的某个数时,我们需要找到它,并将后面的数依次往前覆盖,最后一个位置的数定义为0即可。
2,所以我们的思路即,先将此数组跑一遍,找到我们需要删除的数字,然后再利用a[i]=a[i+1],使其后面的数字往前覆盖即可。
程序设计:
#include<stdio.h> main() { int a[5]={5,6,7,8,9}; int i,j; for(i=0;i<5;i++) //走一遍该数组 if(a[i]==6) //找到我们需要删除的值 { a[i]=a[i+1]; //从后往前覆盖 for(;i<4;i++) a[i]=a[i+1]; a[i]=0; //使末尾数字为0 break;//跳出大循环 } for(j=0;j<5;j++) //输出数组 printf("%d",a[j]); }
1234567891011121314151617(3),数组元素的排序
这个非常重要,各类程序差不多都会涉及
1,冒泡排序
含义:将数组走一遍,抓住每一回的值,并在每一回的交换中将该数值放在合适的位置。(回数和次数,根据数学原理可以解出来喔)
#include<stdio.h> #define N 5 main() { int a[N]={9,8,7,6,5}; int i,j,swap; for(i=0;i<N-1;i++) //定义需要进行的回数 for(j=0;j<N-1-i;j++) //定义每一回需要比较的次数 if(a[j]>a[j+1]) //从小到大排序 { swap=a[j]; a[j]=a[j+1]; a[j+1]=swap; } for(j=0;j<N;j++) //输出数组 printf("%d",a[j]); }
12345678910111213141516172,选择排序1.0
含义:将数组走一遍,抓住每一个空格,并在每一回的交换中将适合的值放入该空格内。(回数和次数,根据数学原理可以解出来喔)
#include<stdio.h> #define N 5 main() { int a[N]={9,8,7,6,5}; int i,j,swap; for(i=0;i<N-1;i++) //确定被比较量 for(j=i+1;j<N;j++) //确定比较量 if(a[i]>a[j]) //从小到大排序 { swap=a[i]; a[i]=a[j]; a[j]=swap; } for(j=0;j<N;j++) //输出数组 printf("%d",a[j]); }
12345678910111213141516173,选择排序2.0
含义:将数组走一遍,找到该数组的最小值,再将其放入到其适合的空中。即先找值,再放入空格中。(回数和次数,根据数学原理可以解出来喔)
#include<stdio.h> #define N 5 main() { int a[N]= {9,8,6,7,5}; int i,j,swap,min; for(i=0; i<N-1; i++) { min=i; //先定义最小值min for(j=i+1; j<N; j++) if(a[j]<a[min]) //从小到大排序 min=j; //确定最小值就是min if(min!=i) //如果min是原定义就不用交换了 { swap=a[i]; a[i]=a[min]; a[min]=swap; //将非原定义的min放入到适合它的位置 } } for(j=0; j<N; j++) //输出数组 printf("%d",a[j]); }
12345678910111213141516171819202122 二维数组定义形式:
数据类型 数组名[整型常量表达式1][整型常量表达式2]
注意:
1,这里的表达式1即是行标,表达式2即是列标,所存变量的个数即是(行*列)的个数。
2,行标和列标的值和一维数组一样都是从0开始的。
3,其它定义和一维数组的相差无几。
表达形式:
1,int a[2][3]={1,2,3,4,5,6}; 2,int a[][3]={1,2,3,4,5,6};//静态定义的情况下行标可以不赋值,但列标不行!!! 3,int a[2][3]={{1},{4,5}}; 4,int a[][3]={{1,2},{4,5}};//未赋值的元素自动变为0 1234
小结:
在一维数组的基础上我们可以建立二维数组,在二维数组的基础上我们也可以建立三维数组。但其用法还是和一维数组的大致相同,我们只要了解了其空间分布,大部分的问题都是可以解决的。
定义形式:
char 数组名[整型常量表达式]
注意:
1,字符数组中的每一个元素只能存放一个字符。
2,数组名代表了该数组的起始地址(后面的指针会讲其作用)
表达形式:(静态输入)
1,char a[10]={'b','a','d',' ','g','u','y'}; 2,char a[10]={"bad guy"}; 3,char a[10]="bad guy"; 123
注意:
1,printf输出字符数组时的方式是遇到 即停止。
2,字符数组的越界,就是你定义了数组的长度,但你输入时超过了,输出时也超长了。标准C数组是允许越界的,会提示错误,但还是照常输出,因为后果你负责呀。所以尽量还是少越界比较好。
3,输入输出尽量用gets,puts。
接下来介绍几种字符串常用函数
注意加头文件#include <string.h>
1,strcat(字符数组1,字符数组2)
含义:其作用是连接两个字符数组中的字符串,把字符数组2接到字符数组1的后面,最终结果于字符数组1中。(字符串2的第一个字符体换掉字符串1的末尾 )
2,strcpy(字符数组1,字符串2)
含义:其作用是将字符串2的内容复制到字符数组1中。 (连同 )
注意:
1,字符串2的内容将覆盖字符数组1的内容。
2,字符串2可以是数组名,也可以是字符串常量。
3,字符串2后面可以加 ,c 目的是控制复制到字符数组1中的字符数量。
3,strcmp(字符串1,字符串2)
含义:比较两个字符串的大小 。若两个字符串相同,则返回0,若字符串1大于字符串2,则返回一个正数,若字符串1小于字符串2,则返回一个负数。(字符串的比较,即从两个字符串的第一个字符开始,比较其ASCII码的大小,直到分出胜负)
4,strlen(字符数组)
含义:求该字符数组的长度。(即不包括 )
4,strlwr(字符串)
含义:将字符串的大写字母转换成小写字母。
5,strupr(字符串)
含义:将字符串的小写字母转换成大写字母。
相关知识
Golang复习笔记要点
<C语言学习>数组
【C语言】字符串、字符数组
c语言数组初始化——int a[N] = {0};
花艺学习笔记整理 (一):花材选购
C语言学习3(数组)
c语言数组初始化——int a[N] = {0}的探究
如何复习《园林花卉学(含园林植物遗传育种学)》?090700考研资料大全,代码822历年考研真题+复习大纲+内部笔记+题库模拟题
《植物保护学》期末复习整
最新中考语文总复习教案全套(51页)
网址: C: 笔记整理5: 数组(总复习) https://m.huajiangbk.com/newsview1293271.html
上一篇: 无土栽培技术优缺点有哪些? |
下一篇: 环保社会实践报告范文4篇汇总.d |