C语言_数组

一维数组

定义

类型说明符 数组名 [常量表达式]:
类型说明符:任一种基本数据类型或构造数据类型
数组名:时用户定义的数组标识符
方括号种的常量表达式表示数据元素的个数,也成为数组的长度
注意事项:

  1. 数组的类型实际上是指数组元素的取值类型.
    对于同一个数组,其所有元素的数据类型都是相同的
  2. 数组名的书写规范应符合标识符规定
  3. 数组名不能与其他变量名相同
  4. 方括号种常量表达式表示数组元素的个数
  5. 不能在方括号中用变量来表示元素的个数,但是可以是符号常数或常量表达式
  6. 允许在一个类型说明中,说明多个数组和多个变量
#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]);
    }
}

在这里插入图片描述

初始化

类型说明符 数组名[常量表达式]={值,值,...,值}

  1. 可以只给部分元素赋初值
    当{ } 中值的个数少于元素个数时,只给前面部分元素赋值,其余元素赋0值
  2. 只能给元素逐个赋值,不能给数组整体赋值
  3. 如给全部元素赋值,则在数组说明中,可以不给出数组元素的个数
#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行四列的元素

求分科平均成绩和各科总平均成绩

Math8061598576
C7565638777
dbase9271709085
#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]

  1. 按行分段赋值
    int a[5][3] = {{80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85}};
  2. 按行连续赋值
    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]

初始化

  1. 只给部分元素赋初值
    当{ } 中值的个数少于元素个数时,只给前面部分元素赋值,其余元素赋'\0'
    char c[10]={'c',' ','p','r','o','g','r','a','m'};
  2. 自动确定数组的长度
    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));
}

在这里插入图片描述

字符串和字符串结束标志

  1. C语言中没有专门的字符串变量,通常用一个字符数组来存放字符串。
  2. 字符串总是以'\0'作为串的结束符
  3. 因此当把一个字符串存入一个数组时,也把结束符'\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));
}

在这里插入图片描述

字符数组的输入输出

printfscanf一次性输出输入一个字符数组中的字符串,而不必使用循环语句逐个输入输出每个字符

#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);
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值