Android_开发_Day4_头文件_宏定义_数组
Android_开发Day4头文件宏定义数组
目的:
学会头文件的使用,减少代码复杂的结构。
技术:
<1>头文件的类型:.h文件用于函数的声明,变量的定义,但是不能对变量赋值,因为没有给它分配内存。.c文件用于函数的具体实现,可以操作变量。
<2>++运算符和--运算符:i++表示先使用i的值再自增,而++i则是反过来的,--与++是一样的,只是加变减,需要注意的是,在使用++--的时候一定是先满足表达式或后满足表达式,不能先满足一部分表达式再加或减,再满足一部分表达式,这是不行的。
<3>如何使用头文件:1.创建.h文件 2.创建.c文件 3.在.c文件里导入.h文件 4.在使用的地方导入.h文件就可以了。
<4>头文件的相互引用:如果头文件之间出现了相互引用那么就会导致头文件之间的展开会进入死循环,解决办法就是用:
#ifndef
#define xxx_HHHHH
……代码块
#endif
<5>宏定义:将某个符号特定成某个值,比如:#define Π 3.14 意思是将Π这个符号用3.14代替。其中#ifdef #endif是C语言的条件编译。可以与宏定义联合使用,比如我们要测试某款软件时需要向控制台打印字符,但是正式软件是没有该功能的,因此可以用宏定义做一个开关,代码如下:
#include "stdafx.h"
#include "iostream"
//开关
#if 1
#define Log(x) printf(x)
#else
#define Log(x)
#endif
//#if和#endeif是联合使用的,有if就有endif.
int _tmain(int argc, _TCHAR* argv[])
{
Log("hello word!\n");
system("pause");
return 0;
}
<6>数组:需要储存多个同种类型的数据时我们需要用到数组,定义一个数组时需要为它分配内存空间,同时还必须知道数组的大小,初始化数组时可根据数据的多少自动调整数组的大小,同时数组的名字就是数组的首地址,因此在使用scanf时就不需要用&符号。
技术如何使用:
比如做一个进制转换器(十进制转二进制和十六进制),我们可以用除基取余法的基本思想来将其完成,但是由于余数需要用变量来储存,因此我们可以用数组来暂时保存一下结果,然后再将结果倒着输出出来。但是这样的方法有一点不足就是当位数超过数组的长度后将会面临出错的风险,因此我们可以采用另一种方法来,就是边算边输出,但是输出的数刚好是反的,因此我们可以倒着输出,先计算一下位数,然后用空格代替,最后用\r输出一次少一个空格最后没有空格时就完成了,具体代码如下:
首先我创建了五个函数:
void change_0101(int num)
{
int numi = num;
for (int i = 0; numi>=2; i++)
{
printf("\r该数的二进制为:");
calculate_01011(numi);
printf("%d", numi % 2);
numi = numi / 2;
}
printf("\r该数的二进制为:");
printf("%d", numi);
}
该函数是转二进制的函数
void calculate_01011(int num)
{
for (int i = 1; pow(2, i) <= num; i++)
{
printf(" ");
}
}
该函数是计算二进制的位数并打出相应的空格数的
void change_16(int num)
{
int numi = num;
for (int i = 0; numi >= 16; i++)
{
printf("\r该数的十六进制为:");
calculate_16(numi);
print_10_16(numi % 16);
numi = numi / 16;
}
printf("\r该数的十六进制为:");
print_10_16(numi);
}
该函数是转十六进制的
void calculate_16(int num)
{
for (int i = 1; pow(16, i) <= num; i++)
{
printf(" ");
}
}
该函数的计算十六进制的位数并打上相应的空格的
void print_10_16(int num)
{
if (num>=10)
{
printf("%c", 'A' + (num - 10));
}
else
{
printf("%d", num);
}
}
该函数是将十进制的写作变更成十六进制的写法的函数
接下来便是主函数:
int _tmain(int argc, _TCHAR* argv[])
{
int num = 0;
printf("请输入一个十进制数:");
scanf("%d", &num);
change_0101(num);
printf("\n");
change_16(num);
printf("\n");
system("pause");
return 0;
}
以上便是整个项目的代码。
实际使用效果:
![](https://img.haomeiwen.com/i18962565/f81ec617e9484dbf.png)
![](https://img.haomeiwen.com/i18962565/4ecaac0872f730e1.png)
总结:
打代码的人都要去反复的思考,或许此时你思考不出来,但换一个时间说不定灵感就来了,或是一个算法,又或是一个技巧,如果实在思考不出来换一条路或许又会有些不同呢。所以没有真正的天才,有的只是那些跟着程序走的“傻子”