优化这段代码 int SerialAdd(int serialid,int i,int j) { float val; val = gRunPara.COMMS_SerialInfo[serialid][i].val; if (j == 0) { val += pow(10,0); } else { if (val < 10) { if (j== 1) val += pow(10,j-1); } else if (val >= 10 && val < 100) { if (j== 1) val += pow(10,j); else if (j== 2) val += pow(10,j-2); } else if (val >= 100 && val < 1000) { if (j== 1) val += pow(10,j+1); else if (j== 2) val += pow(10,j-1); else if (j== 3) val += pow(10,j-3); } else if (val >= 1000 && val < 10000) { if (j== 1) val += pow(10,j+2); else if (j== 2) val += pow(10,j); else if (j== 3) val += pow(10,j-2); else if (j== 4) val += pow(10,j-4); } else if (val >= 10000 && val < 100000) { if (j== 1) val += pow(10,j+3); else if (j== 2) val += pow(10,j+1); else if (j== 3) val += pow(10,j-1); else if (j== 4) val += pow(10,j-3); else if (j== 5) val += pow(10,j-5); } else if (val >= 100000 && val < 999999) { if (j== 1) val += pow(10,j+4); else if (j== 2) val += pow(10,j+2); else if (j== 3) val += pow(10,j); else if (j== 4) val += pow(10,j-2); else if (j== 5) val += pow(10,j-4); else if (j== 6) val += pow(10,j-6); } } gRunPara.COMMS_SerialInfo[serialid][i].val = val; }
时间: 2023-07-15 16:15:20 浏览: 122
这段代码可以通过使用数组和循环来进行优化,避免大量的重复代码。你可以将每个条件的结果存储在一个数组中,然后使用循环来访问该数组并计算出结果。这样可以使代码更简洁、可读性更高。以下是一个可能的优化版本:
```
int SerialAdd(int serialid,int i,int j) {
float val = gRunPara.COMMS_SerialInfo[serialid][i].val;
int powArray[] = {0, 1, 10, 100, 1000, 10000, 100000};
int powIndex = min(j, 6) + 1;
val += pow(10, powArray[powIndex]);
gRunPara.COMMS_SerialInfo[serialid][i].val = val;
}
```
这个版本使用了一个powArray数组来存储每个指数的结果。同时,使用了min函数来确保不会访问数组越界。这个版本还将条件判断转换为一个数组索引,使得代码更容易理解和维护。
相关问题
优化这段代码 if(gRunPara.COMMS_SerialInfo[serialid][i].val == 0) LCD_DisString((i%9)+1, 15, (char *)"退出"); else if(gRunPara.COMMS_SerialInfo[serialid][i].val == 1) LCD_DisString((i%9)+1, 15, (char *)"101平"); else if(gRunPara.COMMS_SerialInfo[serialid][i].val == 2) LCD_DisString((i%9)+1, 15, (char *)"101非"); else if(gRunPara.COMMS_SerialInfo[serialid][i].val == 3) LCD_DisString((i%9)+1, 15, (char *)"104"); else if(gRunPara.COMMS_SerialInfo[serialid][i].val == 4) LCD_DisString((i%9)+1, 15, (char *)"CDT"); else if(gRunPara.COMMS_SerialInfo[serialid][i].val == 5) LCD_DisString((i%9)+1, 15, (char *)"DNP3.0"); else if(gRunPara.COMMS_SerialInfo[serialid][i].val == 6) LCD_DisString((i%9)+1, 15, (char *)"MudBus"); else if(gRunPara.COMMS_SerialInfo[serialid][i].val == 7) LCD_DisString((i%9)+1, 15, (char *)"GSM"); else if(gRunPara.COMMS_SerialInfo[serialid][i].val == 8) LCD_DisString((i%9)+1, 15, (char *)"线损通讯");
可以将不同的 val 值对应的字符串保存在一个数组中,然后使用 val 值作为索引来获取对应的字符串,从而避免大量的重复代码。示例如下:
```
char* comms_strings[] = {"退出", "101平", "101非", "104", "CDT", "DNP3.0", "MudBus", "GSM", "线损通讯"};
LCD_DisString((i%9)+1, 15, comms_strings[gRunPara.COMMS_SerialInfo[serialid][i].val]);
```
优化这段代码 if (draw == k+1) { if( k == 0 ) { if (gRunPara.COMMS_SerialInfo[serialid][k].val<8) ++gRunPara.COMMS_SerialInfo[serialid][k].val; change = 1; } else if( k == 1 ) { if (gRunPara.COMMS_SerialInfo[serialid][k].val<9) ++gRunPara.COMMS_SerialInfo[serialid][k].val; change = 1; } else if( k == 2 || k == 7 || k == 18 ) { if (gRunPara.COMMS_SerialInfo[serialid][k].val<2) ++gRunPara.COMMS_SerialInfo[serialid][k].val; change = 1; } else if( k == 6 || k == 8 ) { if (gRunPara.COMMS_SerialInfo[serialid][k].val<2) ++gRunPara.COMMS_SerialInfo[serialid][k].val; change = 1; } else if( k == 3 || k == 13 || k == 14 || k == 16 || k == 20 || k == 21 ) { if (gRunPara.COMMS_SerialInfo[serialid][k].val<1) ++gRunPara.COMMS_SerialInfo[serialid][k].val; change = 1; } else if( k == 15 || k == 17) { if (gRunPara.COMMS_SerialInfo[serialid][k].val<2) ++gRunPara.COMMS_SerialInfo[serialid][k].val; change = 1; } else change = Lcd_Modify_Param(LCD_KEY_ADD,ALTER_SERI,UNIT_PUBLIC_MX6,serialid,k,j); }
可以考虑使用一个表格来简化这段代码,类似于以下形式:
```
k val_max val_step
--------------------------
0 8 1
1 9 1
2 2 1
3 1 1
...
```
其中,`val_max` 表示 `gRunPara.COMMS_SerialInfo[serialid][k].val` 的最大值,`val_step` 表示每次增加的步长。
然后可以用一个循环来遍历这个表格,根据 `k` 的值来判断应该采用哪一行规则进行处理。如果没有匹配到任何一行,再执行 `else` 分支。
这样就可以将原来的多个 `if-else` 分支简化为一个循环,使代码更加简洁和易于维护。
阅读全文