很久没写推文了…上次更新是在国庆前,挺惭愧的哈哈
也有在想自己写这些是为了什么,发表一些根本不会有人看的博客究竟有什么意义 后来觉得,能坚持写下去就是有意义的吧,加油!
昨天写了串打印心形字符矩阵的代码,今天又稍微改进了下,大概是这样的:
#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循环就能解决)
为了解决宽度问题我构造了一个比较合适的算法,用来处理用户输入的数据(主要是区分奇偶),但仔细阅读的话会发现这个算法也有很多的缺陷,比如强行舍弃或增加会使得打印出的宽度和实际输入的宽度不一致,同时算法本身也十分的复杂。
因此,需要解决的问题之一就是改进宽度的算法,并且这也是这个小程序的最核心的部分。
第二处需要改进的就是关于矩阵的长度,我本来的构思是用户输入行数和列数,再根据这两个数据来打印出矩阵,后来发现长度很难控制,就简化了,以后希望能够加入这个系统。
不满意的地方差不多就是这两点,同时说明一下…在写这个程序的时候并没有再网上找过相似的文章…因为本意是想让自己能够充分实践一下自己学过的知识。
就是这样,嗯。