C语言的课程题,求大神解答,谢谢for(i=1;i<=n;i++){for(j=3*n-2;j>=i;j--){if(i==1||i==n&&j<=2*n-1+(n-i)||j==i||j==3*n-i-1) printf("*");Else printf(" "); }printf("\n"); } } for(j=1;j<=n;j++){for(i=n-j-1;i<=n;i++)printf(" ");if(j==1){for(i=1;i<=n+2*(n-1);i++)printf("*");printf("\n");}else if(j==n){for(i=1;i<=n;i++)printf("*");printf("\n");}else{for(printf("*"),i=2;i<=n+2*(n-j)-1;i++)printf(" ");printf("*\n"); } }以上两个程序片段均可绘出相同的图形,但是代码量和效率大不相同,请根据给定n=4画出对应图形并分析第一种的思路。
两个代码绘出的图形是相同的:
就是打印一个等腰梯形。
第一种代码明显简洁而且效率更高。
就是将这个等腰梯形的4条边分解成4条线段,分别根据各线段满足的关于n、i、j的关系式:
i=1
i=n且j≤3n-i-1
j=i
j=3n-i-1
满足上述关系式,打印*,不满足关系式,打印空格。
这种思路最直接,也最简便。