优化这段代码 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 浏览: 39
这段代码可以通过使用数组和循环来进行优化,避免大量的重复代码。你可以将每个条件的结果存储在一个数组中,然后使用循环来访问该数组并计算出结果。这样可以使代码更简洁、可读性更高。以下是一个可能的优化版本:
```
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 (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); }
可以将一些重复的代码提取出来,避免代码冗余,例如可以将以下代码块提取出来:
```
if (gRunPara.COMMS_SerialInfo[serialid][k].val < x) {
++gRunPara.COMMS_SerialInfo[serialid][k].val;
change = 1;
}
```
然后在原代码中使用该代码块进行替换,可以得到下面的优化代码:
```
if (draw == k+1) {
if (k == 0) {
change = Lcd_Modify_Param(LCD_KEY_ADD, ALTER_SERI, UNIT_PUBLIC_MX6, serialid, k, j);
} else if (k == 1 || k == 6 || k == 8) {
if (gRunPara.COMMS_SerialInfo[serialid][k].val < 2) {
++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 == 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 {
if (gRunPara.COMMS_SerialInfo[serialid][k].val < 8 && k == 0 || gRunPara.COMMS_SerialInfo[serialid][k].val < 9 && k == 1) {
++gRunPara.COMMS_SerialInfo[serialid][k].val;
change = 1;
} else {
change = Lcd_Modify_Param(LCD_KEY_ADD, ALTER_SERI, UNIT_PUBLIC_MX6, serialid, k, j);
}
}
}
```
优化这段代码 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]);
```