chatGPT答: |
8v6.cn |
以下是一个示例代码,可以实现上述要求:
```c
#include <stdio.h>
int main() {
int size, shape;
printf("请输入三角形的大小:");
scanf("%d", &size);
printf("请选择三角形的形状:\n");
printf("1. 正实心三角形\n2. 倒实心三角形\n3. 正空心三角形\n4. 倒空心三角形\n");
scanf("%d", &shape);
switch (shape) {
case 1: // 正实心三角形
for (int i = 0; i < size; i++) {
for (int j = 0; j <= i; j++) {
printf("* ");
}
printf("\n");
}
break;
case 2: // 倒实心三角形
for (int i = size - 1; i >= 0; i--) {
for (int j = 0; j <= i; j++) {
printf("* ");
}
printf("\n");
}
break;
case 3: // 正空心三角形
for (int i = 0; i < size - 1 ;i++){
putchar(' ');
}
putchar('*');
putchar('\n');
int k=2;
while(k<size){
int m=size-k+1,n=k-2;
while(m>0){
putchar(' ');
m--;
}
putchar('*');
while(n>0){
putchar(' ');
n--;
}
putchar('*');
k++;
putchar('\n');
}
k=2;
while(k<size){
int m=k,n=size-k;
while(m>0){
putchar(' ');
m--;
}
putchar('*');
while(n>1){
putchar(' ');
n--;
}
if(k!=size-1) {
putchar('*');
}
k++;
putchar('\n');
}
for(int i=0;i<size;i++){
printf("* ");
}
break;
case 4: // 倒空心三角形
for (int i = size - 1; i > 0 ;i--){
int k=i,m=size-i;
while(m>0){
printf(" ");
m--;
}
printf("*");
while(k>2){
printf(" ");
k--;
}
if(i!=1) {
printf("*");
}
else{
for(int j=0;j<size-2;j++){
printf("* ");
}
}
printf("\n");
}
for(int i=0;i<size;i++){
printf("* ");
}
break;
default:
break;
}
return 0;
}
```
该代码中使用了 `switch` 来根据用户选择的形状进行不同的处理。其中,正实心三角形和倒实心三角形比较简单,只需要按照规律打印出相应数量的 `*` 就可以了。而正空心三角形和倒空心三角形稍微复杂一些,需要分别考虑每一行打印哪些字符。
注意,在打印正/倒空心三角形时,最后一行需要特殊处理,因为它不需要空心。因此,在打印最后一行时,需要根据形状选择是否打印 `*` 或者 `*` 和空格的组合。
另外,为了使输出更加美观,代码中还使用了一些额外的空格和换行符。
|