[一个会不断改进的实例]心型字符矩阵

很久没写推文了…上次更新是在国庆前,挺惭愧的哈哈
也有在想自己写这些是为了什么,发表一些根本不会有人看的博客究竟有什么意义 后来觉得,能坚持写下去就是有意义的吧,加油!

昨天写了串打印心形字符矩阵的代码,今天又稍微改进了下,大概是这样的:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
int i, count, count2,count3,count4,count5,count6,count7,count8;
int main(void) {
	int line;
	int num1;
	int num2;
	int num3; 
	char input;
	printf("请输入宽度:");
	scanf("%d", &line);
	getchar();
	if (line > 0)
	{

		printf("请再输入一个字符,:");
		scanf("%c", &input);

		printf("\n你输入了%d作为宽度,输入的字符是%c。", line, input);
		printf("\n按回车键继续...");
		getchar();
		getchar();


		if (line % 2 == 0) {
			int hug = line / 2;
			if (hug % 2 == 0) {
				num2 = hug / 2;
				num1 = ((hug / 2) + 1) / 2;
				num3 = num1;
			}
			else {
				hug = hug + 1;
				num2 = hug / 2;
				num1 = ((hug / 2) + 1) / 2;
				num3 = num1;

			}

		}
		else
		{
			line++;
			int hug = line / 2;
			if (hug % 2 == 0) {
				num2 = hug / 2;
				num1 = ((hug / 2) + 1) / 2;
				num3 = num1;
			}
			else {
				hug = hug + 1;
				num2 = hug / 2;
				num1 = ((hug / 2) + 1) / 2;
				num3 = num1;

			}

		}



		int shit = ((num1 + num2 + num3) * 2);





		count2 = 0;
		while (count2 != 2)
		{
			for (i = 0; i < num1; i++)
			{
				printf(" ");
			}
			for (count = 0; count < num2; count++)
			{
				printf("%c", input);
			}
			for (count3 = 0; count3 < num3; count3++)
			{
				printf(" ");
			}

			count2++;
		}

		printf("\n");
		for (count8 = 0; count8 < (num3 - 2); count8++)
		{
			printf(" ");
		}
		for (count4 = 0; count4 < ((shit / 2) - (num3 - 2)) * 2; count4++)
		{
			printf("%c", input);
		}
		printf("\n");


		int left = shit / 2;
		int know = left - num3;
		while (know > 0)
		{


			for (count3 = 0; count3 < num3; count3++)
			{
				printf(" ");
			}
			for (count6 = 0; count6 < (know) * 2; count6++)
			{
				printf("%c", input);
			}
			num3 = num3 + 2;
			know = left - num3;
			printf("\n");
		}
		printf("\n打印成功");
		printf("\n按回车键退出...");
		getchar();

	}
	else {
	printf("请输入正确的数据\n");
	system("pause");
}
}

代码很长,主要是因为有很多的for循环,包括用来计数的count数组居然标到了8,所以读起来会有些吃力。
在解决宽度问题上思考了很久,主要是在打印第一行和第二行的问题上(因为三四行以后就用简单的for循环就能解决)
为了解决宽度问题我构造了一个比较合适的算法,用来处理用户输入的数据(主要是区分奇偶),但仔细阅读的话会发现这个算法也有很多的缺陷,比如强行舍弃或增加会使得打印出的宽度和实际输入的宽度不一致,同时算法本身也十分的复杂。
因此,需要解决的问题之一就是改进宽度的算法,并且这也是这个小程序的最核心的部分。

第二处需要改进的就是关于矩阵的长度,我本来的构思是用户输入行数和列数,再根据这两个数据来打印出矩阵,后来发现长度很难控制,就简化了,以后希望能够加入这个系统。
不满意的地方差不多就是这两点,同时说明一下…在写这个程序的时候并没有再网上找过相似的文章…因为本意是想让自己能够充分实践一下自己学过的知识。
就是这样,嗯。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值