我想知道这段代码是如何工作的,
我无法理解这里的算法
#include <stdio.h>
void Draw(int length) {
int cons = 3,L,l;
length -= length % 2;
L = length + cons;
for (int i = 0; i < L; i++){
l = cons + i * 2 - 2 * (i == L / 2) - 4 *(i - L / 2) * (i > L / 2);
for (int j = 0; j < (L-l) / 2; j++) {
printf(" ");
}
for (int j = 0; j < l; j++) {
if (j == l/2)
printf("|");
else if (i == L/2)
printf("=");
else if (j == 0 && i < L/2 || (j == l - 1 && i > L / 2))
printf("/");
else if (j == l - 1 && i < L / 2 || (j == 0 && i > L / 2))
printf("\\");
else
printf("*");
}
printf("\n");
}
}
int main(int argc, char **argv) {
Draw(5);
printf("\n");
Draw(6);
return 0;
}
我希望明确澄清这一特定行:
l = cons + i * 2 - 2 * (i == L / 2) - 4 *(i - L / 2) * (i > L / 2);
此代码应打印此形状
或者你可以在这里测试代码 https://ideone.com/49mtT4
我为给您带来的任何不便而道歉
答案 0 :(得分:0)
因为您已将所有变量定义为int并且您正在对布尔值进行计算,所以它会自动将该布尔值转换为int。 (i == L / 2)和(i> L / 2)这两个值输出1或0.将true视为1,将false视为0.然后您可以理解函数
l = cons + i * 2 - 2 * (i == L / 2) - 4 *(i - L / 2) * (i > L / 2);
尝试下载
#include <stdio.h>
#include <iostream>
using namespace std;
void Draw(int length) {
int cons = 3,L,l,test;
length -= length % 2;
L = length + cons;
for (int i = 0; i < L; i++){
l = cons + i * 2 - 2 * (i == L / 2) - 4 *(i - L / 2) * (i > L / 2);
test = (i == L / 2);
cout << "(i == L / 2):" << test<< endl;
test = (i > L / 2);
cout << "(i > L / 2):" << test<< endl;
}
}
int main(int argc, char **argv) {
Draw(5);
return 0;
}
将输出
(i == L / 2):0
(i > L / 2):0
(i == L / 2):0
(i > L / 2):0
(i == L / 2):0
(i > L / 2):0
(i == L / 2):1
(i > L / 2):0
(i == L / 2):0
(i > L / 2):1
(i == L / 2):0
(i > L / 2):1
(i == L / 2):0
(i > L / 2):1