新闻详情

新闻详情

首页 / 资讯中心 / 详情

C语言 预处理

发布时间:2026/7/8 13:54:28
C语言 预处理
预处理头文件引入, “” 两者差距一个是本地库另一个是文件内宏简单的文本替换 一般是用大写用 \ 连接下一行和函数传参不同简单的文本替换预处理指令在编译之前就完成报错在用的一行不会是宏定义#if #endif 先执行if语句否则执行下面防止头文件重复引用#pragma once#ifndef _*H#define _*H…#endif联合和结构体不同关键字不同union struct结构体是每个成员单独占据内存段对齐补齐联合是所有成员同时用内存段使用联合和宏判断系统是小端存储还是大端#include stdio.h #include stdbool.h #define test(name) union\ {\ int n;\ unsigned char c;\ } name{1}; { } int main() { test(u); bool a (u.c1); printf(%s\n,a?小端大端) return 0; }枚举enum types{a,b}和bool 作用功能相同。用来存放相同逻辑的标志符for(int i2;isqrt(n);i)递归函数中调用自己本身递推循环函数调用后面无代码 山上有个老和尚故事#include stdio.h #include windows.h void ditui(int n) { Sleep(1000); printf(从前有一个老和尚\n); ditui(n); } int main() { ditui(1); // n随便取值不影响循环 // 如果对n进行次数限制等同于 for 循环 }案例1求阶乘#include stdio.h int dituix(int n) { if (n 1) return n * dituix(n - 1); else return 1; } int main() { #if 0 // 使用循环 int n, sum; printf(请输入阶乘数字%d\n, n); scanf(%d, n); for (int i 1; i n; i) { sum * i; } #else // 使用递推 int n; while(1) { printf(请输入阶乘数字); scanf(%d, n); dituix(n); printf(输入阶乘数字为%d 阶乘为%d\n, n, dituix(n)); } } #endif2:斐波那契void fbnq(int n) { if(n3) retun 1; else return fbnq(n-1)fbnq(n-2); }递归先出去再回来#include stdio.h #include windows.h void ditui(int n) { if(n5) { sleep(1000); printf(从前有一个老和尚\n); ditui(n1); printf(循环结束回来\n); } } int main() { ditui(1); //让刚开始 n 1 ,以此完成递归 }案列1汉诺塔: 将A上面的圈按大小放在C上1个圈 A-C2个圈 A-B,A-C,B-C,3个圈 A-C ,A-B,C-B,A-C,B-A,B-C,A-C思路 将最下面和上面的全部分为两部分看待#include stdio.h int cnt 0; void hannuo(int n); void hannuota(int n, char began, char temp, char end); int main() { int i; while(1) { printf(请输入搬运圈个数:); scanf(%d, i); hannuo(i); printf(搬运圈%d个需要%d次:\n,i,cnt); } return 0; } void hannuo(int n) { hannuota(n, A, B, C); } void hannuota(int n, char began, char temp, char end) { if (n 0) { hannuota(n-1, began, end, temp); //将上部分先放在C上,然后放在B printf(搬运顺序为%c -- %c\n,began, end); cnt; hannuota(n-1, temp, began, end);//将上部分从B放在A上,然后放在C } }栈与队列栈区栈结构管理的数据队列 先进后出后进先出函数传参队列 先进先出案例数组实现栈#include stdio.h #include stdlib.h #include string.h int* stack; int len; void initstack(); //初始化栈 void tral(); // 遍历一下 void enterstack(int data); // 入栈 void exitstack(); // 出栈 int main() { initstack(); for (int i 0; i 10; i) { enterstack(i); tral(); } for (int i 0; i 9; i) { exitstack(); tral(); } free(stack); } void initstack() { stack NULL; len 0; } void tral() { printf(stack[%d]:, len); for (int i 0; i len; i) { printf(%d, stack[i]); } printf(\n); } void enterstack(int data) { int* ptem malloc(sizeof(int)*(len1)); //开内存 if (stack) { memcpy(ptem, stack, sizeof(int) * len); //复制已有的 free(stack); // 释放 } stack ptem; stack[len] data; len; } void exitstack() { if (len 0) --len; }多文档编程全局变量在.h 中定义 导致引用头文件变量重复使用解决方案1在.c 中定义然后使用 extern 扩展到其他.c文件中static 限制变量被拓展2不用全局变量使用参数传递
网站建设 高端定制 企业官网