要输出的星号图是:算法
将一个图,看做为6行,完成了第一级的分解,提到的算法框架为:
框架
i=1; While(i<=6) //须要输出6行 { 输出第i行; 换行; ++i; }
先输出若干空格(多少个空格?第1行0个,第2行1个,第3行2……第6行5个); 再输出若干个星号(多少星号?第一行11个,第2行9个……第6行1个)其实把空格数和星号数和表示行数的变量 i 挂起钩来,上面的“若干个”能够用 i 表示出来,简单地作些推算能够写出式子。
先输出 i-1 个空格; 再输出 2*(6-i)+1 个星号;因而,算法就是:
i=1; While(i<=6) //须要输出6行 { //输出第i行 先输出 i-1 个空格; 再输出 2*(6-i)+1 个星号; 换行; ++i; }将输出若干个空格/星号等写成代码,获得了下面的代码
//参考解答一 #include <stdio.h> int main( ) { int i,j; i=1; while(i<=6) //须要输出6行 { //输出第i行 for(j=1; j<=i-1; ++j) printf(" ");; for(j=1; j<=2*(6-i)+1; ++j) printf("*");; printf("\n"); ++i; } return 0; }
//参考解答二 #include <stdio.h> int main( ) { int i,j,n=15; //用n来灵活对待可能的行数 for(i=1;i<=n;++i) //将上一种解法中的while循环改造为for循环 { //输出第i行 for(j=1; j<=i-1; ++j) //内层的这个for循环能够写做while循环 printf(" ");; for(j=1; j<=2*(n-i)+1; ++j) //这儿也能够用其余循环,可尝试改造 printf("*");; printf("\n"); } return 0; }
//参考解答三 #include <stdio.h> int main( ) { int i,j,n=6; for(i=n;i>=1;--i) //i由大变小 { //输出第i行 for(j=1; j<=n-i; ++j) //关键:输出的是n-i个空格 printf(" ");; for(j=1; j<=2*i-1; ++j) //关键:输出的是2*i-1个星号 printf("*");; printf("\n"); } return 0; }其余的星号图,思路相似。