找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1281|回复: 14
打印 上一主题 下一主题
收起左侧

这串C语言代码能不能在优化一下?

[复制链接]
跳转到指定楼层
楼主
谢谢大虾

1.png (41.03 KB, 下载次数: 1)

1.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1109793 发表于 2024-10-4 14:26 | 只看该作者
BCD码放数组里面,然后弄个函数,把数组地址和数据传进去,里面用一个循环搞定,这样应该简化不少吧。
大概类似这种代码编译器好像也可以帮你简化。就是实际上出来的HEX并不大。
回复

使用道具 举报

板凳
ID:278457 发表于 2024-10-5 01:59 | 只看该作者
xiaobendan001 发表于 2024-10-4 14:26
BCD码放数组里面,然后弄个函数,把数组地址和数据传进去,里面用一个循环搞定,这样应该简化不少吧。
大 ...

最好还是用语法搞定
回复

使用道具 举报

地板
ID:579397 发表于 2024-10-5 03:46 | 只看该作者
本帖最后由 405616736 于 2024-10-5 23:30 编辑

int str[4]
        
if(aa==20)
        {
                aa=0;
                if(++temp==9999) temp=0;
                sprintf(str,"%04d",temp);        }


回复

使用道具 举报

5#
ID:1109793 发表于 2024-10-5 07:52 | 只看该作者
405616736 发表于 2024-10-5 03:46
int str[4]
       
if(aa==20)

你这看起来简化了,编译出来可不一定吧
回复

使用道具 举报

6#
ID:592807 发表于 2024-10-5 08:08 | 只看该作者
405616736 发表于 2024-10-5 03:46
int str[4]
       
if(aa==20)

将if判断语句那里换成==就是正解。
回复

使用道具 举报

7#
ID:1109793 发表于 2024-10-5 09:12 | 只看该作者
405616736 发表于 2024-10-5 03:46
int str[4]
       
if(aa==20)

而且你这个sprintf输出的字符,不是BCD码吧。这样要是显示到比如数码管上面还得再处理一下吧。
回复

使用道具 举报

8#
ID:579397 发表于 2024-10-5 14:41 | 只看该作者
黄youhui 发表于 2024-10-5 08:08
将if判断语句那里换成==就是正解。

手快写漏了
回复

使用道具 举报

9#
ID:624769 发表于 2024-10-5 23:28 | 只看该作者
你要优化什么?
优化 C 语句看上去的简洁程度?
还是代码执行效率?
变量的占用量?
还是排版上毫无意义的一大堆括号?
回复

使用道具 举报

10#
ID:278457 发表于 2024-10-6 04:57 | 只看该作者
xiaobendan001 发表于 2024-10-5 07:52
你这看起来简化了,编译出来可不一定吧

我的意思是IF能不能同时判断AA,BB。这样代码量就会很少
回复

使用道具 举报

11#
ID:278457 发表于 2024-10-6 04:59 | 只看该作者
188610329 发表于 2024-10-5 23:28
你要优化什么?
优化 C 语句看上去的简洁程度?
还是代码执行效率?

我要C语句,简洁程度。
回复

使用道具 举报

12#
ID:879348 发表于 2024-10-6 10:25 | 只看该作者
千百十个的运算做成一个函数,程序看上去会简洁点
回复

使用道具 举报

13#
ID:1109793 发表于 2024-10-6 13:27 | 只看该作者
shenqiwei 发表于 2024-10-6 04:57
我的意思是IF能不能同时判断AA,BB。这样代码量就会很少

不懂同时怎样判断。把BCD那部分弄个函数,就很简洁了。

  1. uchar bcd[4],bcd2[4];
  2. void ibtd(uint i,uchar* mem){ //取余法获得BCD码
  3. uchar j;
  4. for(j=2;j<255;j--){                          
  5.         mem[j]=i%10;
  6.     i=i/10;
  7.     }   
  8. }
复制代码
回复

使用道具 举报

14#
ID:401564 发表于 2024-10-7 10:52 | 只看该作者
循环用取模表达式,代码字母不可能不会少,但行数变少了
temp = (temp + 1) % 10000;
变量aa和bb如果是循环变化,同样也可以用取模
回复

使用道具 举报

15#
ID:1134818 发表于 2024-10-27 19:37 | 只看该作者
1.去掉只有一句的if的括号
2.去掉没有用的if,比如12行、17行两对
3.把aa和bb写成a[0]和a[1],其他对应也写成数组,用个for
4.4个位也可以用数组+for
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表