课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565
【项目1-调用函数输出星号图】
这一组的练习意在通过调用函数输出星号图,体会与理解函数的工作过程,并为其后编制自定义函数实现特定功能,打下基础。
任务1:补充完下面的程序,使程序输出上面的两个星号图,要求在main()函数中调用自定义函数printstars()。
要求:左图必需实现,右图尝试实现。
输出左图的参考解答:
//for循环中调用函数printstars的程序 #include <iostream> using namespace std; void printstars(int m) //定义能输出一行m个星号的函数 { for (int j=1; j<=m; ++j) cout<<'*'; } int main( ) { int i,n=6; //n代表要输出的行数 //请在下面构造循环,调用printstars()输出每一行的星号 for(i=1;i<=6;++i) { printstars(2*i-1); //对第i行,输出2*i-1个星号 cout<<endl; //换行 } return 0; }
回答:实现右图遇到了什么困难?如何解决,有何办法?用你想到的办法尝试一下。
进一步提示:如果要输出的不是星号(*)图,而是井号(#)图,该如何改上面的程序?试着实施一下。
仔细思考上述问题发现,printstars()函数只能输出星号(*),当要输出空格、井号时,不好实现了,希望有个能输出任意符号的函数。
任务2:请先阅读已经定义好的函数printchs(),然后利用这个函数输出星号图:
要求:分别编程序,输出左右两个星号图;
输出左图的参考代码:
//for循环中调用函数printchs的程序 #include <iostream> using namespace std; void printchs(char c, int m) //定义能输出一行m个字符c的函数 { for (int j=1; j<=m; ++j) cout<< c; cout<<endl; } int main( ) { int i,n=6; //n代表要输出的行数 //请在下面构造循环,调用printchs()输出每一行的星号 for(i=1;i<=6;++i) { printchs('*',2*i-1); //对第i行,输出2*i-1个星号,调用需要两个实参 } return 0; }
输出右图,需要在每一行中,先输出若干空格,再输出若干星号,调用两次printchs()。由于cout<<endl;被执行两次,将其放到main函数的循环中,而不是函数中。参考代码如下:
//for循环中调用函数printchs的程序 #include <iostream> using namespace std; void printchs(char c, int m) //定义能输出一行m个字符c的函数 { for (int j=1; j<=m; ++j) cout<< c; } int main( ) { int i,n=6; //n代表要输出的行数 for(i=1;i<=n;++i) { printchs(' ',n-i); //第i行要先输出些空格 printchs('*',2*i-1); //对第i行,输出2*i-1个星号,调用需要两个实参 cout<<endl; } return 0; }
进一步要求:有了printchs()函数,这儿的处理比任务1要方便了很多。如果要输出的不是星号(*)图,而是井号(#)图,该如何改上面的程序?试着实施一下。
任务3:在由多个函数构成的程序中,程序员常用的做法是,main()函数先定义,其他自定义函数后定义,这时必须在main()函数前声明自定义的函数(请详读教材4.4.3小节)。按这个要求,重写上面任务2中的程序。
//for循环中调用函数printchs的程序 #include <iostream> using namespace std; void printchs(char c, int m);//函数的声明,函数原型 int main( ) { int i,n=6; for(i=1;i<=n;++i) { printchs(' ',n-i); printchs('*',2*i-1); //对第i行,输出2*i-1个星号,调用需要两个实参 cout<<endl; } return 0; } void printchs(char c, int m) //函数的定义 { for (int j=1; j<=m; ++j) cout<< c; }