• C语言练习代码


    概述

    本篇博客(笔记)主要是根据自己对编程语言和C编程语言的理解,总结复习所创作的,包括简单的概述和主要的实现代码。
    不同于另外一篇博客《关于编程.md》中介绍的内容 ,本篇博客主要是代码干货。

    常规操作

    1. 数据表达

    数据表达主要包括:量的概念,数据类型,数据运算,表达式 ,返回值,共5部分内容(目前暂且总结如此)。

    1.1 量

    1.1.1 常量

    常量是直接指定的字面量。
    示例代码段:

    /*
     *本段程序代理主要在于:量-常量的学习和使用
     */
    #include<stdio.h>
    int main(){
        printf("I am number:100
    ");    //通过printf函数,打印字符串常量,整型常量,转义字符(字符常量)
        return 0;
    }

    1.1.2 变量

    变量是某块约定大小(约定大小可以理解为数据类型)的内存区域的标签。
    变量=内存区域,变量值=内存存放值,变量地址=内存地址,变量声明=编译器开辟内存
    取值操作=取内存地址,解引地址=取内存值
    示例代码段:

    /*
     *本段程序代理主要在于:量-变量的学习和使用
     */
    #include<stdio.h>
    int main(){
        //整型变量
        int int_var_001 = 100;
        printf("int_var_001 is :%d
    ",int_var_001);
        //字符变量
        char char_var_001 = 'A';
        printf("char_var_001 is :%c
    ",char_var_001);
        //字符串变量
        char * string_var_001 = "liwanliang";
        printf("string_var_001:%s
    ",string_var_001);
        return 0;
    }

    1.2 数据类型

    编程语言的数据类型都可以分为两大类:基本数据类型,扩展数据类型(或者构造数据类型)
    同时任何数据都只有两种表现方式:数,字符,这是数据的基本组成元素。基本元素组成基本数据类型。
    C语言基本数据类型包括:整型,字符,字符串,枚举,空类型

    1.2.1 基本数据类型

    /*
     * 本程序段主要打印内置的数据类型,取值范围,最值等
     */
    #include<stdio.h>
    #include<limits.h>
    #include<float.h>
    int main(){
        printf("----------size------------
    ");
        printf("1 byte,sizeof(char):%d
    ",sizeof(char));
        printf("2 byte,sizeofof(short int):%d
    ",sizeof(short));
        printf("4 byte,sizeofof(int):%d
    ",sizeof(int));
        printf("4 byte,sizeofof(float):%d
    ",sizeof(float));
        printf("8 byte,sizeofof(long int):%d
    ",sizeof(long));
        printf("8 byte,sizeofof(double):%d
    ",sizeof(double));
        printf("--------max and min------
    ");
        printf("char max:%d,char min:%d
    ",CHAR_MAX,CHAR_MIN);
        printf("unsign char max:%d,char min:%d
    ",UCHAR_MAX,0);
        printf("short max:%d,short min:%d
    ",SHRT_MAX,SHRT_MIN);
        printf("unsign short max:%d,short min:%d
    ",USHRT_MAX,0);
        printf("int max:%d,int min:%d
    ",INT_MAX,INT_MIN);
        printf("unsign int max:%ld,int min:%ld
    ",UINT_MAX,0);
        printf("long max:%ld,long min:%ld
    ",LONG_MAX,LONG_MIN);
        printf("unsign long max:%lld,long min:%ld
    ",ULONG_MAX,0);
        printf("FLT_MAX:%f,FLT_MIN:%f
    ",FLT_MAX,FLT_MIN);
        printf("DBL_MAX:%f
    ,DBL_MIN:%f
    ",DBL_MAX,DBL_MIN);
        return 0;
    }

    1.2.2 扩展数据类型

    /*
     * 扩展数据类型:数组
     * 整型数组的定义,初始化,值运算
     * 字符数组和字符串
     */
    #include<stdio.h>
    #define SIZE 4
    int main(){
        //未初始化整型数组
        int int_array_001[SIZE];
        //初始化整型数组
        int int_array_002[SIZE] = {1,2,3,4};
        //循环进行数组初始化
        for ( int i = 0; i < SIZE; i++ )
        {
            int_array_001[i] = i;
            printf("int_array_001[%d] is : %d
    ",i,i);
        }
        //循环输出数组值
        for ( int i = 0; i < SIZE; i++ )
        {
            printf("int_array_002[%d] + 100 = %d
    ",i,i+100);
        }
        //字符数组
        char char_array_001[SIZE] = {'l','i','w','l'};
        for ( int i = 0; i < SIZE; i++ )
        {
            printf("%c",char_array_001[i]);
        }
        printf("
    ");
        //字符数组初始化
        char char_array_002[SIZE];
        for ( int i = 0; i < SIZE; i++ )
        {
            char_array_002[i] = 'A';
            printf("char_array_002[%d]:%c
    ",i,char_array_002[i]);
        }
        //字符串
        char *name = "liwanliang";
        //printf("%s
    ",name);
        char char_array_003[sizeof("liwanliang")];
        //printf("%d
    ",sizeof("liwanliang"));
        for ( int i = 0; i < sizeof("liwanliang"); i++ )
        {
            printf("%c ",*name++);
        }
        printf("
    ");
    
        return 0;
    }

    扩展数据类型-数组

    /*
     * 本代码段主要学习二位数组
     * 主要是整型,字符,字符串型二维数组
     */
    #include<stdio.h>
    #define SIZE_C 2
    #define SIZE_K 2
    int main(){
        //int型二维数组,未赋初值
        int int_array_001[SIZE_C][SIZE_K];
        int i,j;
        for ( j = 0; j < SIZE_K; j++ )
        {
            for ( i = 0; i < SIZE_C; i++ )
            {
                int_array_001[i][j]=i+j;
                printf("int_array_001[%d][%d]:%d
    ",j,i,int_array_001[i][j]);
            }
        }
        //int型二位数组
        printf("
    ");
        int int_array_002[SIZE_C][SIZE_K] = {{1,2},{3,4}};
        int m,n;
        for ( n = 0; n < SIZE_K; n++ )
        {
            for ( m = 0; m < SIZE_C; m++ )
            {
                printf("int_array_002[%d][%d]:%d
    ",n,m,int_array_002[n][m]);
            }
        }
        //char型二维数组,未赋初值
        printf("
    ");
        char char_array_001[SIZE_C][SIZE_K];
        int k,t;
        for ( t = 0; t < SIZE_K; t++ )
        {
            for ( k = 0; k < SIZE_C; k++ )
            {
                char_array_001[k][t] = 'A'+k+t;
                printf("char_array_001[%d][%d]:%c
    ",t,k,char_array_001[k][t]);
            }
        }
        return 0;
    }

    扩展数据类型-结构体

    /*
     * 本段代码主要用于学习结构体的实践
     * 结构体是基于基本数据结构扩展的数据类型
     * 因为数组也是数据类型,相互结合就会存在结构体数组和数组结构体的概念
     * 结构体实际上相当于自己定义了一个静态类型数据类型
     */
    #include<stdio.h>
    int main(){
    /*
     * 结构体内部只用于定义数据类型,不能初始化
     * 定义数据类型知识告诉编译器其存储结构
     */
        struct struct_001{
            //ID
            unsigned int id;
            //字符串型
            char *name;
            //int型
            int age;
            //字符型
            char sex;
        };
    
        struct struct_001 str_liwl_001 = { 9, "liwanliang", 28, 'M' };
        //重命名struct_001数据类型
        //typedef struct struct_001 str_001;
        //声明变量
        //str_001 str_liwl_001;
        //str_001 str_liwl_001 = { 0,"liwanliang01",28,'M'};
        printf("str_liwl_001.id:%d
    ",str_liwl_001.id);
        printf("str_liwl_001.name:%s
    ",str_liwl_001.name);
        printf("str_liwl_001.age:%d
    ",str_liwl_001.age);
        printf("str_liwl_001.sex:%c
    ",str_liwl_001.sex);
        printf("
    ");
    
        //结构体数组.其初始化可以在声明时进行,也可以单独进行(for循环)。
        struct struct_001 struct_array_001[3] = {{0,"liwanliang01",21,'M'},{1,"liwanliang02",22,'F'},{2,"liwanliang03",23,'N'},};
        int i = 0;
        for ( i = 0; i < 3; i++ )
            printf("%d,%s,%d,%c
    ",struct_array_001[i].id,struct_array_001[i].name,struct_array_001[i].age,struct_array_001[i].sex);
        //结构体元素包括数组,结构体
        struct struct_002 {
            int int_array_001[3];
            struct struct_001 struct_liwl_01;
            struct struct_001 struct_liwl_02[3];
        };
        struct struct_002 struct_liwl_002 = { {1,2,3},{0,"liwanliang1",21,'M'}, };
        printf("%d
    ",struct_liwl_002.int_array_001[2]);
        printf("%d,%s,%c
    ",struct_liwl_002.struct_liwl_01.id,struct_liwl_002.struct_liwl_01.name,struct_liwl_002.struct_liwl_01.sex);
    
        return 0;
    }

    2. 控制结构

    2.1 条件控制

    /*
     * 本程序片段主要学习控制结构-条件控制
     * 条件控制
     * 是对if语句后的(条件)表达式的返回值进行真值判断,根据不同的真值结果执行不同的语句模块
     * if 语句的三种模型:
     * 1.如果,那么
     * 2.如何就,否则就
     * 3.嵌套
     */
    #include<stdio.h>
    int main(){
        //if 基本原理:表达式结果为真时执行.大多是条件表达式,很少是量(常量或者变量),或者运算表达式
        if ( ! 0 ) //表达式结果非零,执行语句
            printf("This line cat be print,because of !0
    ");
        if ( 0 ) //表达式结果零,不执行
            printf("This line can't be print
    ");
        if ( 1 )
            printf("1
    "); //非零值执行
    
    
        //如果,那么 | 单条件,单分支
        int int_var_001 = 100;
        //if ( 1 )
        if ( int_var_001 > 1 )
            printf("int_var_001:%d > 1
    ",int_var_001);
        printf("
    ");
    
        //如果就,否则就 | 单条件,双分支
        if ( int_var_001 > 101 )
            printf("int_var_001:%d > 101
    ",int_var_001);
        else
            printf("int_var_001:%d < 101
    ",int_var_001);
        printf("
    ");
        //如果,就;否则如果,就;否则如果,就;否则,就 | 单条件,多分支
        if ( int_var_001 > 50 )
            printf("int_var_001:%d >= 100
    ",int_var_001);
        else if ( 50 < int_var_001 < 100 )
            printf("50 < int_var_001:%d < 100
    ",int_var_001);
        else if ( int_var_001 >= 100 )
            printf("int_var_001:%d >= 100
    ",int_var_001);
        else
            printf("int_var_001:%d < 50
    ",int_var_001);
        //如果:如果,就:就 | 嵌套
        if ( int_var_001 > 50 )
        {
            printf("int_var_001:%d > 50
    ",int_var_001);
            if ( int_var_001 > 80 )
            //{
                printf("int_var_001:%d > 80
    ",int_var_001);
            //}
        }
        else
        //{
            printf("int_var_001:%d < 50
    ",int_var_001);
        //}
        printf("
    ");
        /*多个条件的情况*/
        int int_var_002 = 200;
        int int_var_003 = 300;
        //如果,那么 | 多个条件,单分支
        if ( int_var_003 > int_var_002 && int_var_001 > 50 )
        {
            printf("int_var_003:%d > int_var_002:%d
    ",int_var_003,int_var_002);
            printf("int_var_003:%d - int_var_002:%d = %d
    ",int_var_003,int_var_002,int_var_003 - int_var_002);
        }
        //如果就,否则就 | 多个条件,双分支
        if ( int_var_003 < int_var_002 || int_var_001 != 100 )
            printf("int_var_003:%d < intt_var_002:%d 或者 int_var_001 = %d
    ",int_var_003,int_var_002,int_var_001);
        else
            printf("判断失败
    ");
        //嵌套 | 多个条件,多分支
        if ( int_var_003 < int_var_002 && int_var_001 == 100 )
            printf("首个条件判断成立
    ");
        else if ( int_var_003 == 300 && int_var_002 == 200 && int_var_001 == 100 )
            printf("第二个条件判断成立
    ");
        else
            printf("判断失败
    ");
        // 三元表达式:等价于双分支
        printf("%d
    ",int_var_003 > int_var_002 ? int_var_003 : int_var_002);
        // swtich语句: 等价于多分支
        switch (int_var_003 - int_var_002) { //switch后跟表达式:赋值表达式,运算表达式,条件表达式,逻辑表达式等
            case 1: //case是表达式的返回值
                printf("1
    ");
                break;
            case 10:
                printf("10
    ");
                break;
            case 100:
                printf("100
    ");
                break;
            default: //无匹配值时的默认值
                printf("no
    ");
        }
        // 条件跳转和返回
        int int_var_004 = 0;
        int int_var_005 = 5;
        for ( int_var_004 = 0; int_var_004 < 10; int_var_004++ )
        {
            if ( int_var_004 == int_var_005 )
                return; //结束函数,退出(本段代码会直接跳出主函数,不执行Last line
                //break; //跳出循环,执行Last line
                //continue; //跳过本次循环,执行Last line
            printf("run at:%d
    ",int_var_004);
        }
        printf("Last line
    ");
        return 0;
    }

    2.2 循环控制

    #include<stdio.h>
    int main(){
        /*for*/ //根据条件遍历一次
        int int_var_001 = 0;
        for ( int_var_001 = 0; int_var_001 < 10; int_var_001++ )
        {
            //printf("int_var_001:%d
    ",int_var_001);
            printf("int_var_001:%d,是%c
    ",int_var_001,int_var_001%2?'A':'B');
        }
        printf("
    ");
    
        /*while*/ //先遍历条件判断,后操作
        int int_var_002 = 10 ;
        while ( int_var_002 != 0 )
        {
            printf("int_var_002:%d
    ",int_var_002);
            int_var_002--;
        }
        printf("
    ");
        /*do-while*/ //先操作,后遍历条件判断
        int int_var_003 = 10;
        do {
            printf("int_var_003:%d
    ",int_var_003);
            int_var_003--;
        } while ( int_var_003 != 0 );
    
        return 0;
    }

    指针操作

    /*
     * 本代码段主要学习指针内容
     */
    #include<stdio.h>
    int main(){
        /*
        *数据类型指针
        */
    
        //量
        ////常量指针
    
        ////变量指针
        //////整型变量指针
        int int_a = 100;
        int *p_int_a = &int_a; //*表示指针的声明
        printf("%d
    ",*p_int_a); //*表示解引指针=获取内存值
        //////字符变量指针
        char char_a = 'A';
        char *p_char_a = &char_a;
        printf("%c
    ",*p_char_a);
        //////字符串变量指针
        char *string_a = "liwanliang";
        char **p_string_a = &string_a;
        printf("%s
    ",*p_string_a);
        printf("
    ");
    
        ////数组指针
        //////整型数组指针
        int array_001[4] = {1,2,3,4};
        int *p_array_001 = array_001; //数组名就是数组首地址,也是第一个元素的地址
        /*上行代码等效 int *p_array_001 = &array_001[0] */
        printf("array_001[2]:%d
    ",*(p_array_001+2));
        int i001 = 0;
        for ( i001 = 0; i001 < 4; i001++ ) //for循环体中只有一行语句时,括号可省略
        //{
            printf("array_001[%d]:%d
    ",i001,*p_array_001++); //*p_array_001++,指针运算,取值后指针+1xsize
        // printf("array_001[%d]:%d
    ",i001,array_001[i001]); //等效于上一行
        //}
        printf("
    ");
        //////字符数组指针,同上
        //////字符串数组指针
        char *array_002[3] = {"lwl","liwl","liwanliang"};
        char **p_array_002 = array_002;
        int i002 = 0;
        for ( i002 = 0; i002 < 3; i002++ )
        //{
            printf("%s
    ",*p_array_002++);
        // printf("%s
    ",array_002[i002]); //等效于上一行
        //};
        ////二维数组指针
        //在二维数组中,一维数组可以看成是基本数据类型,关系同字符和字符串
        /*二维数组需要定义一个指向扩展类型的指针,而不是指向基本数据类型的指针*/
        //////整型二维数组
        int array_005 [4][4] = {{1,2,3,4},{5,6,7,8},{11,12,13,14},{15,16,17,18}};
        printf("%d,%d,%d,%d
    ",array_005,&array_005[0],&array_005[0][0],*array_005); //二维数组首地址的四种表示方式
        int (*p_array_005)[4] = array_005; //定义一个数组指针(基本数据类型指针,扩展数据类型指针),这里是扩展数据类型指针-数组指针
        printf("%d
    ",*(*(p_array_005+3)+1));
        int i004,i005 = 0;
        for ( i004 = 0; i004 < 4; i004++ )
        {
            for ( i005 = 0; i005 < 4; i005++ )
                printf("%d ",*(*(p_array_005+i004)+i005));
        }
        printf("---------
    ");
        //////字符串二维数组
        ////结构体指针
        struct struct_var_001{
            int id;
            char sex;
            char *name;
        }; //定义普通结构体
        struct struct_var_001 str_liwl_001 = {1,'M',"liwanliang"}; //声明结构体变量
        struct struct_var_001 *p_str_liwl_001 = &str_liwl_001;
        printf("%d,%c,%s
    ",p_str_liwl_001->id,p_str_liwl_001->sex,p_str_liwl_001->name); //不需要解引符号的取值操作
        printf("
    ");
    
        struct struct_var_002{
            int array_int_002[4];
            char array_char_002[4];
        }; //带数组元素的结构体
        struct struct_var_002 str_liwl_002 = {{1,2,3,4},{'A','B','C','D'}};
        struct struct_var_002 *p_str_liwl_002 = &str_liwl_002;
        printf("%d,%c
    ",p_str_liwl_002->array_int_002[3],p_str_liwl_002->array_char_002[3]); //数组还是以普通方式索引
        printf("
    ");
    
        struct struct_var_003{
            int array_int_003[4];
            int *p_array_int;
            char array_char_003[4];
            char *p_array_char;
        }; //带指针元素的结构体
        struct struct_var_003 str_liwl_003 = {{1,2,3,4},NULL,{'A','B','C','D'},NULL};
        struct struct_var_003 *p_str_liwl_003 = &str_liwl_003;
        p_str_liwl_003->p_array_int = (int *)&(p_str_liwl_003->array_int_003); //将结构体的第一个元素地址赋值给第二个元素,需要强制类型转换
        p_str_liwl_003->p_array_char = (char *)&(p_str_liwl_003->array_char_003);
        int i003 = 0;
        for ( i003 = 0; i003 < 4; i003++ )
            printf("%d,%c
    ",p_str_liwl_003->p_array_int[i003],p_str_liwl_003->p_array_char[i003]);
        printf("
    ");
        for ( i003 = 0; i003 < 4; i003++ )
            printf("%d,%c
    ",*(p_str_liwl_003->p_array_int)+i003,*(p_str_liwl_003->p_array_char)+i003);
        ////函数指针
        ////指针的指针
    
        return 0;
    }

    参考教程:
    http://c.biancheng.net/cpp/html/2930.html
    https://blog.csdn.net/jhcconan614/article/category/6486327

  • 相关阅读:
    JavaScript if 条件语句
    JavaScript while 循环
    JavaScript for 循环
    JavaScript 字典
    JavaScript 数组
    JavaScript 函数
    JavaScript 定时器
    JavaScript 字符串操作
    CEF js调用C#封装类含注释
    多网卡的环境下的发包
  • 原文地址:https://www.cnblogs.com/liwanliangblog/p/9937750.html
Copyright © 2020-2023  润新知