我要成为嵌入式高手之1月24日第九天!!

学习笔记

字符串总结(一维字符型数组)

1、字符数组

2、字符串

        最终计算机中,是按照字符数组的形式(数组的特点)存储

        字符串最终一定是以‘\0’作为结束标志

3、定义一个字符数组

        char s[10] = {};

        char s[10] = " ";

4、练习

     gets

                也可以用scanf("%s",s); 、

                区别:scanf不能输入带空格的字符串

     puts

                也可以用printf("%s\n",s);

     strlen

        -- 统计字符串的长度 

     strcpy

        -- 字符串的拷贝

      strcat

        -- 字符串拼接 

        strcat (目标字符串, 原字符串)

5、字符串大小比较

练习1:字符串大小比较

#include 

int main()
{
    int i = 0;
    char s1[20];
    char s2[20];
    gets(s1);
    gets(s2);

    while ( (s1[i] != 0) || (s2[i] != 0) )
    {
        if (s1[i] == s2[i])
        {
            ++i;
            printf("s1 = s2\n");
            break;
        }else if (s1[i] > s2[i])
        {
            printf("max is: ");
            puts(s1);
            break;
        }else 
        {
            printf("max is: ");
            puts(s2);
            break;
        }
    }

    return 0;
}

 strcmp

        比较两个字符串

        用法:strcmp (s1,s2)

        返回值:实际上是结束位置上的差值

                      >0---s1>s2

                      =0---s1 = s2

                      <0---s1

二维数组 

c语言中二维数组的本质 —— 一维(一维数组的元素类型  又一个数组类型)

二维数组的用处

int a[3][4]

        ①二维数组语法角度:行数可以省略,列数不能省略,省略的时候必须给值

练习2:

        定义一个二维数组 int [a] [b]; 初始化,找出能被3整除的数

#include 

int main()
{
    int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
    int i,j;

    for (i = 0; i < 3; ++i)
    {
        for(j = 0; j < 4; ++j)
        {
            if (a[i][j]%3 == 0)
            {
                printf("a = %d ",a[i][j]);
            }
        }
    }

    putchar('\n');
    return 0;
}

 练习3:

        int[3][4] ;从键盘输入值,要求求出,二维数组边上的和

#include 

int main()
{
    int a[3][4];
    int i,j;
    int sum;


    for (i = 0; i < 3; ++i)
    {
        for(j = 0; j < 4; ++j)
        {
            scanf("%d",&a[i][j]);
            if ((i == 0) || (j == 3) || (j == 0) || (i == 2))
            {
                printf("a[%d][%d] = %d\n",i,j,a[i][j]);
                sum += a[i][j];
            }
        }
    }
    printf("sum = %d",sum);


    return 0;
}

练习4

        转置矩阵

#include 

int main()
{
    int  a[4][4] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
    int i,j,t;

    for (i = 0; i < 4; ++i)
    {
        for(j = i+1; j < 4; ++j)
        {
                t = a[i][j];
                a[i][j] = a[j][i];
                a[j][i] = t;
        }
    }

    for (i = 0; i < 4; ++i)
    {
        for(j = 0; j < 4; ++j)
        {
            printf("%d  ",a[i][j]);
        }
        putchar('\n');
    }


    return 0;
}

练习5(最难)

我要成为嵌入式高手之1月24日第九天!!_第1张图片

        魔方阵(奇数维)

#include 
#include 

int main()
{
    int i,j,m,n,x,g;
    scanf("%d",&n);
    int a[n][n];

    
    bzero (a,n*n*sizeof(int));
    i = 0;//第0行
    j = n/2;

    a[0][n/2] = 1;

    for(x = 2; x <= n*n; ++x)
    {
        
        m = i;
        g = j;//记录开始要走的位置

        j++;
        i--;

        if (i < 0)
        {
            i = n-1;
        }

        if (j > n-1)
        {
            j = 0;
        }

        if (a[i][j] != 0)
        {
            i = m;
            j = g;
            ++i;
            if (i > n-1)
            {
                i = 0;
            }
        }
        a[i][j] = x;
    }
    
    for (i = 0; i < n; ++i)
    {
        for (j = 0; j < n; ++j)
        {
            printf("%d   ",a[i][j]);
        }
        putchar('\n');
    }
    

    return 0;
}

