一些C语言算法和技巧

C 语言在蓝桥杯算法竞赛中的实战技巧与经典题目解析 摘要:C语言因其高效性、准确性和底层控制能力成为蓝桥杯算法竞赛的首选语言。参赛者需掌握输入输出优化、内存管理、数据类型选择等实战技巧,并通过斐波那契数列、最大公约数、素数判断等经典题目熟练应用。关键点包括:使用位运算优化计算,避免递归重复开销,合理设计函数参数,以及应用二分查找等高效算法。竞赛中需注重代码效率与准确性,持续提升算法能力和C语言应用水平,以适应日益提高的竞赛难度。 阅读详情


1.不用第三变量,交换两个变量的方法:

  a = a ^ b;
  b = a ^ b;
  a = a ^ b;  //( a ^ b ) ^ a == b
或者
  a = a + b;
  b = a - b;
  a = a - b;// (a + b) - a == b
(注:以上两种方法不适应浮点型变量,表示方法和精度的原因)

2.计算一个变量里‘1’的个数:

f(char   x){ 
for(int   i=0;   x;   x   &=   x-1,i++); 
return   i; 
}

解释:假设 x 为 11010100

 x-1  为  11010011

      x & (x -1)为  11010000 ,到这里,我们发现结果不为零,且少了一个1。所以一次循环少个1,记录循环次数就行了。

 另外:一个数如果是2的n次幂,那么他一定是1后加一些0,如1000, 1000000等。

那么  x & (x - 1)的结果为零,那么他就是2的n次幂。


3.让函数宏像函数一样使用

/*以下是宏定义*/

#define MACRO(c)\
do {\
  if( c )\
  {\
         printf("hello!");  
  }\
}while(0)   //do-while语句while()后应有一个“;”,这里有意舍去且条件永远为假,即内部语句只能执行一遍

/*以下是宏使用*/

MACRO(1);//此处的“;”看上去像语句末尾的分号,其实它是宏定义末尾舍去的分号,这样的do-while宏使用起来就像函数了

4.不用 if 的类 if 语句

(void)(DLL_Exit == DLL_ZERO_INFO && fputs("Size of address record is zero.\n\n", stderr));

利用“&&”运算符的短路原理,前边表达式的值能够决定后边的能否执行到。

5.花括号可以使宏得到返回值

会返回最后一条语句的赋值结果

#define even(x)\
({\
  int y = x;\
  (2*(y/2) == y ? y:y+1);\
})

http://topic.youkuaiyun.com/u/20091126/20/e05094ad-448e-41a6-a199-f3ca93d40c43.html?seed=222192752&r=79877196#r_79877196

另一说,花括号是为了替换do{}while(0)语句,使宏使用后能加“;”。

猜想,花括号所代表的语句块的值就是花括号内最后一条语句的值。(待验证)

6. 函数型宏定义返回值

#include <stdio.h>

#define even(x, ret)\

{\  

int y = x;\

ret = (2*(y/2) == y ? y:y+1);\

}

int main(void)

{  

int ret;

int num = 10;  

even(num, ret);  

printf("num = %d\n", ret);  

num++;  

even(num, ret);  

printf("num = %d\n", ret);  

return 0;

}

KMP算法详解与C语言实现 1.什么是KMP算法 KMP算法是一种字符串匹配算法,即在主字符串查找模式字符串(简单来说就是判断一个字符串中是否包含另一个字符串),是C语言库函数strstr的算法优化。 2.通常情况下的字符串匹配 首先来讲一讲不用KMP算法的字符串匹配,便于理解之后KMP算法,和KMP算法的优势。 首先建立一个字符串作为主串: char a[]="abcbabc"; 这个字符串在内存中是这样存放的: 假设现在要在这个字符串中查找字符串"ba"。即我们也要定义一个数组来放"bca"。b[2]="bc. 阅读详情

相关推荐

C语言在开发中的应用博文汇总贴

