分享一下C语言菱形打印和数字金字塔的代码

新人刚学习几天,老师布置了几个作业,挑出其中两个和大家分享一下,也希望有大神指正一下我写的错误之处,另外也欢迎大家有新的思路写在下面的留言区,万分感谢。另外我使用的是VS2013。

首先是打印菱形区域,(目标:根据用户输入的行数,生成菱形)

#include<stdio.h>




int zuoye2(int s)
{
int i;
int j;


for (int i = 0; i < 2 * s; i += 1)
{
if (i < s)
{
for (int j = 0; j <2 * s; j++)
{
if (j>s + i - 1)//如果循环列数大于当前列数与给定行数的和-1,则输出空格。
printf(" ");
else if (j < s - i - 1)//如果循环列数小于(给定行数)减去(当前行数)的差-1,则输出空格
printf(" ");
else
printf("*");
}
printf("\n");
}
////////////////////菱形上半部分//////////////////////////
else
{
for (int j = 0; j < 2 * s; j++)
{
if (j<i - s + 1)//如果列号大于行号-给定行数+1,则输出空格。
printf(" ");
else if (j >2 * s - (i - s) - 3)//如果2倍给定行数代表最大j的值,i-s代表当前行号比给定行数多出的数值。-3是推算出来的,具体怎么想,没弄明白。
printf(" ");
else
printf("*");
}
printf("\n");
}
//////////////////菱形下半部分/////////////////////////
} return s;
}
int main()
{
int ac;
printf("请输入你想要的行数:");


scanf_s("%d", &ac);
int c = zuoye2(ac);
printf("%d", c);

}

下面是另外一个程序,根据用户输入的数字,分解成相应行数和列数的数字金字塔。要求最外面是1,依次递增到用户给出的数字。当然,水平有限,请各位发挥思路,帮我想想有没有简单的方法。下面是我的代码:

#include<stdio.h>


int yunsuan(int x)
{
for (int i = 1; i < x + 1; i++)
{
for (int j = 1; j < 2 * x+1; j++)
{
if (j == x)
printf("%d ", i);
else if (j<x)//如果j比行数x小,证明j在这行的左面
{
if (j >x-i )//如果行数-行号的值比j大,证明输出的数值比0大,需要输出。
{
printf("%d ",i-(x-j));//打印x-i左面的值,x-j是j与中心数x的距离,因为是负数,所以用行数就可以得出数值。
}
else//反之,如果行数-列号的值没有j大,则不需要输出数值。
printf("  ");
}
else if (j > x)//如果j比行数x大,证明j在这行的右面。
{
if (j < x + i)//如果j小于行数和行号的和,证明他在这行输出的数组范围内。
{
printf("%d ", i-(j-x));//同理用j-x算出右边的j距离中心x的距离,然后用行号减去差值就可以得出相应位数的值。
}
else
printf("  ");//反之超过输出范围,输出空格。
}
}
printf("\n");
}
return x;
}
int main()
{
int x;
printf("请输入一个正整数!");
scanf_s("%d", &x);
int c = yunsuan(x);
printf("%d", c);

}

希望各位大神,轻喷,如有一起学习的小伙伴,欢迎留言,共同进步!

猜你喜欢

转载自blog.csdn.net/gkht007/article/details/79919359