打印对称的X。
该代码实现了一个菱形图案的绘制程序。程序通过三个函数分工合作:fun()控制整体流程,fun1()生成图案的每一行(处理左右对称的点星排列),fun2()负责输出图案(分上下半部分对称输出)。用户输入m(星号数量)和n(总宽度)后,程序会先构建上半部分图案数据,再利用对称原理生成下半部分,最终输出完整的菱形图案。其中数学计算确保图案对称性,M常量限制最大处理尺寸为100。
#include<stdio.h>
#include<math.h> 
#define M   100
char arr[M][M+1];
void fun2(int m,int n){// --上半部分 for(int i=0;i<n/2+1;i++){for(int j=0;j<m+n-1;j++){putchar(arr[i][j]);}puts("");}//下半部分 for(int i=0;i<n/2;i++){for(int j=0;j<m+n-1;j++){putchar(arr[n/2-i-1][j]);}puts("");}}
void fun1(int m,int n,int ii){int i = 0; int k;// ------------单行左 for(;i<ii;i++)   //点的个数 arr[ii][i]='.';k=i;for(;k<ii+m;k++)arr[ii][k]='*';i+=m;for(;i<=n/2;i++)arr[ii][i]='.';	// 单行右int l = n;for(i=l;i>=l/2;i--)arr[ii][i]=arr[ii][l-i];
}void fun(int m,int n){for(int i=0;i<n/2+1;i++){fun1(m,n,i);}
}int main(){int m,n;scanf("%d%d",&m,&n);fun(m,n);fun2(m,n);return 0;	
}
#include<stdio.h>
#define M 100char pattern[M][M+1];void generateSymmetricPattern(int m, int n) {int totalSize = n + m - 1;int center = totalSize / 2;// 初始化所有点为'.'for(int i = 0; i < totalSize; i++) {for(int j = 0; j < totalSize; j++) {pattern[i][j] = '.';}}// 只计算第一象限,然后对称到其他三个象限for(int i = 0; i <= center; i++) {for(int j = i; j < i + m && j <= center; j++) {// 在第一象限放置'*'pattern[i][j] = '*';// 对称到其他三个象限pattern[i][totalSize - 1 - j] = '*';           // 第二象限pattern[totalSize - 2 - i][j] = '*';           // 第四象限pattern[totalSize - 2 - i][totalSize - 1 - j] = '*'; // 第三象限}}
}void displayPattern(int m, int n) {int totalSize = n + m -1;for(int i = 0; i < n; i++) {    	for(int j = 0; j < totalSize; j++) {putchar(pattern[i][j]);}putchar('\n');}
}int main() {int m, n;scanf("%d%d", &m, &n);generateSymmetricPattern(m, n);displayPattern(m, n);return 0;	
}
