读书人

一个循环语句的练习题敢不敢和小弟我

发布时间: 2012-04-02 19:58:59 作者: rapoo

一个循环语句的练习题,敢不敢和我较量一下。我想知道有没有更简单的算法。
题目如下:
编写一个程序,它能够读入一个正方形的边长,然后输出一个有星号和空格组成的、边长为刚刚读入边长的空心正方形。该程序应可以处理边长在1-20之间的所有正方形。例如,程序读入的边长是5,那么它应输出如下的空心正方形:
*****
* *
* *
* *
*****
下面是我写的代码,大致思路是:用到两个嵌套的while语句,外层语句负责打印第一列和最后一列星号以及换行。里层语句负责打印其他星号和空格。由于边长为1时比较特殊,所以单列出来。
#include <iostream>
using std::cout;
using std::cin;
using std::endl;

int main()
{
int b,I,i;//分别声明正方形边长变量b,和两个计数变量

cout << "请输入正方形的边长(1-20)" << endl;
cin >> b;
//有效性确认
while ( b < 1 )
{
cout << "非法输入,请重新输入!";
cin >> b;
}
while ( b > 20 )
{
cout << "非法输入,请重新输入!";
cin >> b;
}
//当边长为1时
if ( b == 1 )
{
cout << "*" << endl;
return 0;
}
//嵌套的循环
I = b;
while ( I >= 1 )
{
cout << "*";//打印第一列星号
i = b;
while ( i >= 3 )
{
//第一行和最后一行打印星号,其余行打印空格
if ( I == b )
cout << "*";
else if ( I == 1 )
cout << "*";
else
cout << " ";
i--;
}
cout << "*" << endl;//打印最后一列星号并换行
I--;
}
return 0;
}

[解决办法]

C/C++ code
#include <iostream>using namespace std;int main(){    int n;    cin >> n;    if (n==1)    {        cout << "*" << endl;        return 0;    }    else    {        int i,j;        for (j=1;j<=n;j++)            cout << "*";        cout << endl;        for (i=2;i<=n-1;i++)        {            cout << "*";            for (j=2;j<=n-1;j++)                cout << " ";            cout << "*";            cout << endl;        }        for (j=1;j<=n;j++)            cout << "*";        cout << endl;        return 0;    }}
[解决办法]
好吧,算我欺负你
C/C++ code
#include "stdafx.h"#include <iostream>int _tmain(int argc, _TCHAR* argv[]){    int length = 0;    std::cin >> length;    char *buff = new char[length + 1];    buff[length] = 0;    memset(buff, '*', length);    std::cout << buff << std::endl;    memset(buff + 1, ' ', length -2);    for (int index = 0; index < length - 2 ; ++index)    {        std::cout << buff << std::endl;    }    memset(buff, '*', length);    std::cout << buff << std::endl;    system("pause");    return 0;}
[解决办法]
for(int y=0;y<len;y++)
{
for(int x=0;x<len+1;x++)
{
if(x==len+1) cout<<"\n"
else if(x==y && x!=1 && x!=len) cout<<" ";
else cout<<"*"
}
}
//当然容易命中的条件应该放于优先处,先判"*"的再判" "的再"\n"的
//足见代码长度和效率是两回事

读书人网 >C++

热点推荐