C语言入门教程(5) CSDN花神生涯

    科技2023-10-31  100

    文章目录

    数组一维数组的定义和引用一维数组的使用二维数组的定义和引用二维数组的使用 字符数组字符串输出函数puts字符串输入函数gets字符串连接函数strcat字符串复制函数strcpy字符串比较函数strcmp字符串长度测试函数strlen字符串所占空间函数sizeof 经典案例一经典案例二


    数组

    一维数组的定义和引用

    数组是按序排列的同类变量的集合,数组元素当然就是组成数组的基本单元

    类型说明符 数组名 [常量表达式]; 例如:int arr[3]={1,2,3}

    [ ] 数组访问操作符

    数组是使用下标来访问的,下标从0 开始

    常量表达式表示数组元素的 个数

    数组在创建的时候,如果不指定数组的大小就得初始化,数组的元素个数根据初始化的内容来确定 例如:nt arr[]={“abc”};//sizeof(arr)=4, strlen(arr) =3 例如:nt arr[]={ ‘a’,‘b’,‘c’};//sizeof(arr)=3, strlen(arr) =随机值

    数组在内存中是连续存放的,由低地址项高地址

    一维数组的使用

    键盘输入10个数,输出最大值

    #include <stdio.h> main() { int i,max,a[10]; printf("输入10为数字") for(i=0;i<10;i++scanf("%d",&a[i]); max=a[0]; for(i=1;i<10;i++) if(a[i]>max) max=a[i]; printf("maxnum=%d\n"max) }

    二维数组的定义和引用

    类型说明符 数组名[常量表达式1] [常量表达式2]; 例如:int a[3][4]={3,16,87,65,4,32,11,108,10,325,12,27}; →若对全部元素初始化,则第一维的长度可以不给出 例如:int a[ ][4]={3,16,87,65,4,32,11,108,10,325,12,27}; →对每行第一列进行初始化 例如 :int a[2][3]={{1},{2}}

    常量表达式1表示第一维下标的长度

    常量表达式2表示第二维下标的长度 int a[3][4],定义了一个三行四列的数组

    行可以省略,列不可以 int a[][4]={{1,2,3,4,},{5,6,7,8,}}定义了一个2行四列的数组

    a[i][j];调用第i行,第j 列的数组元素

    二维数组按行排列 ,也是连续存储的,由低地址向高地址

    数组是一种构造类型,二维数组可以看作由一维数组的嵌套而构成的

    二维数组的使用

    构造并输出一个5行5列的矩阵,主对角线上的数为1,其他位置色数为0

    #include <stdio.h> man() { int a[5][5],i,j; for(i=0;i<5;i++)//外层循环控制行//矩阵的建立 for(j=0;j<5;j++)//内层循环控制列。 if(i==j) a[i][j]=1; else a[i][j]=0; for(i=0;j<5;i++)//矩阵的输出 { for(j=0;j<5;j++) printf("%4d",a[i][j]); printf("\n") } }

    字符数组

    例如: char c[5]={‘h’,‘l’,‘o’,‘o’,‘e’}当把一个字符串存入一个数组时,也把结束符’\0‘存入了数组用字符串方式初始化比用字符逐个进行初始化多占一个字节例如:char c[]={’C’,’ ',‘p’,‘r’,‘g’,‘r’,‘a’,‘m’};可以:char c[]={“C program”}可以:char c[]=“C program”当用scanf函数输入字符串时,字符串不能含有空格否则,将以空格作为串的结束标志曾经介绍scanf的个输入项必须以地址方式出现,如&a,&b等但scanf(“%s%s%s”arr1,arr2,arr3)却以数组名出现,原因是数组名代表数组的首地址,是个地址常量整个数组时个以首地址开头的一块连续的内存单元,
    字符串输出函数puts
    puts(字符数组名);

    功能:把字符数组中的字符串输出到标准输出设备上,即在屏幕上显示该字符串。

    字符串输入函数gets
    gets(字符数组名);

    功能:从键盘上输入一个字符串,本函数得到一个函数值,即为该字符数组的首地址,gets函数并不以空格作为字符串输入结束的标志

    字符串连接函数strcat
    strcat(字符数组1,字符数组2);

    功能:把字符数组2 的字符串连接到字符数组1中字符串的后面,并删除字符串1后原有的串结束标志’\0’, 本函数的返回值是字符数组1的首地址

    字符串复制函数strcpy
    strcpy(字符数组名1,字符数组名2)

    功能:把字符数组2的字符串复制到字符数组1中,串结束标志’\0‘也一同复制,本函数字符数组1应有足够的长度

    字符串比较函数strcmp
    strcmp(字符数组名1,字符数组名2) 字符串1 = 字符串2,返回值=0 字符串1 > 字符串2,返回值>0 字符串1 < 字符串2,返回值<0

    功能:根据ASCII码顺序比较返回比较结果,也可以用来比较两个字符串常量,或比较数组和字符串常量

    字符串长度测试函数strlen
    strlen(字符数组名)

    功能: 求字符串的长度,并作为函数值返回,当碰到字符串结束标志\0停止,不包括\0

    字符串所占空间函数sizeof
    sizeof()

    :计算arr所占空间的大小,包括\0也算占用空间

    经典案例一

    在二维数组a选出各行最大的元素,组成一个一维数组b。

    #include <stdio.h> main() { int a{}{4}={3,16,87,65,4,32,11,108,10,325,12,27} int b[3],i,j,m; for(i=0;i<3;i++)//外层循环控制行数,比较3次,0,1,2, { m=a[i][0];//行的第0列元素已经提取出来,所以下面j初始化为1 for(j=1;j<=3;j++)//内层循环控制列数,比较三个三次 if(a[i][j]>m) m=a[i][j];//将暂时比较出的大的数赋给m b[i]=m;//再将m赋给b[i] } printf("输出数组a:\n") for(i=0;i<3;i++) { for(j=1;j<=3;j++) printf("%5d",a[i][j]); printf("\n") } printf("输出数组b:\n") for(i=0;i<3;i++) printf("%5d",b[i]); printf("\n"]); }

    经典案例二

    输入5个国家的名称,并按字母顺序排列输出

    #include <indio.h> main() { char cs[5][20], st[20]; int i,j,p; printf{"请输入五个国家名称"} for(int i=0,i<5,i++) gets(cs[i]);//键盘获取五个国家名称 printf("\n"); for(i=0,i<5,i++) { p=i;//中间变量,将i的下标赋给p,存取当前最小值 strcpy(st,cs[i])//将获取到的国家赋给st for(j=i+1;j<5;j++)//循环找出最小城市名 if(strcmp(cs[j],st)<0)//比较函数, { p=j;//将下一个获取到的字母小的国家的下标赋给p,存取当前最小值 strcpy(st,cs[j]);//将下一个获取到的字母小的国家赋给st } if(p!=i)//如果此时p不等于i,说明执行了上面内层循环语句,有更小的国家出现 { //交换位置,将最小值提到前面 strcpy(st,cs[j]); strcpy(cs[i],cs[p]);//将中间变量存取的最小值赋给cs[i] strcpy(cs[p],st); } puts(cs[i]);//输出字母顺序小的国家 } printf("\n"); {

    花神博客生涯之C语言(5)结束了哦~ 接下来会持续更新(⊙o⊙)!

    Processed: 0.017, SQL: 8