数组:组织和处理一批同类型数据。
一维数组
一维数组的定义和初始化
元素类型名 数组名[元素数] ={元素的初值列表}
int a[10];//整形数组a有十个元素,下标范围为0~9
int a[10]={1,2,3,4,5,6,7,8,9,10};//定义一个数组a并给每一个元素赋初始值
int a[10]={1,2,3,4,5};//定义一个数组a并给只给前面部分元素赋初始值
int n[]={1,2,3,4,5};//定义一个数组n,方括号中的元素数由列表中全部元素的个数确定
int n[4]={1,2,3,4,5};//若初值列表中的初值个数多于元素数,则系统编译出错
注:[]内为元素数,即数组长度。
C语言中不允许用变量来定义元素数。
C语言规定,元素下标一律从零开始,升序编排。
一维数组元素的引用
数组名[下标]
int a[10]={1,2,3,4,5,6,7,8,9,10};//定义一个数组a
d[5]=d[0]+d[3];//赋值后d[5]的值为5
d[0]=d[2-d[3]];//下标2-d[3]=-2,数组越界
注:C语言中一般不做数组越界检查,但越界往往会产生意想不到的结果
一维数组的应用举例
将任意一个十进制数转化成二进制数并输出。
#include<stdio.h>
main
{
int i=0,n,d[40];
scanf("%d",&n);
while(n>0)
{
d[i++]=n%2;//整除2求余
n=n/2;//整除2求商
}
for(i--;i>=0;i--)
printf("%1d",d[i]);
printf("\n");
}
问题:受之前编的一些程序的影响(比如打印321,则是3*100+2*10+1),没有想通如何打印二进制数的0和1
解决:把数组单个打印出来和一起打印出来看起来没什么区别。
二维数组
二维数组的定义和初始化
元素类型名 数组名[行数][列数] ={元素的初值列表}
int a[2][3]={1,2,3,4,5,6};//定义一个两行三列的数组
int b[3][3]={1,2,3,4,5,6};//后面3个元素默认初始值为0
int b[3][4]={{1,2},{3},{4}};//给部分元素赋值
二维数组元素的引用
数组名[行下标][列下标]
int a[2][3]={{1,2,3},{4,5,6}};//定义一个数组a
a[0][2]=a[1][1]+1;//数组变为 a[2][3]={{1,2,6},{4,5,6}};
注:数组元素中的每个下标都一律从0开始升序编排,最大小标分别等于数组定义的行数减一和列数减一。
二维数组一般通过二重循环改变行下标和列下标实现对数组元素的逐个访问。
数组的定义和储存可以拓展到三维数组甚至n维数组
字符数组
字符数组的定义和引用
定义: char 数组名[元素数]={元素初值列表}
char a[8]={'G','o','o','d'};
char x[8]={"I am a student."};//定义字符串常量的方法1
char x[8]="I am a student.";//定义字符串常量的方法2
注:
如果元素初值列表元素数小于定义元素数,则后面自动补全ASCII码为0的'\0'
如果元素初值列表元素数大于定义元素数,则编译器报错。
引用:数组名[元素数]
与一般类型的数组一样,除了函数调用语句外,其他语句不能整体引用字符数组。
字符数组的输入与输出
1.用格式符"%c"逐个输入输出字符
2.用格式符"%s"整体输入字符串
char c[20];
scanf("%s",c);//数组名前不需要加字符串&
3.用格式符"%s"整体输出字符数组
char c[20]={"How are you"};
printf("%s?",c);
只有字符数组可以整体输入或输出,其它数组都不行
字符串处理函数
- gets(字符数组);
字符串整行输入函数
char str[20];
gets(str);
/*
运行时在键盘输入:
How are you<回车>
结果将包含11个有效字符和'\0'字符供12个存入str
*/
- puts(字符串);
字符串整行输入函数
char str[]={"Hello !\nHow are you?"};
puts(str);
puts("Welcome to you!");
/*
输出:
Hello !
How are you?
Welcome to you!
*/
- strcat(字符数组,字符串);
将字符串连接到数组中的串后面
char s[20]="You are a ";
strcat(s,"worker.");
puts(s);
/*
输出
You are a worker.
*/
- strcpy(字符数组,字符串);
复制字符串到数组
char s[20];
strcpy(s,"Hello !");
puts(s);
/*
输出:
Hello !
*/
- strcmp(字符串1,字符串2);
两个字符串比较,返回比较结果
对字符串1和字符串2从左到右按其ASCII码比较,遇到'\0'或字符值不相等结束。
两字符串值相等返回0,不相等且字符串1值大返回正整数,否则返回负整数。 - strlen(字符串);
测字符串长度,返回字符串有效长度,不包括'\0'
char s[20]={"12345"};
strlen(s);
/*
strlen(s)长度为5
strlen("How are you?")长度为13
*/
- strlwr(字符串);
将字符串大写字母转化为小写 - strupr(字符串);
将字符串小写字母转化为大写
网友评论