自己成长的同时也不要忘记带动别人一起成长,前人种树,后人乘凉,我宁愿做种树人,让读者乘凉。 以下有些文章时间比较长了,这里只做汇总,随着个人能力的提升,不可否认有些文章中描述的有不正确或者不恰当的地方,如果您看到了,请帮忙指出,感谢您对我的支持。 一、C基础 关于C语言中输出格式 C语言指针分析(一) 浅谈C之精华—指针 C语言关键字static的绝妙用途 C语言结构体深度剖析 对嵌入式开发C语言...

Bruce.yang的嵌入式之旅 9665

C语言学习笔记:(四)算法的5种表示方法

本节所用例题为计算5!。例如:S1:令t=1;S2:令i=2;S3:使t与i相乘,将结果放在t中;S4:使i值加1;S5:若i的值不大于5,返回重新执行S3、S4与S5;若i的值大于5,则算法结束。以上算法便为计算5!算法的自然语言描述。用自然语言表示算法虽通俗易懂,但文字冗长,易出现歧义。故除了简单问题外,一般不使用自然语言表示算法。(1)流程图是用一些............

m0_69010926的博客 1万+

C语言与算法学习完整指南

C语言是一种广泛使用的计算机编程语言,以其高效性和灵活性而闻名。它主要用于系统软件开发,同时在应用软件领域也有重要影响。C语言的特点是接近硬件操作,强调对内存的控制,这使得它成为嵌入式开发和性能要求高的应用首选语言。函数是一组一起执行一个任务的语句。在C语言中,函数的定义包含了返回类型、函数名、括号内的参数列表以及函数体。函数的声明告诉编译器函数的名称、返回类型和参数列表。声明是必要的,它使得函数可以在主调函数之前被定义或实现。以下是一个函数定义与声明的例子:// 函数声明");

weixin_36289742的博客 986

C语言---比较常用的运算技巧

本文介绍几个常用的计算技巧实现某一目的 大部分来源于内核的实现 1、小计算宏 1.#define OFFSET(type, member) (size_t)&( ((type*)0)->member) 2.#define ROUND_UP(x, align) ((x + (align - 1)) &~ (align - 1)) 3.#define swap(a, b) \ do { typeof(a) __tmp = (a); (a) = (b); (b) =

weixin_41884251的博客 1071

C语言基础:五种经典排序算法的实现

冒泡排序是一种简单直观的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复进行直到没有再需要交换,也就是说该数列已经排序完成。希尔排序(Shell Sort)是基于插入排序的一种算法,由Donald Shell于1959年提出。它通过将原始数据分成若干子序列,分别进行直接插入排序,从而达到减少数据交换的次数、加快排序速度的目的。希尔排序的关键在于间隔序列的设定,通常被称作增量序列。大O表示法是一种用来描述算法运行时间或空间需求的函数关系。

weixin_35752122的博客 1081

C语言编程:256字节内实现Cordic算法与fbdev图形显示

本文还有配套的精品资源,点击获取 简介:本教程介绍如何在仅限256字节的空间内使用C语言进行编程,并涉及Cordic算法、Linux操作系统和fbdev驱动程序的应用。C语言以其高效和灵活性著称,而Cordic算法特别适合资源有限的环境。Linux内核提供了fbdev驱动程序,允许直接控制显示内存,适合嵌入式开发。本教程将指导读者如何在Linux环境下使用C语言和fbdev...

weixin_42592399的博客 1275

C语音常用的位运算技巧

针对通信领域常用的位运算

全栈工程师 499

常用算法设计方法(C语言)

对于有志参加ACM的同学非常有参考价值,对于一般工程师来说也可以得到一些启发. 是我以前学习的资料, 非常珍贵

C语言算法题的一些技巧

1.floor函数为向下取整函数。floor(x)可以返回X的整数部分。如果想实现四舍五入的效果,可以用floor(x+0.5)。 2.π的表示方法。const double pi = 4.0 * atan(1.0)。atan为反正切函数。 3.想要获取程序的执行时间,可以用clock()函数,除以clocks_per_sec得到的值以秒为单位。注意需要引入time.h头文件。 但是这个时间会...

qq_40249441的博客 754

c语言的经典算法(很经典的算法技巧)

