#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include <Windows.h>
int main(void)
{//首先分析:用户输入的是奇数还是偶数//其次分析:选择偶数的话选择在上部分还是下部分少打一行//上部分int n;int count = 0;printf("请输入正整数(偶数无法构成菱形哦!):\n");scanf_s("%d,\n",&n);for (int i = 0; i < n / 2 + 1; i++) //打印菱形 无论几行 都要保持对称 我们选择将 对称行给上面还是下面都可以{for (int j = 1; j <= n / 2 - i ; j++) // 每次空格都需要减一{printf(" ");}for (int k = 1; k <= 2 * i + 1; k++){printf("*");}printf("\n");count++;}//下部分for (int i = 0; i < n / 2; i++){for (int j = 0; j < i + 1; j++) //外层增长一次我也增长一次{printf(" ");}//这里防止用户输入了偶数(我们进行判断) 最终还是违背行数 实现效果if (n % 2 == 0) {for (int k = 1; k < n - 2 * i; k++) //k = 1 他的条件就是 总的个数 减掉 每次增长(需要少掉的两个) 然后乘以每次增长的次数{printf("*");}}else{for (int k = 1; k < (n - 1) - 2 * i; k++){printf("*");}}printf("\n");count++;}printf("一共打印了:%d\n",count);return 0;
运行结果:
正常情况下我们只需要考虑奇数(将菱形打印出来就可以了)
因为偶数不可能打印出菱形
这里代码里面输入偶数会自动判断多加一行对称行 生成菱形 但又打破了输入值得不等