文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C语言如何输出任意边长的菱形

2023-06-22 07:00

关注

小编给大家分享一下C语言如何输出任意边长的菱形,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

     1.简单理解星号输出原理,将输出星号代码分为上方和下方两部分

        首先,我们可以观察到如果边长为a的话,那么最长的一行的长度就为2*a-1,同时,每列星号都是对齐的,这说明我们如果想要输出星号,是有规律可循的,没星号的地方我们可以用空格来代替,这样一想,发现,我们好像可以使用x轴区间来控制空格和星号的输出

        例如,第三行,如果我们设第一个星号的x坐标为1的话,并在此基础上输出5个星号,那我们只需要写一串代码去控制在x属于[1,5]的区间上输出星号就行了

        同样,对于图片中第一行来说,我们只需要写一串代码来控制在x属于(2,4)的区间上输出一个星号就行了,如下

for(int j=1;j<2*3-1;j++)    //3为图片中菱形的边长{    if(j>2&&j<4)        printf("*");    else        printf(" ");}

        现在,由于行数不同,每行输出的星号数也就不同,那么,我们就可以找出输出星号数和行数的的关系

        但是,我们又可以看出,最长的一行星号上面的星号输出方式为由少到多,而最长一行下面的星号输出方式为由多到少,那么,对于上面和下面,我们要找的星号数与行数的关系也是不同的

     2.上方输出星号代码

        那么,接下来,我们先讨论最长一行星号的上方(包括最长一行星号),输出星号数与行数的关系

        首先,我们要遍历最长一行上方的所有行(包括最长一行),这时,就要用到for循环,这里的a表示最长的一行的行数,同时也是菱形的边长

for(int i=1;i<=a;i++)

C语言如何输出任意边长的菱形

        接下来,我们要找到行数与输出星号数的关系 

        经过观察,我们发现,如果a为边长,i表示行数,那么则在(a-i,2*a-(a-i))区间上要输出星号

     看到这里的友友们可以停下来思考一下,思考通了在接着看 

        好的,那么接下来,我们要遍历列,单单遍历行是不够的,不能控制星号以及空格的输出,所以,我们就需要遍历列

        如下,我们用到了输出星号的区间,如果列数在区间(a-i,2*a-(a-i))内,就输出星号,不在区间内,就输出空格,这样,就可以控制输出星号以及行数的关系了。

        当然,也别忘了,每输出一行星号就要换行,所以要写printf("\n"),但要写在遍历列for循环的外面,遍历行for循环的里面

        这就是上方输出星号的全部了,看到这儿,是不是想尝试自己编写下方星号的输出了呢,如果想的话,那就大胆的去尝试一下(* ̄︶ ̄)

for (int i = 1; i <= a; i++)//遍历菱形最长一行上方(包括最长的一行)所有行{printf(" ");//每行前面加空格,整齐好看for (int j = 1; j<=2*a-1; j++)        //遍历菱形最长一行上方(包括最长的一行)每行的所有列{if (j > a - i&& j <2 * a - (a - i))printf("*");elseprintf(" ");}printf("\n");}

     3.下方输出星号代码

        好的,那么下面,我们讨论最长一行星号的下方(不包括最长一行星号),输出星号数与行数的关系

        先写下方的遍历行,我们是从最长的一行的下一行开始输出,最长的一行的行数为a,那么,我们要定义行的初始值为a+1,行的最大值为2*a-1

        就像上方输出星号一样,接着要找输出星号的区间,经过观察,可以发现,列数在区间(i-a,2*a-(i-a))内,就输出星号,不在区间内,就输出空格,这样,就可以控制输出星号以及行数的关系了。

        接下来,要遍历列,代码如下

for(int i=a+1;i<=2*a-1;i++)

        当然,也别忘了,每输出一行星号就要换行,所以要写printf("\n"),但要写在遍历列for循环的外面,遍历行for循环的里面

        这就是下方输出星号的全部了(* ̄︶ ̄)

for (int i =  a + 1; i <= 2*a-1 ; i++)//遍历菱形最长一行上方(包括最长的一行)所有行{printf(" ");//每行前面加空格,整齐好看for (int j = 1; j <= 2 * a - 1; j++)//遍历菱形最长一行下方(不包括最长的一行)每行的所有列{if (j > i - a && j < 2*a - (i - a))printf("*");elseprintf(" ");}printf("\n");}

全部代码如下

#include <stdio.h>#include <stdlib.h>int main(void){int a;//菱形的边长//注意,由于屏幕的大小限制,过大的边长(比如100)会导致无法输出正常的菱形,望理解printf("输入菱形的边长:\n");scanf_s("%d", &a);for (int i = 1; i <= a; i++)//遍历菱形最长一行上方(包括最长的一行)所有行{printf(" ");//每行前面加空格,整齐好看for (int j = 1; j<=2*a-1; j++)        //遍历菱形最长一行上方(包括最长的一行)每行的所有列{if (j > a - i&& j <2 * a - (a - i))printf("*");elseprintf(" ");}printf("\n");}for (int i =  a + 1; i < 2*a + 1; i++)//遍历菱形最长一行上方(包括最长的一行)所有行{printf(" ");//每行前面加空格,不和边框拥挤,可去掉for (int j = 1; j <= 2 * a - 1; j++)        //遍历菱形最长一行下方(不包括最长的一行)每行的所有列{if (j > i - a && j < 2*a - (i - a))printf("*");elseprintf(" ");}printf("\n");}system("pause");return 0;}

看完了这篇文章,相信你对“C语言如何输出任意边长的菱形”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网行业资讯频道,感谢各位的阅读!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