二维字符型数组

定义,输入,输出:

练习1:

        输入三个字符串,找出最大的字符串

#include 
#include 

int main()
{
    int n = 0;
    printf("Input a num: ");
    scanf("%d",&n);
    char s[n][10];
    getchar();

    int i = 0;
    for (i = 0; i < n; ++i)
    {
        gets(s[i]);
    }

    char max[10];
    strcpy(max,s[0]);

    for (i = 1; i < n; ++i)
    {
        if (strcmp(s[i],max)>0)
        {
            strcpy(max,s[i]);
        }
    }

    printf("max = %s\n",max);

    return 0;
}

练习2:

        输入3个字符串,排序

#include
#include
#include

int main()
{
    int n;
    printf("Input a mum: ");
    scanf("%d",&n);
    char a[n][10];
    char b[n][10];
    

    getchar();
    
    int i = 0;
    for (i = 0; i < n; ++i)
    {
        gets(a[i]);
    }
    
    int j = 0;
    for (i = 0; i < n; ++i)
    {
        char t[10];
        strcpy(t,a[i]);
        int j = i;
        while (j > 0 && strcmp(b[j-1],t) > 0)
        {
            strcpy(b[j],b[j-1]);
            --j;
        }
        strcpy(b[j],t);
    }

    for (j = 0; j < n; ++j)
    {
        printf("%s\n",b[j]);
    }

    return 0;
}

总结

1、数组概念

2、数组定义

        一维整型

        一维字符型

        二维整型

        二维字符型

3、重点

        a、二维数组本质

        b、二维整型数组操作 ——访问具体的元素a[i][j]

        c、二维字符型数组

                放多个字符串

                char s[3][10];

4、要掌握

        a、排序算法

                选择

                冒泡

                插入

                查找

        b、字符串

                strlen

                strcpy

                strcat

                strcmp

函数

难度在思想 

函数的定义

类型标识符 函数名(形式参数)// 函数头——规定了一下函数的形式

{

       函数体——实现函数具体功能的代码

}

1、怎么定义一个函数?

        ①功能要明确

        ②准备数据-->处理数据-->输出结果

eg:实现两个数求和?

作业

1、用冒泡排序法对一个二维字符型数组进行排序

#include 
#include 
#include 

int main()
{
    int n,i,j;
    printf("Input a num: ");
    scanf("%d",&n);
    char a[n][10];
    getchar();
    
    for (i = 0; i < n; ++i)
    {
        gets(a[i]);
    }
    putchar('\n');

    char t[10];
    for (j = 1; j < n; ++j)
    {
        for (i = 0; i < n-j; ++i)
        {
            if (strcmp(a[i],a[i+1]) > 0)
            {
                strcpy(t,a[i]);
                strcpy(a[i],a[i+1]);
                strcpy(a[i+1],t);
            }
        }
    }

    for (i = 0; i < n; ++i)
    {
        printf("%s\n",a[i]);
    }

    return 0;
}

2、用选择排序法对二维字符型数组进行排序

#include 
#include 

int main()
{
    int i,j,n;
    char t[10];
    printf("Input a num: ");
    scanf("%d",&n);
    char a[n][10];
    getchar();

    for (i = 0; i < n; ++i)
    {
        gets(a[i]);
    }
    putchar('\n');

    for (i = 0; i < n-1; ++i)
    {
        for (j = i+1; j < n; ++j)
        {
            if (strcmp(a[j],a[i]) < 0)
            {
                strcpy(t,a[i]);
                strcpy(a[i],a[j]);
                strcpy(a[j],t);
            }
        }
    }

    for (i = 0; i < n; ++i)
    {
        printf("%s\n",a[i]);
    }

    return 0;
}

3、在二维字符型数组里查找(二分查找法)

你可能感兴趣的:(linux,c语言)