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

心得感悟

对于宏定义的使用,我还只是一知半解,不过在日后学习过程中回头看,应该会有新的理解和感悟吧。封装和数组的使用的确让程序变得更加简洁方便,在练习数组的使用时,了解到了知识盲区,如果给一个数组赋初值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
#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
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

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.进制转换程序的实现效果

【C语言学习】十进制转二进制和十六进制|函数封装|数组等基础要点讲解_第1张图片
进制转换演示1.gif
【C语言学习】十进制转二进制和十六进制|函数封装|数组等基础要点讲解_第2张图片
进制转换演示2.gif

你可能感兴趣的:(【C语言学习】十进制转二进制和十六进制|函数封装|数组等基础要点讲解)