一维数组
定义
类型说明符 数组名 [常量表达式]:
类型说明符:任一种基本数据类型或构造数据类型
数组名:时用户定义的数组标识符
方括号种的常量表达式表示数据元素的个数,也成为数组的长度
注意事项:
- 数组的类型实际上是指数组元素的取值类型.
对于同一个数组,其所有元素的数据类型都是相同的 - 数组名的书写规范应符合标识符规定
- 数组名不能与其他变量名相同
- 方括号种常量表达式表示数组元素的个数
- 不能在方括号中用变量来表示元素的个数,但是可以是符号常数或常量表达式
- 允许在一个类型说明中,说明多个数组和多个变量
#include<stdio.h>
#define FD 5
int main(){
int a[10]; //说明整型数组a,有10个元素
float b[10],c[20]; //说明实型数组b,有10个元素,实型数组c,有20个元素
char ch[20]; // 说明字符数组ch,有20个元素
int d[3+2],e[7+FD];
}
引用
数组名[下标]
0编号索引
下标只能为整型常量或整型表达式,如为小数时,C编译自定取整
#include<stdio.h>
int main(){
int i,a[10];
for(i=0;i<10;){
a[i++]=i;
}
for(i=9;i>=0;i--){
printf("%d\t",a[i]);
}
}
初始化
类型说明符 数组名[常量表达式]={值,值,...,值}
- 可以只给部分元素赋初值
当{ } 中值的个数少于元素个数时,只给前面部分元素赋值,其余元素赋0值 - 只能给元素逐个赋值,不能给数组整体赋值
- 如给全部元素赋值,则在数组说明中,可以不给出数组元素的个数
#include<stdio.h>
int main(){
int i;
int a[10]={0,1,2,3,4,5,6,7,8,9};
for(i=0;i<10;i++){
printf("%d\t",a[i]);
}
printf("\n");
int b[10]={0,1,2,3,4};
for(i=0;i<10;i++){
printf("%d\t",b[i]);
}
printf("\n");
int c[]={1,2,3,4,5};
for(i=0;i<5;i++){
printf("%d\t",c[i]);
}
printf("\n");
}
二维数组
定义
类型说明符 数组名[常量表达式1][常量表达式2]
C语言中,二维数组是按行排列的
引用
数组名[下标][下标]
eg a[3][4]
表示3行四列的元素
求分科平均成绩和各科总平均成绩
张 | 王 | 李 | 赵 | 周 | |
---|---|---|---|---|---|
Math | 80 | 61 | 59 | 85 | 76 |
C | 75 | 65 | 63 | 87 | 77 |
dbase | 92 | 71 | 70 | 90 | 85 |
#include<stdio.h>
int main(){
int i,j,s=0,average,v[3],a[5][3];
printf("input score\n");
for(i=0;i<3;i++){
for(j=0;j<5;j++){
scanf("%d",&a[j][i]);
s = s + a[j][i];
}
v[i]=s/5;
s=0;
}
average = (v[0]+v[1]+v[2])/3;
printf("math:%d\nC language:%d\ndbase:%d\n",v[0],v[1],v[2]);
printf("total:%d\n",average);
}
初始化
五行三列 a[5][3]
- 按行分段赋值
int a[5][3] = {{80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85}};
- 按行连续赋值
int b[5][3] = {80,75,92,61,65,71,59,63,70,85,87,90,76,77,85};
#include<stdio.h>
int main(){
int i,j,s=0,average,v[3];
int a[5][3] = {{80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85}};
for(i=0;i<3;i++){
for(j=0;j<5;j++){
s = s+a[j][i];
v[i]=s/5;
s=0;
printf("%d\t",a[j][i]);
}
printf("\n");
}
average=(v[0]+v[1]+v[2])/3;
printf("math:%d\nC language:%d\ndbase:%d\n",v[0],v[1],v[2]);
printf("total:%d\n",average);
s=0;
int b[5][3] = {80,75,92,61,65,71,59,63,70,85,87,90,76,77,85};
for(i=0;i<3;i++){
for(j=0;j<5;j++){
s = s+b[j][i];
v[i]=s/5;
s=0;
printf("%d\t",b[j][i]);
}
printf("\n");
}
average=(v[0]+v[1]+v[2])/3;
printf("math:%d\nC language:%d\ndbase:%d\n",v[0],v[1],v[2]);
printf("total:%d\n",average);
}
字符数组
定义
一维字符数组
char c[10]
二维字符数组
char c[5][10]
初始化
- 只给部分元素赋初值
当{ } 中值的个数少于元素个数时,只给前面部分元素赋值,其余元素赋'\0'
值
char c[10]={'c',' ','p','r','o','g','r','a','m'};
- 自动确定数组的长度
char d[] = {'c',' ','p','r','o','g','r','a','m'};
长度为9
#include<stdio.h>
int main(){
int i;
char c[10]={'c',' ','p','r','o','g','r','a','m'};
for(i=0;i<10;i++){
printf("%c\t",c[i]);
}
printf("\n数组长度%d\n",sizeof(c));
for(i=0;i<10;i++){
printf("%d\t",i);
}
printf("\n");
char d[] = {'c',' ','p','r','o','g','r','a','m'};
for(i=0;i<sizeof(d);i++){
printf("%c\t",d[i]);
}
printf("\n数组d长度%d\n",sizeof(d));
}
字符串和字符串结束标志
- C语言中没有专门的字符串变量,通常用一个字符数组来存放字符串。
- 字符串总是以
'\0'
作为串的结束符 - 因此当把一个字符串存入一个数组时,也把结束符
'\0'
存入数组,并以此作为该字符串是否结束的标志。有了'\0'
标志后,就不必再用字符数组的长度来判断字符串的长度了
char c[]={"C program"};
等效于
char c[]="C program";
#include<stdio.h>
int main(){
int i;
char c[]="C program";
for(i=0;i<sizeof(c);i++){
printf("%c\t",c[i]);
}
printf("\n");
for(i=0;i<sizeof(c);i++){
printf("%d\t",i);
}
printf("\n数组长度%d\n",sizeof(c));
}
字符数组的输入输出
printf
和scanf
一次性输出输入一个字符数组中的字符串,而不必使用循环语句逐个输入输出每个字符
#include<stdio.h>
int main(){
char c[]="BASIC\ndBASE";
printf("%s\n",c);
char st[15];
printf("input string:\n");
scanf("%s",st);
printf("%s\n",st);
}
字符串处理函数
#include<string.h>
字符串输出函数 puts()
#include<stdio.h>
#include<string.h>
int main(){
char c[]="BASIC\nDBASE";
puts(c);
}
字符串输入函数 gets()
#include<stdio.h>
#include<string.h>
int main(){
char st[15];
printf("input string:\n");
gets(st);
puts(st);
}
字符串连接函数 strcat()
strcat(字符数组1,字符数组2)
把字符数组2中的字符串连接到字符数组1中字符串的后面,并删去字符串1后的串标志'\0'
,本函数返回值时字符数组1的首地址.
#include<stdio.h>
#include<string.h>
int main(){
static char st1[30] = "My name is ";
int st2[10];
printf("input your name:\n");
gets(st2);
strcat(st1,st2);
puts(st1);
}
字符串拷贝函数 strcpy()
strcpy(字符数组1,字符数组2)
把字符数组2中的字符串拷贝到字符数组1中。串结束表示 '\0'
也一同拷贝
#include<stdio.h>
#include<string.h>
int main(){
char st1[15],st2[]="C language";
strcpy(st1,st2);
puts(st1);
}
字符串比较函数 strcmp()
strcmp(字符数组1,字符数组2)
按照ASCII码顺序比较两个数组中的字符串,并由函数返回值返回比较结果
字符串1=字符串2 | 返回值=0 |
---|---|
字符串1>字符串2 | 返回值>0 |
字符串1<字符串2 | 返回值<0 |
#include<stdio.h>
#include<string.h>
int main(){
int k;
static char st1[15],st2[]="C Language";
printf("input a string:\n");
gets(st1);
k=strcmp(st1,st2);
if(k==0) printf("st1=st2\n");
if(k>0) printf("st1>st2\n");
if(k<0) printf("st1<st2\n");
}
字符串长度函数 strlen()
测字符串的实际长度(不含字符串结束标志 '\0'
)并最为函数返回值
#include<stdio.h>
#include<string.h>
int main(){
int k;
static char st[]="C language";
k=strlen(st);
printf("The length of the string is %d\n",k);
}