C20201114菱形钻石图案打印作业题

打印菱形钻石图案

第一篇博客。

说明:大一C语言作业题——打印菱形钻石图案,初版代码略微规范了一下命名和代码格式。
先附2020初版代码:关键点是行数在 (line+1)/2 上下分段处理打印。

#include <stdio.h>
#include <stdlib.h>

//打印钻石图案
int main() {
	//定义变量  line是总行数,row是当前行,col是列
	int line, row, col;
	
	//实现简单交互
	printf("please input line(odd needed):"); //偶数的even 奇数的odd
	//接收输入
	scanf("%d", &line);
	while (getchar() != '\n') {;}
	
	//打印图案功能实现
	//相关条件的公式均是由以中间行为x轴,左边第一个为原点建直角坐标系找函数关系得出
	//首先是图案上半部打印
	for (row = 1; row <= (line + 1) / 2; row++) {
		for (col = 1; col <= (line + 1) / 2 - row; col++) {
			printf(" ");
		}
		for (col = col; col <= (line - 1) / 2 + row; col++) {
			printf("*");
		}
		printf("\n");
	}
	//图案下半部打印
	for (row = row; row <= line; row++) {
		for (col = 1; col <= row - (line + 1) / 2; col++) {
			printf(" ");
		}
		for (col = col; col <= (line - 1) / 2 + (line + 1 - row); col++) {
			printf("*");
		}
		printf("\n");
	}
	//强制暂停,避免闪退
	system("pause");
	
	return 0;
}

附运行结果截图:
在这里插入图片描述
输入偶数情况时:可以打印输出图案,但不太好看。下半部分需重新设计满足美观的需求。
在这里插入图片描述
2021改进思路:加一次条件判断,使输入奇数时正常打印题目要求的图案,输入偶数时打印美观的伪菱形钻石图案。
改进后代码:关键点是 if (line%2 != 0) 判断总行数奇偶后分别处理。其余部分略有变化。

#include <stdio.h>
#include <stdlib.h>

//打印钻石图案
int main() {
	//定义变量  line是总行数,row是当前行,col是列
	int line, row, col;
	
	//实现简单交互
	printf("please input line(odd needed):");
	//接收输入
	scanf("%d", &line);
	while (getchar() != '\n') {;}
	
	//打印图案功能实现
	//相关条件的公式均是由以中间行为x轴,左边第一个为原点建直角坐标系找函数关系得出
	if (line % 2 != 0) {
		//行数是奇数时打印
		for (row = 1; row <= (line + 1) / 2; row++) {
			for (col = 1; col <= (line + 1) / 2 - row; col++) {
				printf(" ");
			}
			for (col = col; col <= (line - 1) / 2 + row; col++) {
				printf("*");
			}
			putchar(10); //等价于printf("\n");
		}
		for (row = row; row <= line; row++) {
			for (col = 1; col <= row - (line + 1) / 2; col++) {
				printf(" ");
			}
			//col <= (line - 1) / 2 + (line + 1 - row)
			for (col = col; col <= 3 * (line + 1) / 2 - row - 1; col++) {
				printf("*");
			}
			putchar(10);
		}
	}
	else {
		//行数是偶数时打印
		printf("line is even.--打印伪菱形钻石图案\n");
		for (row = 1; row <= line; row++) {
			if (row <= line / 2) {
				for (col = 1; col <= line / 2 - row; col++) {
					printf(" ");
				}
				for (col = col; col <= line / 2 + row - 1; col++){
					printf("*");
				}
				putchar(10);
			}
			else {
				for (col = 1; col <= row - line / 2 - 1; col++) {
					printf(" ");
				}
				for (col = col; col <= 3 * line / 2 - row; col++) {
					printf("*");
				}
				putchar(10);
			}
		}
	}
	//强制暂停,避免闪退
	system("pause");
	
	return 0;
}

附运行结果截图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
特殊的情况:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
有关奇偶数的范围讨论众说纷纭,但至少我小学时学习的是对自然数(非负整数)才讨论数的奇偶之分,0是偶数,负数不讨论。
最后,代码的改进永无止境,我的代码如何再改进优化,欢迎读者留言,促进我进步。
-待优化-

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值