A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

         最近课堂上总是碰到用*关于打印三角图形之类的,   今天又学了数组, 用数组赋值再打印金字塔,   
对于这方面的问题我写过好多次,   写写改改,   想到了新的方法又会写一遍,   今天把最近这几天写的
关于打印三角图形和沙漏的问题整理了下,   大家有兴趣的可以看看.
以下:



//倒三角的for循环.
//  Created by rain on 15/11/2.
//  Copyright © 2015年 rain. All rights reserved.
/*
打印倒三角图形
           *******
             *****
               ***
                 *
*/
#include <stdio.h>
int main(){
    for (int j=0; j<4; j++) {
        for (int k=7; k>j; k--) {
            if (7-k<j) {
                printf(" ");
            }
            else{
                printf("*");
            }
        }printf("\n");
    }
    return 0;
}



//打印沙漏图形
/*打印沙漏图形
*******
*****
   ***
    *

    *
   ***
*****
*******
*/
#include<stdio.h>
#include<stdlib.h>               //注:abs是绝对值操作符,   要先调用系统头文件stdlib.h(应该是叫操作符把...*^__^*说错轻喷)
int main()
{
    for (int i=0; i<9; i++) {
        for (int j=0; j<abs(i-4)+3; j++) {
            if (j<abs(4-abs(4-i))) {
                printf(" ");
            }
            else{
                printf("*");}
        }printf("\n");
    }
    return 0;
}


        下午看了下姚姚老师的课程目录,看到有用二位数组打印*三角图形的内容,于是想了下,
可以写写这个当成作业,写完了才看到原来老师讲的不是这个...上课讲还要自己赋值,真麻烦...
这个可以define行数,   赋值行数M,  就打印多少行.

//用数组打印三角图形
//打印三角图形
/*
            *            \
           ***           |
          *****           > 一共有M行
         *******         |
        *********        /
*/
#include <stdio.h>
#define M 16

char arr[M][M*2-1];
void xingxing(int len);

int main(){
    xingxing(M);
    return 0;
}

void xingxing(int len){
    for(int m=0;m<len;m++){
        for(int n=0;n<m+len;n++){
            if(n<len-m-1){
                arr[m][n]=' ';
            }
            else{
                arr[m][n]='*';
            }
        }
    }
    for(int i=0;i<M;i++){
        for(int j=0;j<M*2-1;j++){
            printf("%c",arr[j]);
        }printf("\n");
    }
}


还是打印沙漏的问题,   因为之前自己弄得不是很明白,  今天自己又鼓捣了下,   请教了同学,   终于把这东西弄懂了. (这里谢谢我们第五组的技术助长.)

//  打印沙漏
#include<stdio.h>
#include<stdlib.h>
int main()
{
    printf("沙漏-9行7列\n");
/*
     *******
      *****
       ***
        *
     
        *
       ***
      *****
     *******
*/
    for (int a=0; a<9; a++)
    {
        for (int b=0; b<7; b++){
            if (abs(a-4)<=abs(b-3)){
                printf(" ");
            }
            else{
                printf("*");
            }
        }
        printf("\n");
    }
   
    return 0;
}

附上思考过程,   数学问题,   大学没学高数都忘光了, 想了半天  %>_<%
同为入学者不懂得同学可以看看..^_^





今天也写整理了一下打印三角形的问题,   #define 行数,可以任意打印多少行.
//打印M行*三角形
//打印M
#include<stdio.h>#include<stdlib.h>#define M 13
int len=M;int main(){    for (int a=0; a<len; a++) {        for (int b=0; b<len*2+1; b++) {            if (a<abs(b-len+1)) {                printf(" ");            } else {                printf("*");            }        }printf("\n");    }        return 0;}



正三角大家应该都编写过,  我自己貌似没写...好像没有了...应该还可以用数组打印沙漏,   任意define多少行,   但是觉得麻烦了点..有兴趣的同学可以自己写看看.   
另外给大家提点建议,   有问题可以多请教我们各组的技术组长,  他们都是内功深厚平时找不到对手的,   所以我们应该多骚扰他们,   他们也是很乐意帮我们解决的. 哈哈
以上.

     
个人签名:年轻就是永不放弃!


14 个回复

倒序浏览
写的不错,点赞
回复 使用道具 举报
3个for实现倒三角打印,{:2_30:}

#include <stdio.h>

int main(){

    for (int i=0; i<4; i++) {
        for (int j=0; j<i; j++) {
            printf(" ");
        }
        for (int l=0; l<7-2*i; l++) {
            printf("*");
        }
        printf("\n");
    }
   
    return 0;

}
回复 使用道具 举报
liuchuan_alex 发表于 2015-11-7 23:27
3个for实现倒三角打印,

#include

嗯嗯,不错,也是数学问题, 刚开始接触没想那么多...
回复 使用道具 举报
没看出来有什么改的只是算法的问题
回复 使用道具 举报
陌忆 发表于 2015-11-7 23:50
没看出来有什么改的只是算法的问题

嗯嗯,新手水平,这点小问题研究半天
回复 使用道具 举报
陌忆 发表于 2015-11-7 23:50
没看出来有什么改的只是算法的问题

嗯嗯,新手水平,这点小问题研究半天
回复 使用道具 举报
郭嘉 中级黑马 2015-11-8 00:07:25
8#
挺好的,有钻研精神
回复 使用道具 举报
hngdlll 来自手机 中级黑马 2015-11-8 00:07:59
9#
写的挺好的,赞一个!!!
回复 使用道具 举报
赞一个,牛牛牛!
回复 使用道具 举报
屌爆了!!!!
回复 使用道具 举报
865393462 来自手机 中级黑马 2015-11-8 00:28:12
12#
叼叼叼!!在下佩服!
回复 使用道具 举报
这有什么用  ,,,,
回复 使用道具 举报
'''''''先顶一下再说
回复 使用道具 举报
任子杰 发表于 2015-11-8 00:55
这有什么用  ,,,,

哈哈哈,其实没什么用,就一个知识点,但是写这个可以体现了我学习C基础的过程..给刚入学的学员看的.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马