首先我们来实现for循环打印三角
* * * * * * *
我们需要用到三个循环来打印
第一个循环控制行数以及换行的 *** 作
有上图可知我们需要打印5行内容 所以 i 的值从0-4
第二个循环打印星号前的空格
第三个循环需要打印星号
下面我们开码
首先我们先写出第一个循环
#includeint main() { int i = 0, j = 0; for(i = 0; i < 4; i++) { printf("n"); } return 0; }
接着实现第二个循环 空格
我们由开始的那张图可以知道我们需要打印的空格分别是 3个 2个 1个 0个
所以 我们 j 的范围 0 到 2 - i
#includeint main() { int i,j; for(i = 0; i < 4; i++) { for(j = 0; j <= 2 - i; j++) { printf(" "); } printf("n"); }
最后我们来实现第三个循环 星号
也是由最上面的图可知 每层星号和之间的空格的关系即为 j 的范围
分别是 1 3 5 7 由于我们的循环初始化是从0开始,所以要减一,也更方便我们计算
即 (j = 0; j < 2 * i; j++)
接着我们看星号,可以发现每一层的星号都为开头一个,结束一个
所以我们需要用到 if 来排除一下
#includeint main() { int i,j; for(i = 0; i < 4; i++) //外层循环控制行(行数,换行) { for(j = 0; j <= 2 - i; j++) { printf(" "); } for(j = 0; j <= 2 * i; j++) //内层循环控制列(列数,列的符号) { if(j == 0||j == 2 * i) printf("*"); else printf(" "); } printf("n"); }
至此,我们可以得到一个三角形。
由此我们也可以打印出一个菱形,方法就是将上面的三角形倒过来在打印一边就好,由4行减少到3行,如下图
* * 最后的成品: * * * * * * * * * * * * * * *
代码如下
#includeint main() { int i,j; for(i = 0; i < 4; i++) //外层循环控制行(行数,换行) { for(j = 0; j <= 2 - i; j++) { printf(" "); } for(j = 0; j <= 2 * i; j++) //内层循环控制列(列数,列的符号) { if(j == 0||j == 2 * i) printf("*"); else printf(" "); } printf("n"); } for(i = 0; i < 3; i++) { for(j = 0;j <= i; j++) { printf(" "); } for(j = 0;j <= 4 - i * 2; j++) { if(j == 0||j == 4 - i * 2) printf("*"); else printf(" "); } printf("n"); } return 0; }
第二个打印空格的循环很好理解,需要的值和i对应
我解释一下第三个循环 j 的范围
由第一个三角我们知道 j 的最大值是2 * i
将 i 带入分别是 0 2 4 6 对应着每一行星号和之间的空格
所以我们这里要打三行 只需要将第三行对应的结果减去 2 * i 就好,即 4 - 2 * i
(以上要是由错误希望指出,上面是我的个人理解,有错误请见谅)
最后是用下标的方法我也放在下面
这个要好理解一些,大概看一边代码就能理解了
#includeint main() { char arr[] = "*****"; char arr1[] = " "; char arr2[] = " "; //int sz = sizeof(arr) / sizeof(arr[0]);要是使用sizeof则下面的sz要减2 int sz = strlen(arr); int lift = 0; int right = sz - 1; while(lift <= right) { arr1[lift] = arr[lift]; arr1[right] = arr[right]; lift++; right--; printf("%sn", arr1); arr1[lift - 1] = arr2[0]; arr1[right + 1] = arr2[0]; } return 0; }
这里就是用两个数组分别用左下标和右下标进行替换,让后使用第三个空格数组来将之前的替换过的初始化掉就行,要是这个要打印出菱形也是一样的 将while反过来在打印一遍就好,我偷个懒就不打了hhh
以上就是我对这两种方法打印星号的理解,这两种方法都比较适用于打很多星号那种,毕竟少的话都那printf打了hhh,由什么问题希望指出
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)