如何在C++控制台中绘制带对角线与对称轴的矩形?
解决矩形对角线绘制问题
你已经完成了矩形边框和对称轴的绘制,现在只需要补充对角线的判断逻辑就能实现需求啦!结合你提供的原始代码和老师指导后的最终版本,我来帮你梳理下完整的实现思路:
原代码分析
你最初的代码已经实现了矩形边框(通过p==1 || l==1 || l==d || s==p判断)和一条对称轴的绘制,但缺少对角线的核心判断条件:
#include <iostream> #include <stdio.h> #include <stdlib.h> #include <math.h> int main(int argc, char *argv[]) { int s,d; printf ("the length of the rectangle \n"); scanf ("%d",&s); printf ("width of the rectangle \n "); scanf ("%d",&d); int l; int p; int przekatna; for (p=1; p<=s; p++) { printf ("\n"); for (l=1;l<=d; l++) { if(p==1 || l==1 || l==d || s==p || p==((d+1)/2) ) printf("*"); else printf(" "); if ( l==(d)/2 && p!=((d+1)/2) && p!=1 && p!=s) printf("*"); else printf(""); } } return 0; }
对角线的核心逻辑
矩形的两条对角线满足行与列的线性比例关系,为了适配整数坐标的精度问题,需要用round函数来取整:
- 左上角到右下角的对角线:
l = p * round(d/s) - 右上角到左下角的对角线:
l = (s + 1 - p) * round(d/s)
把这两个条件加入到星号的判断逻辑中,就能在对应位置绘制出对角线了。
最终可运行代码
经过老师指导后,你已经完成了正确的实现,整理后的完整代码如下:
#include <stdlib.h> #include <math.h> int main() { int l; int p; int s; int d; printf ("the length of the rectangle \n"); scanf ("%d",&s); printf ("width of the rectangle \n "); scanf ("%d",&d); for (p=1; p<=s; p++) { printf ("\n"); for (l=1;l<=d; l++) { if(p==1 || l==1 || l==d || s==p || p==s/2 || l==l/2 || l==p*round(d/s) || l==(s+1-p)*round(d/s) ) printf("*"); else printf(" "); } } return 0; }
内容的提问来源于stack exchange,提问作者pakson
相关产品推荐
相关产品推荐

