课程首页地址: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;
}