编写函数diamond
打印一个菱形。如果调用diamond(3, '*')
则打印:
*
* * *
*
如果调用diamond(5, '+')
则打印:
+
+ + +
+ + + + +
+ + +
+
如果用偶数做参数则打印错误提示。
/*每一行的星号和空格的数量是纵坐标i的函数关系,
**图形关于横轴对称,
**因此字符的数量就和字符的纵坐标距离中间位置的距离有关,
**这个距离就是纵坐标减去中间位置纵坐标的绝对值。
**By LYLtim
*/
#include<stdio.h>
#include<math.h>
void diamond(unsigned n, char c)
{
unsigned i;
for (i = 1; i <= n; i++) {
unsigned d = abs(i - n / 2 - 1), j;
for (j = 1; j <= d; j++) printf(" ");
for (j = 1; j <= (n / 2 + 1 - d) * 2 - 1; j++) printf("%c", c);
printf("\n");
}
}
int main(void)
{
unsigned n;
char c;
printf("Input n, c:");
scanf("%u %c", &n, &c);
if (n & 1 == 0) printf("error\n");
else diamond(n, c);
return 0;
}
更简洁方法(C++代码):
1 // By LYLtim
2
3 #include <iostream>
4 #include <cmath>
5
6 using namespace std;
7
8 inline int dabs(int n) { return n >= 0 ? n : - n; }
9 void diamond(int n, char c) {
10 n >>= 1;
11 for (int i = -n; i <= n; i++) {
12 for (int j = -n; j <= n; j++)
13 if (dabs(i) + dabs(j) <= n)
14 cout << c;
15 else
16 cout << ' ';
17 cout << endl;
18 }
19 }
20
21 int main() {
22 diamond(5, '+');
23 }
原文链接: https://www.cnblogs.com/LYLtim/archive/2011/08/04/2127790.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/29904
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!