【项目:输出星号图】自选下面的几个图案,编程序输出(自选两个完成,其他的想想思路即可)。
(c)“向下的等腰三角”详解
将一个图,看作为6行,完成了第一级的分解,设计的算法框架为:
i=1; While(i<=6) //需要输出6行 { 输出第i行; 换行; ++i; }
对于“输出第i行”的任务,可以进行细化:
先输出若干空格(多少个空格?第1行0个,第2行1个,第3行2……第6行5个); 再输出若干个星号(多少星号?第一行11个,第2行9个……第6行1个)
其实把空格数和星号数和表示行数的变量 i 挂起钩来,上面的“若干个”可以用 i 表示出来,简单地做些推算可以写出式子。
对于“输出第i行”的任务,可以进行细化:
先输出 i-1 个空格; 再输出 2*(6-i)+1 个星号;
于是,算法就是:
i=1; While(i<=6) //需要输出6行 { //输出第i行 先输出 i-1 个空格; 再输出 2*(6-i)+1 个星号; 换行; ++i; }
将输出若干个空格/星号等写成代码,得到了下面的代码
//参考解答一 #include <iostream> using namespace std; int main( ) { int i,j; i=1; while(i<=6) //需要输出6行 { //输出第i行 for(j=1; j<=i-1; ++j) cout<<" "; for(j=1; j<=2*(6-i)+1; ++j) cout<<"*"; cout<<endl; ++i; } return 0; }
下面给出程序的另一种写法,其中引入了两个变化:(1)三角的行数可以由变量n控制;(2)最外层控制输出n行的循环改为了for循环,实际上,内层的循环用while也无不可。
//参考解答二 #include <iostream> using namespace std; 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循环 cout<<" "; for(j=1; j<=2*(n-i)+1; ++j) //这儿也可以用其他循环,可尝试改造 cout<<"*"; cout<<endl; } return 0; }
下面的程序采用的是让控制循环的变量由大变小(与三角上大下小呼应)的思路,相应地,只需要改变控制空格数和星号数的式子即可
//参考解答三 #include <iostream> using namespace std; int main( ) { int i,j,n=6; for(i=n;i>=1;--i) //i由大变小 { //输出第i行 for(j=1; j<=n-i; ++j) //关键:输出的是n-i个空格 cout<<" "; for(j=1; j<=2*i-1; ++j) //关键:输出的是2*i-1个星号 cout<<"*"; cout<<endl; } return 0; }
其他的星号图,思路类似,相信同学们可以独立做出来。
所有三角全解参考:
(1)
要输出的是:
代码:
#include <iostream> using namespace std; int main( ) { int i,j,n=6; for(i=n;i>=1;--i) //一共要输出n行 { //输出第i行 for(j=1; j<=2*i-1; ++j) //输出2*i-1个星号 cout<<"*"; cout<<endl; } return 0; }
(2)
要输出的是:
代码:
#include <iostream> using namespace std; int main( ) { int i,j,n=6; for(i=1;i<=n;++i) //一共要输出n行 { //输出第i行 for(j=1; j<=n-i; ++j) //输出n-i个空格 cout<<" "; for(j=1; j<=i; ++j) //输出i个星号 cout<<"*"; cout<<endl; } return 0; }
(3)
要输出的是:
代码:
#include <iostream> using namespace std; int main( ) { int i,j,n=6; for(i=n;i>=1;--i) //i由大变小 { //输出第i行 for(j=1; j<=n-i; ++j) //关键:输出的是n-i个空格 cout<<" "; for(j=1; j<=2*i-1; ++j) //关键:输出的是2*i-1个星号 cout<<"*"; cout<<endl; } return 0; }
(4)
要输出的是:
代码:
#include <iostream> using namespace std; int main( ) { int i,j,n=6; for(i=1;i<=n;++i) //一共要输出n行 { //输出第i行 for(j=1; j<=n-i; ++j) //输出n-i个空格 cout<<" "; for(j=1; j<=2*i-1; ++j) //输出2*i-1个星号 cout<<"*"; cout<<endl; } return 0; }
(5)
要输出的是:
代码:这一个稍微麻烦一些在于,第1行和最后一行单独处理,而中间的n-2行则有规律:若干空格、1个星号、若干空格、1个星号
#include <iostream> using namespace std; int main( ) { int i,j,n=6; //输出第一行:n-1个空格和1个星号并换行 for(j=1; j<=n-1; ++j) //输出n-i个空格 cout<<" "; cout<<"*"<<endl; //再输出中间的n-2行 for(i=2;i<=n-1;++i) //一共要输出n-2行 { //输出第i行 for(j=1; j<=n-i; ++j) //输出n-i个空格 cout<<" "; cout<<"*"; //再输出一个星号 for(j=1; j<=2*i-3; ++j) //然后输出2*i-3个空格 cout<<" "; cout<<"*"<<endl; //输出一个星号后本行结束,换行 } //输出最后一行:2*n-1个星号 for(j=1; j<=2*n-1; ++j) cout<<"*"; cout<<endl; return 0; }
(6)
要输出的是:
参考代码:
#include <iostream> using namespace std; int main( ) { int i,j,n=6; //n代表上三角行数 //先输出上三角 for(i=1;i<=n;++i) //输出n行 { //输出第i行 for(j=1; j<=n-i; ++j) //输出n-i个空格 cout<<" "; for(j=1; j<=2*i-1; ++j) //输出2*i-1个星号 cout<<"*"; cout<<endl; } //下面输出下三角 for(i=1;i<=n-1;++i) //输出n-1行 { //输出第i行 for(j=1; j<=i; ++j) //输出i个空格 cout<<" "; for(j=1; j<=2*(n-i)-1; ++j) //输出2*i-1个星号 cout<<"*"; cout<<endl; } return 0; }
时间: 2024-10-24 16:33:34