本帖最后由 sf1215225 于 2015-11-5 23:46 编辑
小弟是初学者,看到很多同学在打印正三角形和倒三角形时屡不清思路.
便想看看自己能不能把自己的思路讲清,以便帮助同学们(其实也就是日常敲代码精细了备注而已
先说一下我的思路,输入1-5,打印出不同的图形.. 被抽楼了,不开心了,不想说太多... #include<stdio.h>
//定义一个函数printfPicture,使之可以接收数字打印相应地图形. int printfPicture(int inputNum){
//用switch语句来判断每个字符对应的是什么图形. switch(inputNum){
//case1为打印正方形,5行5列ab相等,故a和b都是各循环5次. /*
* * * * * * * * *
*/ case 1:{ for (int a=0; a<5; a++) { for (int b=0; b<5; b++) { printf("* "); } printf("\n"); } } break;
//case2为打印正直角三角形. /*
* * * * * *
*/ case 2:{ //外循环5次,a循环5次不变.
for (int a=0; a<5; a++) { //里循环5次,但每次随a的值递增自己循环的次数.里循环随外循环的值从1次开始递增循环次数. //故说a会越来越大,b随a的值变大且b大不过a.即b<=a. for (int b=0; b<=a; b++) { printf("* "); } printf("\n"); } } break;
//case3打印倒直角三角形. /*
* * * * * *
*/ case 3:{ //外循环5次不变. for (int a=0; a<5; a++) { //里循环打出的*从多到少***** **** ***可以形成倒三角形 //里循环从循环5次然后4次3次逐渐递减可以是(b=5,b>0,b--),进行b的自减运算 //也可以b仍然是自增,用一个数减去b,b自增的越大,减b得出的值就越小,同样完成了自减运算. for (int b=0; b<5-a; b++) { printf("* "); } printf("\n"); } } break;
//case4打印正三角形. /*
* * * * * * * * *
*/ case 4:{ //正三角形为5行不变,所以外层循环不动. for (int a=0; a<5; a++) { /* 先像case2一样打出正直角三角形,即b<=a 但是正三角形左边要像右边一样也要有角,我们分两步来做. 第一步先给左边充斥上列数和右边对等的矩形 * * * * * * * * * * * * 即b运行的次数(列数)每次都加了右边三角形的列数-1,即5-1, 再加随a外层循环的递增值,就等于里循环b要打印的列数.即5-1+a,a+4 */ for (int b=0; b<=a+4; b++) {
/* 第二步再给多数来得那部分*打印成空格,剩下的打印* 即打印 参照case3,b<5-a时打印出五行五列的倒直角三角形 ^ ^ ^ 而此时我们只需要打印4行4列的空格就OK.即b<4-a就可以了 ^ ^ 剩下个都打印成*,就可以了. ^ */ if (b<4-a) { //建立if语句判断上方打印. printf(" "); }else{ printf("* "); } } printf("\n"); } } break; case 5:{ for (int a=0; a<5; a++) { for (int b=5; b>a-4; b--) { if (6-b<=a) { printf(" "); }else{ printf("* "); } } printf("\n"); } } break; } return 0; }
int main(){ int n; printf("输入1打印正方形\n输入2打印正直角三角形\n输入3打印倒直角三角形\n"); printf("输入4打印正三角形\n输入5打印倒直角三角形\n"); scanf("%d",&n); printfPicture(n); printf("\n");
}
发了好多遍才出来,心情都木有了..
不想说话了.
对了小弟初学,求轻喷(ios入学辅导班第四天)
最后一个图形没注释 因为屡思路太久,脑子容易炸 容易炸 容易炸 恩,重要的事情说三遍.
还有 ,开头说面试可能用是我猜的
|