以下是一个打印N阶空心菱形的C语言程序:
```
#include
int main() {
int n, i, j, k;
printf("请输入菱形的阶数:");
scanf("%d", &n);
// 打印上半部分
for (i = 1; i <= n; i++) {
// 打印空格
for (j = 1; j <= n - i; j++) {
printf(" ");
}
// 打印星号或空格
for (k = 1; k <= 2 * i - 1; k++) {
if (k == 1 || k == 2 * i - 1) {
printf("*");
} else {
printf(" ");
}
}
printf("\n");
}
// 打印下半部分
for (i = n - 1; i >= 1; i--) {
// 打印空格
for (j = 1; j <= n - i; j++) {
printf(" ");
}
// 打印星号或空格
for (k = 1; k <= 2 * i - 1; k++) {
if (k == 1 || k == 2 * i - 1) {
printf("*");
} else {
printf(" ");
}
}
printf("\n");
}
return 0;
}
```
该程序与前面的程序类似,不同之处在于在每一行中,除了第一个和最后一个位置打印星号外,其它位置都打印空格,以形成空心的菱形。程序使用if语句来判断当前位置是否应该打印星号或空格。