C++用*和空格输出一个正方形及其对角线
零基础起步程序猿,人生中第一个博客,主要是记录一些从开始到以后的生活日常叭,emmm还是有些小忐忑…
废话不说,直接开始
先放代码再说
#include<iostream>
using namespace std;
int main()//主函数
{
int n,i,j,k;//定义四个整型变量
cin>>n;//输入正方形的边长n
for(i=1;i<=n;i++)//for的外层循环,用来控制正方形的行数
{
if(i==1||i==n)//利用if else循环语句将正方形分割为首行、末行类型相同一个循环,中间几行一个循环
{
for(j=1;j<=n;j++)//在首行和末行中,连续循环* 直到边长数n,即完成正方形首行和末行输出
cout<<"* ";
cout<<endl;//输出n个* 后,换行
}
else//当n是中间几行时,再把其分为 ①最左侧* 的输出 ②中间对角线上* 的输出 ③最右侧* 的输出
{
cout<<"* ";//①输出最左端的*
for(k=1;k<=n-2;k++)// ②对于对角线上的输出采用循环:k<=n-2指中间的行数,即循环的次数
{
if(k==i-1)//在小循环内,用if控制* 输出的位置,当k=行数-1时输出* ,其余的继续循环for,输出空格,直到不符合条件
cout<<"* ";
else
cout<<" ";
}
cout<<"*"<<endl;// ③最右侧输出*
}
}
return 0;
}
运行结果:
另一种
#include<iostream>
using namespace std;
int main()
{
int a;
cout << "请输入正方形的行列数a(1<=a<=10)\n";
cin >> a;
int i, j;
for (i = 1; i <= a; i++)
{
for (j = 1; j <= a; j++)
{
if (i == 1 || i == a)
cout << "* ";
else
{
if (j == 1 || j == a)
cout << "* ";
else
{
if (j == i)
cout << "* ";
else
cout << " ";
}
}
}
cout << endl;
}
return 0;
}
分析代码思路:
首先确定是循环结构(基于只学到了for循环,数组以后再说😀)
首行,末行形式相同,可用一个循环。
中间行最左侧和最右侧相同,而对角线输出则按照一定规律,则可用一个循环的嵌套。
for()//外层,控制行数。
{
if()
{ for() }
cout//首行和尾行的输出
else//中间行输出
cout//最左侧输出
for()//对角线输出
cout//最右侧输出
}
这是大致框架
下面分析外层for里面的两个部分:
1. if 的要求是能输出正方形的首行和尾行,则判断可写为:
if(i==1||i==n)
之后进行首行,尾行的循环
for(j=1; j<=n; j++)
cout<<"* ";
cout<<endl;
2. else这里用来分隔中间几行代码的输入。
第一部分:
最左侧输出
cout<<"* ";
第二部分:
对角线输出
for(k=1; k<=n-2; k++)// 对于对角线上的输出采用循环:控制条件 k<=n-2指中间行数,即小循环的次数
{
if(k==i-1)
cout<<"* ";
else
cout<<" ";
//在小循环内,用if控制对角线上* 输出的位置,观察规律,当 k=行数-1时输出* ,其余的继续循环for,输出空格,直到不符合条件(指行数被循环完)
}
第三部分:
最右侧输出
cout<<"*"<<endl;
注:这三部分是并列关系。
最后,将以上所有归入最外层for循环中就okk啦~