```c
include
// 函数原型声明
void show(int n, char c);
int main() {
int n;
printf("请输入菱形的高: ");
scanf("%d", &n);
// 检查输入的行数是否为奇数
if (n % 2 != 0) {
show(n, '*');
} else {
printf("Error! 行数必须为奇数。\n");
}
return 0;
}
// 打印菱形的函数
void show(int n, char c) {
int i;
// 打印上半部分
for (i = 1; i <= n; i++) {
// 打印前面的空格
for (int j = 1; j <= n - i; j++) {
printf(" ");
}
// 打印星号和空格
for (int j = 1; j <= 2 * i - 1; j++) {
if (j == 1 || j == 2 * i - 1) {
printf("*");
} else {
printf(" ");
}
}
// 打印星号
if (i != n) {
printf("*");
}
printf("\n");
}
// 打印下半部分
for (i = n - 1; i >= 1; i--) {
// 打印前面的空格
for (int j = 1; j <= n - i; j++) {
printf(" ");
}
// 打印星号和空格
for (int j = 1; j <= 2 * i - 1; j++) {
if (j == 1 || j == 2 * i - 1) {
printf("*");
} else {
printf(" ");
}
}
// 打印星号
if (i != 1) {
printf("*");
}
printf("\n");
}
}
```
这个程序首先检查输入的行数是否为奇数,如果是奇数,则调用`show`函数打印空心菱形;否则,输出错误信息。`show`函数使用两层循环分别打印菱形的上半部分和下半部分。在每一行中,先打印一定数量的空格,然后打印星号和空格,最后在行尾打印一个星号(除了最后一行)。