一、某些预处理指令
#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;
}