美文网首页
【C语言学习】十进制转二进制和十六进制|函数封装|数组等基础要点

【C语言学习】十进制转二进制和十六进制|函数封装|数组等基础要点

作者: 榆野铃爱 | 来源:发表于2019-08-01 22:51 被阅读0次

    心得感悟

    对于宏定义的使用,我还只是一知半解,不过在日后学习过程中回头看,应该会有新的理解和感悟吧。封装和数组的使用的确让程序变得更加简洁方便,在练习数组的使用时,了解到了知识盲区,如果给一个数组赋初值0(或不赋值),则里面的所有元素的值都为0。经过几天的练习,我明显感觉到我编程的速度比以前快了,准确地说应该是程序逻辑思维更强了。果然编程还是需要自己思考多一点,想明白每个程序的原理,慢慢地就会发现自己不知何时就掌握了程序的逻辑思维。


    1. 目的

    • 复习float,int,long,char类型用法
    • 复习比较运算符
    • 理解掌握数据类型转换
    • 掌握自定义头文件和实现文件的使用
    • 掌握数组的使用

    2. 技术

    • char类型的使用
    • 比较运算符的注意事项
    • ++ -- 的运用
    • 自定义头文件和实现文件
    • 封装
    • 解决“头文件互相引用出错”的问题
    • 数组的基本使用
    • 写一个程序,用数组储存1-100的数,并输出它们的和
    • 写一个程序,实现由十进制转二进制,十进制转十六进制

    3. 技术的使用

    • char类型的使用

    char型数值可用%d,%c打印,用%d打印出来则为ASCII码

    • 比较运算符的注意事项

    比较运算符有 > < == != || &&
    && 前为假,后面不执行
    | | 前为假,后面执行

    i = 10;
    j = 20;
    if(i < 20 && j++ >10){…};//前为假,j++不执行
    运行后 j = 20
    if(i < 20 || j++ >10){…};//前为假,j++执行
    运行后 j = 21
    
    • ++ -- 的运用

    a++ 表达式结束后才+1
    ++a 先+1,再运算

        int temp1 = 20;
        printf("1:%d\n",temp1++);
        printf("1:%d\n",temp1);
        //运行结果为20,21
        //a++ 当表达式结束之后 在+1
        //++a;先+1 再去运算
    
    • 自定义头文件和实现文件

    .h 函数的声明,变量的声明(不能赋值)
    .c 具体实现 实现函数的功能 操作变量

    1.新建一个头文件

    void login(void);
    

    2.新建一个实现文件

    #include"ATMapp.h"
    #include<stdio.h>
    #include "stdafx.h"
    void login(void) {
        printf("************************\n\n");
        printf("         登录\n\n");
        printf("************************\n\n");
    }
    
    • 封装
      1.创建.h文件
      2.创建.c文件
      3.在.h文件导入.c文件
      4.在使用的地方导入.h文件
    #include "stdafx.h"
    #include"ATMapp.h"
    #include<iostream>
    int main()
    {
        login();
        return 0;
    }
    
    • 解决“头文件互相引用出错”的问题
      解决办法:使用宏定义
      宏定义优点:
      1.给特定数值一个特定的意义
      2.便于管理
    #ifndef
    #define
        代码块(.c)
    #endif
    
    • 数组的基本使用

    什么时候用?
    答:需要存储多个同种类型数据时。
    1.能存储数据 就必须有内存
    2.如何定义一个数组同时为他分配内存
    3.数组定义必须明确知道数组大小
      a.初始化几个就是几个
    4.数组的名字就是数组的首地址(第一个元素的地址)

    int main(int argc, char const *argv[])
    {
        //int a = 10;
        //定义一个数组 里面存的都是float的值 可以存4个数据
        //4*4byte=16byte
        float score[]={29,235,235,245};
    
        //访问第一个元素的值  0....n-1
        score[0];
    
        //获取第一个元素的地址
        &score[0];
    
        //使用%p打印地址
        printf("%p\n",&score[0]);
        printf("%p\n",score);
        //b.在定义时明确指定数组的大小
        int temp[5];
        //c.明确指定大小 并且初始化部分数据
        int temp2[5] = {1,2};
        
        //如何使用数组
        //访问 通过下标来访问 0 —— n-1
        printf("%d\n",temp2[0] );
    
        //赋值
        temp2[0] = 6;
        return 0;
    }
    
    • 写一个程序,用数组储存1-100的数,并输出它们的和
      for循环实现
    int main()
    {
        int num[100];
        int i = 0;
        int sum = 0;
        for (i = 0; i < 100; i++) {
            num[i] = i + 1;
            sum += num[i];
        }
        printf("%d", sum);
        system("pause");
        return 0;
    }
    

    while循环实现

    int main()
    {
        int num[100];
        int i = 0;
        int sum = 0;
        while (i<100)
        {
            num[i] = i + 1;
            sum += num[i];
            i++;
        }
        printf("%d", sum);
        system("pause");
        return 0;
    }
    
    • 写一个程序,实现由十进制转二进制,十进制转十六进制

    先选一个十进制数计算,弄清楚它的运算顺序,再进行编写
    顺序:对原数字求余,并存入数组→原数字/2(/16)→到数组下一个位置
    十六进制有字母,在此用以下方法打印

    #include "stdafx.h"
    #include<iostream>
    
    int main()
    {
        int num1 = 0;
        int i = 0;
        int j = 0;
        int two[20];
        printf("【转换成二进制】\n");
        printf("请输入一个数字:");
        scanf_s("%d", &num1);
        while(1){
            two[i] = num1 % 2;
            num1 /= 2;
            if (num1 == 0) {
                break;
            }
            i++;
        }
        for (j=i; j >= 0; j--) {
            printf("%d", two[j]);
        }
        printf("\n\n");
    
        int num2 = 0;
        int m = 0;
        int n = 0;
        char six[20];
        printf("【转换成十六进制】\n");
        printf("请输入一个数字:");
        scanf_s("%d", &num2);
        while (1){
            six[m] = num2 % 16;
            num2 /= 16;
            if (num2 == 0) {
                break;
            }
            m++;
        }
        for (n=m; n >= 0; n--) {
            int k = six[n];
            if (k >= 10) {
                printf("%c", 'A' + k - 10);
                //'A'对应的ASCII码值为10
            }
            else
            {
                printf("%d", k);
            }
        }
        printf("\n\n");
        system("pause");
        return 0;
    }
    

    4.进制转换程序的实现效果

    进制转换演示1.gif 进制转换演示2.gif

    相关文章

      网友评论

          本文标题:【C语言学习】十进制转二进制和十六进制|函数封装|数组等基础要点

          本文链接:https://www.haomeiwen.com/subject/vryhdctx.html