C语言 打印实心矩形,空心矩形,三角形,空菱形以及回形
第一次的代码及运行截图
#include <stdio.h>
void shiJu()
{
int i;
int j;
for(i=0;i<10;i++){
for(j=0;j<10;j++){
printf("* ");
}
printf("\n");
}
}
void konJu ()
{
int i;
int j;
for(i=0;i<10;i++){
if(i==0 || i==9){
for(j=0;j<10;j++){
printf("* ");
}
}else{
for(j=0;j<10;j++){
if(j==0){
printf("* ");
}else if(j==9){
printf("*");
}else{
printf(" ");
}
}
}
printf("\n");
}
}
void sanJiao()
{
int count=5;
int i;
int j;
for(i=0;i<6;i++){
for(j=0;j<11;j++){
if(j>=(count-i) && j<=(count+i)){
printf("*");
}else{
printf(" ");
}
}
printf("\n");
}
}
void huiXing()
{
int i;
for(i=0;i<10;i++){
if(i==0 || i==9){
printf("* * * * * * * * * *\n");
}else if(i==1 || i==8){
printf("* * * * * * * *\n");
}else{
printf("* * * *\n");
}
}
}
void lX()
{
printf(" * \n");
printf(" * * \n");
printf("* *\n");
printf(" * * \n");
printf(" * \n");
}
int main()
{
shiJu();
printf("\n");
konJu();
printf("\n");
sanJiao();
printf("\n");
huiXing();
printf("\n");
lX();
}
第二次的代码以及运行截图
#include <stdio.h>
//打印单个字符
void pChar(char c)
{
printf("%c ",c);
}
//打印一行字符
void pLine(int a,char c)
{
int i;
for(i=0;i<a;i++){
pChar(c);
}
}
//换行
void pBlank()
{
printf("\n");
}
//实心矩形
void shuJu(int a,int b,char c)
{
int i;
for(i=0;i<b;i++){
pLine(a,c);
pBlank();
}
pBlank();
}
//空心矩形
void konJu(int a,int b,char c)
{
int i;
for(i=0;i<b;i++){
if(i==0 || i==(b-1)){
pLine(a,c);
pBlank();
}else{
pChar(c);
pLine(a-2,' ');
pChar(c);
pBlank();
}
}
pBlank();
}
//三角形
void sanJ(int a,int b,char c)
{
int i;
int count=b/2;
int j;
for(i=0;i<a;i++){
for(j=0;j<=b;j++){
if(j>=(count-i) && j<=(count+i)){
pChar(c);
}else{
pChar(' ');
}
}
pBlank();
}
pBlank();
}
//空菱
void konL(int a,int b,char c)
{
int i;
int j;
int count=b/2;
for(i=0;i<=(a/2);i++){
for(j=0;j<=b;j++){
if(j==(count-i) || j==(count+i)){
pChar(c);
}else{
pChar(' ');
}
}
pBlank();
}
for(i=((a/2)-1);i>=0;i--){
for(j=0;j<=b;j++){
if(j==(count-i) || j==(count+i)){
pChar(c);
}else{
pChar(' ');
}
}
pBlank();
}
pBlank();
}
//回形
void huiX(int a,int b,char c)
{
int i;
int j;
for(i=1;i<=a;i++){
if(i<=2 || i>(a-2)){
pLine(b,c);
pBlank();
}else{
for(j=1;j<=b;j++){
if(j<=2 || j>(b-2)){
pChar(c);
}else{
pChar(' ');
}
}
pBlank();
}
}
pBlank();
}
int main()
{
shuJu(10,10,'*');
konJu(10,10,'*');
sanJ(6,10,'*');
konL(11,10,'*');
huiX(10,10,'*');
}
代码仅供参考
在这里简单谈一下前后两次的一些心得
其实代码很简单,相信有一些c语言基础的人细心一点都可以写的出来。有时候人们常说醍醐灌顶这个词,但是只有当自己真正的亲身感受之后,才发现其之震撼。应试教育般的写代码方式,让我在第一次写的时候起手就是for循环,之后便是抱着电脑屏幕数需要在什么地方写几个空格,在什么地方应该加几个字符,最后还是掐着时间点将其拼凑起来的。那么,在老师讲解了如何摒弃我们以前以应试的方法凭着记忆解决问题的方式,以及如何以工程师的思维方式解决问题之后,再回过头来看我第一次写的程序,就会发现很多问题。比如,在没将代码进行抽象之前,循环打印一行字符,我会在五个图形函数里面,不止一次的嵌套,大量的循环的嵌套使我们的代码易读性以及冗余度都很差,而且还会打乱我的思维,导致代码的执行结果和我所预想的结果背道相驰,也就是老师说的代码失控。而将一些反复出现的代码块抽象函数之后,再进行各个图形函数的编写。就会发现不仅逻辑上变得比之前更加的清晰之外,代码的易读性较上一次的也有所提高。我觉得本次的课程带给我的收获是前几次所不能相比的。知识的掌握程度是解决问题的前提,但解决问题的方式是使我们高效率的根本。