• C语言 第七章 数组与字符串


    一、数组

    1.1、数组的概念

    用来存储一组相同类型数据的数据结构。有点像班上放手机的手机袋,超市的储物柜。

    特点:只能存放一种类型的数据,如全部是int型或者全部是char型,数组里的数据成为元素。

    1.2、数组的定义

    格式: 类型 数组名[元素个数];

    举例:存储5个人的年龄

    int ages[5]; //在内存中开辟4x5=20个字节的存储空间

    char str[]={'x','y'};

    char str[]="xy";

    double array[10];

    可以在定义数组的同时对数组进行初始化:

    int ages[5]={17,18,19,20,21};

    遍历数组:

    for(int i=0;i<5;i++)

    {

    printf(“ages[%d]=%d ”,i,ages[i]);

    }

    注意:

    (1)数组的初始化

    ①.int ages[5]={17,18,19,20,21};//一般写法

    ②. int ages[5]={17,18};//只对前两个元素赋值

    ③. int ages[5]={[3]=10,[4]=11};//对指定的元素赋值,这里为第三个和第四个

    ④. int ages[]={11,12,13}.//正确,右边的元素确定,则个数可以省略这里为3个。

    ⑤. int ages[];//错误,编译器无法知道应该分配多少的存储空间

    ⑥. int ages[5];ages={17,18,19,20,21};//错误,只能在定义数组时这样进行初始化

    ⑦. int ages[‘A’]={1,2,3};//正确,相当于是ages[65]

    ⑧. int count=5;int ages[count];//如果不进行初始化,则这种写法正确,编译器不会报错为其分配20个字节的存储空间,ages[0]=1;ages[1]=2;可以像这样对数组的元素进行赋值,但是2,3,4等元素的值时不确定的。

    ⑨. 而int count=5;int ages[count]={1,2,3,4,5};//这种写法是错误的,在定义数组时对数组进行初始化,元素的个数必须为常量或者不写,不能是一个变量

    但是访问数组时,是利用相同的数组名和其不同的下标来访问,下标必须从0开始计算,那么最后一个元素的下标就是“长度-1”。即数组元素的一般形式为:数组名[下标] 

    复制代码
    #include "stdio.h"
    void main()
    {
        //数组定义
        int a[5],i;  //定义长度为5的int类型数组,相当于定义了5个变量
        
        //使用数组元素,0-5叫下标
        a[0]=100;
        a[1]=200;
        a[2]=300;
        a[3]=400;
        a[4]=500;
        
        //循环输入
        for(i=0;i<5;i++)
        {
            scanf("%d",&a[i]);
        }
        
        //遍历数组中的每一个元素
        for(i=0;i<5;i++)
        {
            printf("%d 
    ",a[i]);
        }
    }
    复制代码

    1.3、计算平均成绩与总分

    复制代码
    /* Note:Your choice is C IDE */
    #include "stdio.h"
    void main()
    {
        //定义一个长度为10的float类型的数组,
        //循环输入10个学生的成绩
        //计算出平均成绩与总分
        //数组定义
        int i;
        float mark[10],s=0;  //定义float数组,长度为10,0-9
        for(i=0;i<10;i++)
        {
            printf("mark[%d]=",i);
            scanf("%f",&mark[i]);
        }
        
        for(i=0;i<10;i++)
        {
            s=s+mark[i];
        }
        
        printf("总分:%.2f",s);
        printf("平均分:%.2f",s/10);
    }
    复制代码

    1.4、数组初始化

    初始化赋值的一般形式为:
    类型说明符 数组名[常量表达式]={值,值……值};
    其中在{ }中的各数据值即为各元素的初值,各值之间用逗号间隔。例如:
    int a[10]={ 0,1,2,3,4,5,6,7,8,9 };
    相当于a[0]=0;a[1]=1...a[9]=9;

    可以只给部分元素赋初值,但值的个数多于数组元素个数则不行;当{ }中值的个数少于数组元素个数时,则只给前面部分元素赋值,多于数组元素个数时,则越界。 
    只能给元素逐个赋值,不能给数组整体赋值。 
    如给全部元素赋值,则在数组说明中,可以不给出数组元素的个数。

    复制代码
    #include "stdio.h"
    void main()
    {
        int i,a[]={1,2};
       
        for(i=0;i<3;i++)
        {
            printf("%d
    ",a[i]);
        }
       
    }
    复制代码

    1

    2

    1.5、求数组中最大数

    复制代码
    #include "stdio.h"
    void main()
    {
        int a[]={95,59,98,0,35,46,8,-1,99,98},max,i;
        
        //假定最大数为a[0]
        max=a[0];
        
        //遍历,枚举
        for(i=1;i<10;i++)
        {
            if(a[i]<max)
            {
                max=a[i];
            }
        }
        printf("%d",max);
    }
    复制代码

    99

    1.6、冒泡排序

    冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。

    冒泡排序算法的运作如下:(从后往前)
    1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
    2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
    3. 针对所有的元素重复以上的步骤,除了最后一个。
    4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

    冒泡排序舞蹈演示

    复制代码
    /* Note:Your choice is C IDE */
    #include "stdio.h"
    void main()
    {
       //冒泡排序
       int a[]={195,99,98,0,-35,46,8,-10,99,98},i,j,t;
       for(i=0;i<9;i++)
       {
            for(j=0;j<9-i;j++)
            {
                if(a[j]>a[j+1])
                {
                    t=a[j];
                    a[j]=a[j+1];
                    a[j+1]=t;
                }
            }
       }
       
       for(i=0;i<10;i++)
        printf("%d 
    ",a[i]);
        
    }
    复制代码

    N个数排序,外重循环N-1,内重循环N-1-i,比较交换

    二、字符串

    2.1、字符串概念与定义

    C语言中的字符数组就是一个字符串,字符串是一个特殊的字符数组。

    单字符数组的定义
    例如:
    char c[10]; /*单字符数组,即一串字符*/
    单字符数组的初始化
    例如:
    char c[10]={'H','e','l','l','o',''};
    char c[]={'H','e','l','l','o',0};
    这种初始化方法,系统不会自动给其加上字符串结束符,即’’字符,所以要人为加上。 
    字符串结束标志:在C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串。字符串常量总是以''作为字符串的结束符。因此当把一个字符串存入一个数组时,也把结束符''存入数组,并以此作为该字符串是否结束的标志。有了''标志后,就不必再用字符数组的长度来判断字符串的长度了。

    复制代码
    /* Note:Your choice is C IDE */
    #include "stdio.h"
    void main()
    {
       //字符串 (糖葫芦)
       char str[]={'H','e','l','l','o',''};
       int i;
       char str1[]="Kitty";
       printf("%s",str1);
       
       for(i=0;i<5;i++)
       printf("
     %c",str1[i]);
       
    }
    复制代码

    2.2、字符串输入与输出

    2.2.1、使用scanf与printf可以完成字符串的输入

    char str[100];

    scanf("%[^ ]s",str);

    printf("%s",str);

    2.2.2、使用gets,puts完成

    复制代码
    /* Note:Your choice is C IDE */
    #include "stdio.h"
    #include "string.h"
    
    void main()
    {
        //数组字符串输入时不需要&取地址
        char name[100];
        gets(name);  //从键盘输入字符串
        puts(name);  //输出字符串
    }
    复制代码

    2.3、字符串连接函数strcat

    格式:
    strcat (字符数组名1,字符数组名2)
    功能:
    把字符数组2中的字符串连接到字符数组1 中字符串的后面,并删去字符串1后的串标志“”。本函数返回值是字符数组1的首地址。
    注意:第一个参数只能是字符数组变量,而不能是字符串常量

    复制代码
    #include "stdio.h"
    #include "string.h";
    
    void main()
    {
        char str1[100]="Hello";
        char str2[]=" Kitty";
        //使用strcat函数将str2的内容复制到
        //str1中,只适用于字符串
        strcat(str1,str2);
        printf("%s 
    ",str1);   
        printf("%s 
    ",str2);   
    }
    复制代码

    2.4、字符串拷贝函数strcpy 

    格式:
    strcpy (字符数组名1,字符数组名2)
    功能:
    把字符数组2中的字符串拷贝到字符数组1中。字符串结束标志“”也一同拷贝。字符数组2,也可以是一个字符串常量。这时相当于把一个字符串赋予一个字符数组

    复制代码
    /* Note:Your choice is C IDE */
    #include "stdio.h"
    #include "string.h";
    
    void main()
    {
        char str1[100]="Boy!";
        char str2[]="Girl!";
        printf("%s 
    ",str1);   
        printf("%s 
    ",str2); 
        
        //将str2的内容复制到str1中
        strcpy(str1,str2);
        
        printf("%s 
    ",str1);   
        printf("%s 
    ",str2);   
    }
    复制代码

    2.5、字符串比较函数strcmp

    格式:
    strcmp(字符数组名1,字符数组名2)
    功能:
    按照ASCII码顺序比较两个数组中同位字母的大小,并由函数返回值返回比较结果。
    字符串1=字符串2的话,返回值=0;
    字符串2>字符串2的话,返回值 >0;
    字符串1<字符串2的话,返回值 <0。
    本函数也可用于比较两个字符串常量,或比较数组和字符串常量。

    复制代码
    /* Note:Your choice is C IDE */
    #include "stdio.h"
    #include "string.h";
    
    void main()
    {
        char str1[]="abe123";
        char str2[]="abd";
        //-1 小于
        //0 等于
        //1 大于
        printf("%d",strcmp(str1,str2));
    }
    复制代码

     1

    2.6、获得字符串长度函数strlen 

    格式:
    strlen(字符数组名)
    功能:
    计算数组里字符串的实际长度(不含字符串结束标志‘’) 并将长度作为函数返回值;也可以计算字符串常量的长度。

    复制代码
    /* Note:Your choice is C IDE */
    #include "stdio.h"
    #include "string.h";
    
    void main()
    {
        char str1[]="abe123";
        //获得字符串长度,中文占两位
        printf("
     %d",strlen(str1)); 
    }
    复制代码

    6

    更多函数请点击这里

    2.7、数组移动作业 P181

    复制代码
    /* Note:Your choice is C IDE */
    #include "stdio.h"
    void main()
    {
        //10
        int a[]={3,6,9,15,18,26,98,0,0,0},n,p=7,i;
        
        //输入要插入的数
        scanf("%d",&n);
        
        //确定位置
        for(i=0;i<7;i++)
        {
            if(a[i]>=n)//如果数组中的当前数与n相同
            {
                p=i;
                break;
            }
        }
        
        //移动
        for(i=7;i>=p;i--)
        {
            a[i]=a[i-1];
        }
        
        //插入
        a[p]=n;
        
        //显示结果
        for(i=0;i<8;i++)
        {
            printf("%d 	",a[i]);
        }
        
    }
    复制代码

    三、二维数组

    一组数组是线性的,二组数组是平面的

    复制代码
    /* Note:Your choice is C IDE */
    #include "stdio.h"
    void main()
    {
        int a[3][3],i,j;
        
        a[0][0]=1;
        a[0][1]=5;
        
        for(i=0;i<3;i++)
        {
            for(j=0;j<3;j++)
            {
                a[i][j]=i*j;
            }
        }
        
        for(i=0;i<3;i++)
        {
            for(j=0;j<3;j++)
            {
                printf("a[%d][%d]=%d 	",i,j,a[i][j]);
            }
            printf("
    ");
        }
    }
    复制代码

    复制代码
    /* Note:Your choice is C IDE */
    #include "stdio.h"
    void main()
    {
        int a[3][3]={{1,2,3},{4,5,6},{7,8,9}},i,j;
       
        for(i=0;i<3;i++)
        {
            for(j=0;j<3;j++)
            {
                printf("a[%d][%d]=%d 	",i,j,a[i][j]);
            }
            printf("
    ");
        }
    }
    复制代码

    四、上课示例与作业源文件下载

    点击下载

  • 相关阅读:
    织梦dedecms模板中调用wordpress文章
    dede标签云(TAG)随机颜色及大小的实现方法
    将dedecms数据转换到wordpress博客程序中的方法分享
    织梦dedecms模板中友情链接标签底层模板样式调整
    织梦dede增加自定义属性四步实现
    dedecms专题分节点自由单独调用的实现方法
    DedeCMS 批量取消审核文档的实现方法
    织梦dedecms 5.1 utf-8版本英文修改方法
    织梦dedecms后台自定义字段里添加style全部都变成st<x>yle的解决教程
    Android 获取第三方软件的包名、入口Activity的类名
  • 原文地址:https://www.cnblogs.com/Jansens520/p/6538211.html
Copyright © 2020-2023  润新知