该文件中包含了很多关于c语言的知识和技巧,对提高c语言水平大有裨益

jmeter问题系列:Begin size 0 is not equal to fixed size 5

Begin size 0 is not equal to fixed size 5 ,问题的解决

雨水的早晨的博客 2415

C语言中的逻辑运算符、位运算符及其应用技巧

是时候总结一波逻辑运算符和位运算符了。。。。。。 其实是更想总结一下位运算符的使用小技巧来体现其实用之处 逻辑运算符 &amp;&amp; 与:A &amp;&amp; B,只要有一个条件为false,则结果为false || 或:A || B,只要有一个条件为true,则结果为true ! 非:!A,若A为false,则结果为true。若A为true ,则结果为false 位运算符 &...

ryanxw growing 6147

10分钟快速搭建OpenClaw(基于Windows+飞书)

OpenClaw 是一款功能强大的 AI 智能体工具,能够帮助用户管理邮件、日历等日常事务。本文详细介绍了在 Windows11 系统上安装和配置 OpenClaw 的完整步骤,包括 Node.js 环境搭建、Git 安装、OpenClaw 部署以及飞书机器人创建与对接。通过简单的命令行操作和可视化界面配置,用户可以快速完成 AI 助手部署,实现智能办公自动化。文中还提供了飞书机器人权限设置等关键环节的图文指引,帮助用户轻松完成系统集成。

Hello, New World! 2927

c语言工业控制算法大全,初学C语言程序设计的基本方法和技巧

C语言是一门应用最广泛的基础高级编程语言,有很多语言都是由它发展而来的,所以学习好C语言之后再学习任何一种编程语言都会轻松上手。无论哪所大学的计算机专科和本科都需要学习C语言《,C语言程序设计》是计算机专业的一门必修课程,也是学习如何编程的入门课。初学C语言的人都会觉得C语言不好学,感到无从下手。其实,按照我们现在的教学大纲和教学要求,只要同学们掌握一些方法,多读,多写,克服心理上畏难情绪,C语言...

weixin_39801158的博客 768

STM32CubeMX实战:FreeRTOS内存管理5种方案全解析(附heap_4避坑指南)

本文深入解析了STM32CubeMX环境下FreeRTOS的5种内存管理方案(heap_1到heap_5),重点介绍了heap_4的优化策略与避坑指南。通过对比分析各方案的特点、性能指标及适用场景,帮助开发者根据项目需求选择最优内存管理策略,提升嵌入式系统开发效率与稳定性。

aa123的博客 620

SpringBoot实战(二十八)集成 Collabora Online 实现在线编辑

SpringBoot实战(二十八)集成 Collabora Online 实现在线编辑

ACGkaka的博客 6984

C语言编程技巧200例——在实例中学习C语言

C语言编程技巧200例——在实例中学习C语言 去发现同类优质开源项目:https://gitcode.com/ 欢迎来到本资源仓库!这里为您提供了《C语言编程技巧200例,在实例中学习C语言》的全面例子集合。本资源旨在帮助您通过实例学习C语言编程的技巧与方法,使您在编程实践中能够更加熟练地应用C语言。 本资源包含200个精心挑选的编程实例,涵盖了C语言的基础知识、数据结构、算法、文件操作、网络编程...

gitblog_06733的博客 269

【软碟通 | UltraISO】刻录光盘教程(制作U盘启动盘)

前言 今天老师说办公室的电脑有点卡,让我给重新安装一个 Windows 7 系统。于是就用软碟通(UltraISO)在 U 盘上刻录了一个 Windows 7 镜像,然后给老师重装了系统。顺便把制作 U 盘启动盘的教程也分享给大家。 软件 UltraISO v9.7.1.3519:点击跳转(密码:dd2k) 教程 将 U 盘插到电脑上,然后鼠标右击选择格式化(制作启动盘必须格式化) 点击文件-打开 选择下载好的系统镜像(如:Windows 7) 点击启动-写入硬盘映像 选择硬盘

XavierJ的博客 2万+

c语言算法作用,非常全的C语言常用算法

