Day 11 宏定义和宏函数 条件编译 类型转换 数组

 1.宏定义和宏函数

(1)宏定义

宏函数的本质是对源文件进行替换

#define MAX 100

先声明一个宏,然后再main函数中使用该宏

int main()
{
    printf("%d", MAX);
}

 宏变量也可以作为常量进行使用,并且它的值不允许改变

宏定义是C语言提供的三种预处理功能的其中一种,这三种预处理包括宏定义、条件包含、条件编译

(2). 宏函数

宏函数的本质还是源文件替换,但是可以传递参数

#define MAX(a, b) a > b ? a : b
int main()
{
    int max = MAX(1, 3);
}

上面的函数是个比较大小的宏函数,我们使用宏函数实先比使用函数实现的可以更加简洁

2.条件编译

如果我们的程序在多个文件中引入#include<stdio.h>,不会被多次引入,我们进入该头文件,可以看到前面的几行代码:

#ifndef _STDIO_H_
#define _STDIO_H_

这两行的意思是,如果没有宏_STDIO_H,那么他就会使用#define定义这个宏,如果宏定义了那么就不会重复引入头文件中的内容了

#ifdef 如果定义了
#ifndef 如果没定义


...
#endif 结束

我们观察一个#if的小例子

#include<stdio.h>
#define SIZE 120

int main()
{
#if SIZE > 100
	printf("1");
#elif SIZE > 50
	printf("2");
#else
	printf("0");
#endif

	return 0;		
		
 } 

宏定义一个常量,如果这个常量大于100则输出1,如果这个常量大于50小于100则输出2,其他情况输出0,这个和函数的if else ..if其实是一样的

但是我们知道所谓的条件编译是根据条件的不同,而进行选择性编译,即如果条件不满足,代码是不会被编译的,但是if-esle即便不满足条件也是会被编译的。

条件编译使用情况:

跨语言,比如C++和c语言;

跨平台,比如有的代码是在windows平台下,有的是在linux平台下的;

所以,条件编译可以跨语言跨平台使用,在我们需要在这种情况下编程,使用条件编译还是比较好的

3. 类型转换

(1)隐式转换:不同类型数据间混合运算,如果两个数据类型不同,如果你不进行强制转换,系统会根据一定的规律进行隐式转换,比如float和double,他们进行运算,结果就是float会自动转换成double,然后两个double进行运算,如果是int和float或double运算,那么int就会被转换成float或double进行运算,字符型与整形数据进行运算,会用字符的ASCLL码值进行运算,这些都是系统自动转换而成的

#include<stdio.h>

int main()
{
	int a = 20;
	float b = 10;
	
	printf("%f", a + b);
	
	
	return 0;
}

这个int和float进行运算,int会转换成float进行运算,最后结果是一个float型的输出 

(2)强制转换:我们可以在知道是什么数据类型进行运算的情况下,为了防止出现数据丢失,我们可以自行对数据进行强制类型转换,这样就能得到我们预期的结果

#include<stdio.h>

int main()
{
	char a = '10';
	int b;
	b = (int) a;
	
	printf("%d", b);
	
	return 0;
}

我对char进行强制类型转换,就可以用%d输出了

4. 数组

在C语言中,声明数组必须指定元素的类型和元素的数量,数组的大小必须是一个大于0的整数,类型是C语言的有效数据类型

我们可以逐个为数组进行赋值进行初始化

int array[5] = {0, 1, 2, 3, 4};

如果我们在后面的大括号内写了数值,[]内可以省略

如果[]内的数大于{}内的数量,则C语言会自动为后面的数组赋值0

做一个练习:

求一个数组中的最大值和最小值

#include<stdio.h>

int main()
{
	int array[5] = {0};
	printf("请输入五个数:\n");
	int i;
	for(i = 0; i < 5; i++)
	{
		scanf("%d", &array[i]);
	}
	int max = array[0];
	int min = array[0];
	for(i = 0; i < 5; i++)
	{
		if(max < array[i])
		{
			max = array[i];
		}
	}
	for(i = 0; i < 5; i++)
	{
		if(min > array[i])
		{
			min = array[i];
		}
	}
	printf("最大值为%d, 最小值为%d", max, min);
	
	return 0;	
} 

 我的想法是,先为数组赋值,然后用一个min和max分别去和其他的数字比,分别求出最大值最小值

总结:

今天学到了数组,就可以用数组解决之前很难解决的问题,学习了数组,就可以用单一变量去存储很多值,就可以最这些值批量操作,虽然初学有些难,有些抽象,但是我想再多练练还是可以有所收获

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值