编写函数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 }