猿问

C++小题目,有没有会做的?

C++小题目

  • 问题描述:

输入:一个任意整数N(0<N<20)

输出:首先打印整数N和冒号并换行;然后打印N*N的“*”符号的矩阵,如下面两幅图:


http://img.mukewang.com/59940e3b0001600701710265.jpg

  • 特殊要求:代码中不许用到任何循环语句(for, while, do while等),也不许使用条件分支语句(if, switch 等)

  • 提示:没有任何提示!  <(▰˘◡˘▰)>

优先采纳最简单的解决方法(使用的函数越少,引用的库越少即为简单)  

最好附上你们的代码哟 (。・`ω´・)



----------------------------------------------------------------------------------

--------------------------                  分割线                --------------------------

----------------------------------------------------------------------------------


我自己的答案:

    C++是面向对象的语言,解决问题时,我们应该用面向对象的思想来思考。

    分析题目要求,输入整数N,要输出N*N的“*”矩阵,平时我们可以用循环很简单地解决这个问题,但是这种方法是面向过程的,这样解决问题和C语言没有什么区别了。

    为了利用C++面向对象的特性,我们可以将每一行“**……**\n”视为一个对象,这些相同的对象属于同一个Row类,所以输出N行字符就是创建N个Row类的对象;在每一行中,又有N个“*”,我们还是可以将其视为对象,让它们属于Star类。每创建一个Row类对象时,就相当于创建了N个Star类对象(加上一个 '\n')。

代码实现:

#include <iostream>
using namespace std;

int n = 0;

class Star{
public:
    Star(){cout << "*";}
};

class Row{
public:
    Row() {
        Star star[n];
        cout << endl;
    }
};

int main() {
    cout << "Input a number :";
    cin >> n;
    cout << n << ":" << endl;
    Row row[n];
    return 0;
}

面向对象思想使代码开发模块化,更易维护和修改。增强代码的可靠性和灵活性。增加代码的可理解性。

以上是我的愚见,有不对的地方还请大家指教!(●'◡'●)ノ♥

天将明96
浏览 2242回答 3
3回答

fatewa

#include<iostream> using namespace std; int row(int n){     cout<<'*';     n = n -1;   return n==0?0:row(n); } int Print(int n,int count){         row(count);         cout<<endl;         n =  n - 1;         return n==0?0:Print(n,count); }   int main(void){     int n = 0;     cout<<"Input a number :";     cin>>n;     cout<<n<<":"<<endl;     Print(n,n);     return 0; }就是这个咯 最简单的实现 数组也免了

fatewa

二维数组可以做但是不用循环代码量扎心

什么鬼_呀你

memset函数
随时随地看视频慕课网APP
我要回答