C语言——小细节和小知识5

发布时间:2023年12月20日

一、某些预处理指令

#ifdef

#else

#endif

这三个预处理指令用于条件编译,#ifdef用于判断某个宏是否被定义过,#endif用于结束#ifdef的作用范围,例如:

#include <stdio.h>

#define MAX 10

int main()
{
#ifdef MAX
	printf("max");
#else
	printf("none");
#endif
	return 0;
}

这段代码是一个简单的C程序,包含了条件编译的指令。它展示了预处理器指令 `#ifdef` 和 `#else` 的使用。在C语言中,预处理器在编译之前运行,处理这些指令。

代码中定义了一个宏 MAX,它的值设置为10。

在 main 函数中:

1. #ifdef MAX?是预处理器指令,用于检查是否定义了宏 MAX。
2. 如果 MAX?被定义了(正如代码中所做的),编译器会包含 #ifdef?和 #endif?之间的代码,程序将打印出 max。
3. 如果 MAX?没有被定义,则编译器会寻找 #else?部分(如果有的话),并包含 #else?和 #endif?之间的代码,程序将打印出 none。

在这个特定的例子中,因为 MAX?在程序的一开始就被定义了,所以预处理器会确保 printf("max");?这行代码包含在编译过程中,而 printf("none");?这行代码会被忽略。

因此,当编译并运行这个程序时,控制台将显示 max。

二、求1/1 - 1/2 + 1/3 - 1/4 + ... +1/99 - 1/100

#include <stdio.h>

int main()
{
	int i = 1;
	double sum = 0;
	for (i = 1; i <= 100; i++)
	{
		if (i % 2 == 1)
		{
			sum = sum + 1.0 / i;
		}
		else
		{
			sum = sum - 1.0 / i;
		}
	}
	printf("%lf",sum);
	return 0;
}

这一个版本for循环中有判断语句,效率较低,每一次循环都要进行判断。

#include <stdio.h>

int main()
{
	int i = 1,j = 1;
	double sum = 0;
	for (i = 1; i <= 100; i++)
	{
		sum = sum + j * (1.0 / i);
		j = -j;
	}
	printf("%lf",sum);
	return 0;
}

这样就可以不用判断语句,可以提升效率。

三、求十个数中最大数

#include <stdio.h>

int main()
{
	int num = 0,i = 0,max = 0;
	scanf("%d",&max);//要将输入的第一个输入的数作为默认最大值
	//如果将最大值默认设为0的话,如果后面十个数都是负数,那就是这个预设的0是最大值了,而输入的十个之中没有0,结果就错了
	//将输入的第一个数作为默认最大值是防止全是负数的情况
	for (int i = 0; i < 9; i++)//接着接收后面的九个数字
	{
		scanf("%d",&num);
		if (num > max)//只要有更大的数就把他赋值给max
		{
			max = num;
		}
	}
	printf("%d",max);
	return 0;
}

四、数组的大小

数组在定义时就确定了大小

可以是以下两种:声明大小(初始化和不初始化都行)

int arr[10];
int arr[10] = {1};

这样数组的大小就是10个int型数据的大小。

不声明大小(必须初始化)

int arr[] = {1,2,3,4,5,6,7,8,9,10};

在不声明大小的情况下,数组大小是通过初始化的内容决定的,例如这里的初始化数据是10个,那数组的大小就是10个整型数据的大小。

数组的大小确定后就只能存储这么多数据,如果存储超过数组大小数量的数据,栈就会被破坏。

#include <stdio.h>

int main()
{
	int arr[10] = {0};
	for (int i = 0; i < 20; i++)
	{
		arr[i] = i;
	}
	return 0;
}

五、经典九九乘法表

#include <stdio.h>

int main()
{
	int i = 1, j = 1;
	for (i = 1; i <= 9; i++)
	{
		for (j = 1; j <= 9; j++)
		{
			if (i >= j)
			{
				printf("%d*%d=%-2d ",j,i,i * j);
			}
		}
		printf("\n");
	}
	return 0;
}

六、栈区、堆区、静态区

文章来源:https://blog.csdn.net/stewie6/article/details/135038577
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。