《非常全的C语言常用算法》由会员分享,可在线阅读,更多相关《非常全的C语言常用算法(39页珍藏版)》请在人人文库网上搜索。1、精品、基本算法1交换(两量交换借助第三者)例 1 、任意读入两个整数,将二者的值交换后输出。main()int a,b,t;scanf(%d%d,&a,&b);printf(%d,%dn,a,b);t=a; a=b; b=t;printf(%d,%dn,a,...

weixin_42189611的博客 447

测试用例设计工具大盘点:总有一款适合你

本文旨在帮助测试工程师、开发人员及团队管理者快速了解主流测试用例设计工具的特点、适用场景和选择逻辑。覆盖工具类型包括传统文档工具、开源管理工具、商业集成平台及新兴AI工具,范围涵盖中小团队到大型企业的不同需求。本文从“测试用例设计的痛点”切入,用生活案例解释核心概念;接着按“工具类型”分类盘点主流工具(附优缺点对比表);再通过“小团队/中大型团队/敏捷团队”等真实场景教你选工具;最后展望AI等未来趋势,帮你“一次学透,终身受用”。

项目管理的博客 1592

buildozer

/home/chenyang/new_kivy/.buildozer/android/platform/build/build/other_builds/hostpython3/desktop/hostpython3/Lib

东方佑 16万+

C语言100个算法经典例题

C语言100个算法经典例题 去发现同类优质开源项目:https://gitcode.com/ 欢迎来到这个资源下载仓库!这里我们提供了《C语言100个算法经典例题》的资源文件,完全免费共享给需要的你。 本资源包含100个精选的C语言算法例题,覆盖了C语言编程的基础到进阶内容,旨在帮助编程爱好者通过实战练习来提升编程技巧和理解算法原理。 不论你是C语言的初学者,还是有一定基础的编程爱好者,这些例题都...

gitblog_06773的博客 457

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

C语言实战105例源码介绍:实战技巧与算法的宝库

C语言实战105例源码介绍:实战技巧与算法的宝库 去发现同类优质开源项目:https://gitcode.com/ 在编程语言的世界中,C语言以其高效、灵活和底层的特性,一直占据着举足轻重的地位。为了帮助编程爱好者深入掌握C语言的实战应用,开源社区贡献了一个极具价值的资源——C语言实战105例源码。下面,我们将详细解析这个项目的核心功能、技术细节和应用场景。 项目介绍 C语言实战105例源码是一组...

gitblog_06764的博客 971

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

c语言切面条对折的次数n,c语言竞赛和算法总结

《c语言竞赛和算法总结》由会员分享,可在线阅读,更多相关《c语言竞赛和算法总结(22页珍藏版)》请在人人文库网上搜索。1、目录1. 10进制转2进制-42. 啤酒和饮料 -53. 圆的面积 -54. 切面条 -65. 01字符串 -76. 字母图形 -87. 求n 个数的最大值,最小值,和-98. 杨辉三角形 -109. (2个数)公约数,公倍数(三种算法)-1110. 歌手大奖赛 -1611. ...

weixin_42415491的博客 412

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

C 语言中的常见算法有哪些?C 语言中的常见数据结构有哪些?

算法是一系列解决问题的步骤或方法。它是一个精确的指令序列,用于解决特定问题或执行特定任务。算法可以描述为一种计算模型,它可以在有限的时间内将输入转换为输出。在C语言中,常见的算法包括:线性搜索算法:顺序查找或线性查找是一种简单的搜索算法,它按顺序逐个查找目标元素。二分搜索算法:二分查找算法是一种高效的搜索算法,它通过将有序数组分成两半并比较目标值来逐步缩小搜索范围。冒泡排序算法:冒泡排序算法是一种简单的排序算法,它通过多次比较和交换相邻元素来将最大的元素逐步移动到最后。

fengyege的博客 469
上一篇: 学而时习之--I2C总线
下一篇: Math.Inc 分型图形库数学函数头文件 数字函数+向量和矩阵函数+仿射变换
tinyhare
博客等级 码龄15年 11粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值