解题思路:
1. 初始化为全'.'图
2. 建立坐标系将十字改成'$'
3. 依照对称关系将其余部分改成'$'
注意事项:
注意坐标轴原点的选取以及x,y的方向。
参考代码:
//1442: 打印十字图 #include <stdio.h> int main() { int n, i, j, o, p, q; char grah[125][125]; scanf("%d", &n); // 初始化底图 for(i=0; i<(4*n+5); i++) { for(j=0; j<(4*n+5); j++) { grah[i][j] = '.'; } } // 按规律将'.'变为'$' // 从最中间的十字开始,因为图像是中心对称的,所以只需要变一个四方角,然后给对应的位置赋值。 // 以中心点为坐标建立一个x右向为正,y下向为正的坐标轴。 grah[n*2+2][n*2+2] = '$'; grah[n*2+3][n*2+2] = grah[n*2+4][n*2+2] = grah[n*2+2][n*2+3] = grah[n*2+2][n*2+4] = '$'; // 记录上一个十字的端点值 o = n*2+2; p = o+2; q = o+2; for(i=1; i<=n; i++) { // 将图像的绘制分为向上向右向上向右4个部分 for(j=o; j<=q; j++) grah[p+2][j] = '$'; for(j=p+2; j>=p; j--) grah[j][q] = '$'; for(j=q; j<=q+2; j++) grah[p][j] = '$'; for(j=p; j>=o; j--) grah[j][q+2] = '$'; p += 2; q += 2; } // 按照对称关系,画出其它部分。 for(i=o; i<=(o+2*n+2); i++) { for(j=o; j<=(o+2*n+2); j++) { if(grah[i][j] == '$') { grah[2*o-i][2*o-j] = grah[2*o-i][j] = grah[i][2*o-j] = '$'; // printf("1: %d %d\n", i, j); } } } // printf("2: %c", grah[8][9]); // 打印图像 for(i=0; i<(4*n+5); i++) { for(j=0; j<(4*n+5); j++) { printf("%c", grah[i][j]); } printf("\n"); } }
0.0分
0 人评分
C语言程序设计教程(第三版)课后习题8.7 (C语言代码)浏览:704 |
C语言程序设计教程(第三版)课后习题6.9 (C语言代码)浏览:524 |
C语言程序设计教程(第三版)课后习题6.11 (C语言代码)for循环浏览:1178 |
九宫重排 (C++代码)浏览:2195 |
C语言程序设计教程(第三版)课后习题10.5 (C语言代码)浏览:566 |
淘淘的名单 (C语言代码)答案错误???浏览:624 |
打水问题 (C语言代码)浏览:1148 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:1327 |
C语言考试练习题_排列 (C语言代码)浏览:767 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:632 |