//解法一:直接打印法(特别麻烦的) #include <stdio.h> // int main() { // char ch = 'w'; // scanf("%c\n",&ch); // for(int i = 0;i<6;i++) // { // switch(i) // { // case 1: // printf(" "); // printf(" "); // printf("%c\n",ch);break; // case 2: // printf(" "); // for(int j = 0;j<3;j++) // {printf("%c",ch);} // printf("\n");break; // case 3: // for(int j = 0;j<5;j++) // {printf("%c",ch);} // printf("\n");break; // case 4: // printf(" "); // for(int j = 0;j<3;j++) // {printf("%c",ch);} // printf("\n");break; // case 5: // printf(" "); // printf(" "); // printf("%c\n",ch);break; // default:break; // } // } // return 0; // } // //解法二:菱形拆分成三角形法(通法) // #include<stdio.h> // int main() // { // //取字符 // char ch = ' '; // scanf("%c\n", &ch); // int n = 5;//总行数,行数都为奇数 // int i = 1;//第几行数 // int j = 0;//计个数 // //总循环 // for (i; i <= n; i++) // { // if (i < (n - 1) / 2 + 1)//上三角形部分 // { // for (j; j<(n- (1 + (2 * (i - 1))))/2; j++)//打印空格,上三角行第i行的空格个数/2 // { // printf(" "); // } // j = 0; // for (j; j<(1+(2*(i-1))); j++)//打印字符,上三角第i行的字符个数 // { // printf("%c", ch); // } // j = 0; // } // if (i == (n - 1) / 2 + 1)//对称中线部分 // { // for (j; j < n; j++)//此时与字符数相等n=(1+(2*(i-1))) // { // printf("%c", ch); // } // j = 0; // } // if(i > (n - 1) / 2 + 1)//下三角形部分 // { // for (j; j < (1 + (2 * (i - 1))-n)/2; j++)//打印空格,下三角行第i行的空格个数/2,与上三角相反 // { // printf(" "); // } // j = 0; // for (j; j < (n - (1 + (2 * (i - 1)) - n)); j++)//打印字符,下三角第i行的字符个数,等于总数n-空格数 // { // printf("%c", ch); // } // j = 0; // } // printf("\n");//第i行打印完后换行 // } // return 0; // } //解法三:数组替换法(通法)) #include<stdio.h> #define N 5 //总行数总是奇数 int main() { //第一部分:先把空格数组创建出来 char ch = ' ';//先放空格 char arr[N + 1] = { "" };//用于存放空格 int a = 0;//判断用 while (a < N)//存空格进数组里 { arr[a] = ch; a++; if (a == N) arr[N] = '\0';//存放打印结束符 } scanf("%c\n", &ch);//取字符,把空格字符ch替换掉 //第二部分:设计打印菱形 //打印正三角:从空格数组中间向两旁替换字符,直到替换满 int i = 1;//行数 int mid = (N - 1) / 2;//中线 for (i; i <= (N + 1) / 2; i++) { arr[mid-(i-1)] = ch;//把字符放进空格数组 arr[mid+(i-1)] = ch;//同上 printf("%s\n", arr); } //打印倒三角:从字符数组两旁向中间替换空格 ch = ' ';//再次放入空格 int left = 0; int right = N - 1; for (i; i <= N; i++) { arr[left + (i - mid-2)] = ch; arr[right - (i - mid-2)] = ch; printf("%s\n", arr); } return 0; }