问题标题: 酷町堂:可以加到 60 豆---打印图形预习

0
0
已解决
陈曦
陈曦
资深天翼
资深天翼

求打印图形预习的材料。

我会在 7.4 的 8 点前采纳。

陈曦在2020-07-24 10:14:49追加了内容

@李素妍 

是的

陈曦在2020-07-24 11:35:45追加了内容

@董宇昊 


1
已采纳
刘承志
刘承志
中级光能
中级光能

打印图形课堂讲义(v2)

打印图形课后讲义

引言

 
如果让你输出一个有规律的形状,比如这样的三角形:

*
**
***
****

 
或这样的正方形:

* * * *
*     *
*     *
* * * *

 
你知道怎么编程输出吗?

 

一、课堂知识

1. 右对齐、位宽

-. 右对齐表示的是计算机在输出的时候,为每个数保留一定的位宽。
-. 位宽表示的是电脑提前给准备好的位置,如果位置多了就空着,位置不够就继续加位置。
 
比如右对齐输出一个位宽为10的“Hello”:

 

Hello //Hello的前面是5个空格

 

2. 位宽函数

setw() 这个函数可以限制输出的位宽,使用格式如下:

 

cout<<setw(n)<<a; //在输出变量a的时候显示位宽至少为n

如果a的长度不超过n,则a会按照n格来右对齐显示(自动在前面补空格),
如果a的长度不超过n,则a全部显示(不会截断),
如:

 

cout<<setw(5)<<123; //输出的是2个空格和123 cout<<setw(5)<<123456; //输出的是123456

 

使用setw( )函数需要包含头文件

 

#include <iomanip>

io代表输入输出,manip是manipulator(操纵器)的缩写,它是I/O流控制头文件,声明一些流操作符,使用setw(x)函数,则应该包含此头文件。
 

二、 课堂练习

 
4549 打印直角三角形

 

#include<iostream> using namespace std; int main(){ int n; cin>>n; for(int i=1;i<=n;i++){ for(int j=1;j<=i;j++){ cout<<"*"; } cout<<endl; } return 0; }

 

4550 打印直角三角形
题解: 我们可以把这个图形看成是n行右对齐的“*”串,位宽都是n。
则只要构造每一行的“*”串(定义一个“*”的初始串,然后不断增加),配合位宽函数输出即可。

 

#include <iostream> #include <iomanip> using namespace std; int main() { int n; string s ="*"; //构造星号串 cin >> n; for(int i=1; i<=n; i++) { cout << setw(n) << s << endl; //位宽为n右对齐输出 s+="*"; //逐行增加 } return 0; }

 

题解: 此题和上一题一样,依然是输出n行,每行右对齐输出位宽为n的字符串。不过这里字符串的变化稍复杂些罢了。
方法一:

 

#include <iostream> #include <string> #include <iomanip> using namespace std; int main() { int n; string s=""; char c='0'; cin >> n; for(int i=1; i<=n; i++) { s+=c; cout << setw(n) << s << endl; if(c=='9') c='A'; else if(c=='Z') c='a'; else c++; } return 0; }

 

方法二:

 

#include <iostream> #include <string> #include <iomanip> using namespace std; string s = " 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; //注意第一个字符是空格 int main() { int n; string t=""; cin >> n; for(int i=1; i<=n; i++) { t+=s[i]; cout << setw(n) << t << endl; } return 0; }

 

方法三:

 

#include <iostream> #include <string> #include <iomanip> using namespace std; string s = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; int main() { int n; cin >> n; for(int i=1; i<=n; i++) { cout << setw(n) << s.substr(0,i) << endl; } return 0; }

 

3982 打印梯形2

 

#include <iostream> #include <string> #include <iomanip> using namespace std; int main() { int n; cin >> n; string s=""; for(int i=1;i<=n;i++) { s+="*"; } //构造一个长度为n的星号字符串 int m=n*2-1; //第一行的位宽 for(int i=1;i<=n;i++){ cout<<setw(m)<<s<<endl; m++; //下一行位宽+1 s+="**"; //下一行字符串多两个'*' } return 0; }

 

0
0
0
王子逸
王子逸
新手天翼
新手天翼

就是for多重循环 判断

不难 可以说简单的要死

0
徐紫尘
徐紫尘
高级光能
高级光能

讲义:

打印图形课堂讲义(v2)

打印图形课后讲义

引言

 
如果让你输出一个有规律的形状,比如这样的三角形:

*
**
***
****

 
或这样的正方形:

* * * *
*     *
*     *
* * * *

 
你知道怎么编程输出吗?

 

一、课堂知识

1. 右对齐、位宽

-. 右对齐表示的是计算机在输出的时候,为每个数保留一定的位宽。
-. 位宽表示的是电脑提前给准备好的位置,如果位置多了就空着,位置不够就继续加位置。
 
比如右对齐输出一个位宽为10的“Hello”:

 

Hello //Hello的前面是5个空格

 

2. 位宽函数

setw() 这个函数可以限制输出的位宽,使用格式如下:

 

cout<<setw(n)<<a; //在输出变量a的时候显示位宽至少为n

如果a的长度不超过n,则a会按照n格来右对齐显示(自动在前面补空格),
如果a的长度不超过n,则a全部显示(不会截断),
如:

 

cout<<setw(5)<<123; //输出的是2个空格和123 cout<<setw(5)<<123456; //输出的是123456

 

使用setw( )函数需要包含头文件

 

#include <iomanip>

io代表输入输出,manip是manipulator(操纵器)的缩写,它是I/O流控制头文件,声明一些流操作符,使用setw(x)函数,则应该包含此头文件。
 

二、 课堂练习

 
4549 打印直角三角形

 

#include<iostream> using namespace std; int main(){ int n; cin>>n; for(int i=1;i<=n;i++){ for(int j=1;j<=i;j++){ cout<<"*"; } cout<<endl; } return 0; }

 

4550 打印直角三角形
题解: 我们可以把这个图形看成是n行右对齐的“*”串,位宽都是n。
则只要构造每一行的“*”串(定义一个“*”的初始串,然后不断增加),配合位宽函数输出即可。

 

#include <iostream> #include <iomanip> using namespace std; int main() { int n; string s ="*"; //构造星号串 cin >> n; for(int i=1; i<=n; i++) { cout << setw(n) << s << endl; //位宽为n右对齐输出 s+="*"; //逐行增加 } return 0; }

 

题解: 此题和上一题一样,依然是输出n行,每行右对齐输出位宽为n的字符串。不过这里字符串的变化稍复杂些罢了。
方法一:

 

#include <iostream> #include <string> #include <iomanip> using namespace std; int main() { int n; string s=""; char c='0'; cin >> n; for(int i=1; i<=n; i++) { s+=c; cout << setw(n) << s << endl; if(c=='9') c='A'; else if(c=='Z') c='a'; else c++; } return 0; }

 

方法二:

 

#include <iostream> #include <string> #include <iomanip> using namespace std; string s = " 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; //注意第一个字符是空格 int main() { int n; string t=""; cin >> n; for(int i=1; i<=n; i++) { t+=s[i]; cout << setw(n) << t << endl; } return 0; }

 

方法三:

 

#include <iostream> #include <string> #include <iomanip> using namespace std; string s = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; int main() { int n; cin >> n; for(int i=1; i<=n; i++) { cout << setw(n) << s.substr(0,i) << endl; } return 0; }

 

3982 打印梯形2

 

#include <iostream> #include <string> #include <iomanip> using namespace std; int main() { int n; cin >> n; string s=""; for(int i=1;i<=n;i++) { s+="*"; } //构造一个长度为n的星号字符串 int m=n*2-1; //第一行的位宽 for(int i=1;i<=n;i++){ cout<<setw(m)<<s<<endl; m++; //下一行位宽+1 s+="**"; //下一行字符串多两个'*' } return 0; }

0
徐紫尘
徐紫尘
高级光能
高级光能

讲义:

打印图形课堂讲义(v2)

打印图形课后讲义

引言

 
如果让你输出一个有规律的形状,比如这样的三角形:

*
**
***
****

 
或这样的正方形:

* * * *
*     *
*     *
* * * *

 
你知道怎么编程输出吗?

 

一、课堂知识

1. 右对齐、位宽

-. 右对齐表示的是计算机在输出的时候,为每个数保留一定的位宽。
-. 位宽表示的是电脑提前给准备好的位置,如果位置多了就空着,位置不够就继续加位置。
 
比如右对齐输出一个位宽为10的“Hello”:

 

Hello //Hello的前面是5个空格

 

2. 位宽函数

setw() 这个函数可以限制输出的位宽,使用格式如下:

 

cout<<setw(n)<<a; //在输出变量a的时候显示位宽至少为n

如果a的长度不超过n,则a会按照n格来右对齐显示(自动在前面补空格),
如果a的长度不超过n,则a全部显示(不会截断),
如:

 

cout<<setw(5)<<123; //输出的是2个空格和123 cout<<setw(5)<<123456; //输出的是123456

 

使用setw( )函数需要包含头文件

 

#include <iomanip>

io代表输入输出,manip是manipulator(操纵器)的缩写,它是I/O流控制头文件,声明一些流操作符,使用setw(x)函数,则应该包含此头文件。
 

二、 课堂练习

 
4549 打印直角三角形

 

#include<iostream> using namespace std; int main(){ int n; cin>>n; for(int i=1;i<=n;i++){ for(int j=1;j<=i;j++){ cout<<"*"; } cout<<endl; } return 0; }

 

4550 打印直角三角形
题解: 我们可以把这个图形看成是n行右对齐的“*”串,位宽都是n。
则只要构造每一行的“*”串(定义一个“*”的初始串,然后不断增加),配合位宽函数输出即可。

 

#include <iostream> #include <iomanip> using namespace std; int main() { int n; string s ="*"; //构造星号串 cin >> n; for(int i=1; i<=n; i++) { cout << setw(n) << s << endl; //位宽为n右对齐输出 s+="*"; //逐行增加 } return 0; }

 

题解: 此题和上一题一样,依然是输出n行,每行右对齐输出位宽为n的字符串。不过这里字符串的变化稍复杂些罢了。
方法一:

 

#include <iostream> #include <string> #include <iomanip> using namespace std; int main() { int n; string s=""; char c='0'; cin >> n; for(int i=1; i<=n; i++) { s+=c; cout << setw(n) << s << endl; if(c=='9') c='A'; else if(c=='Z') c='a'; else c++; } return 0; }

 

方法二:

 

#include <iostream> #include <string> #include <iomanip> using namespace std; string s = " 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; //注意第一个字符是空格 int main() { int n; string t=""; cin >> n; for(int i=1; i<=n; i++) { t+=s[i]; cout << setw(n) << t << endl; } return 0; }

 

方法三:

 

#include <iostream> #include <string> #include <iomanip> using namespace std; string s = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; int main() { int n; cin >> n; for(int i=1; i<=n; i++) { cout << setw(n) << s.substr(0,i) << endl; } return 0; }

 

3982 打印梯形2

 

#include <iostream> #include <string> #include <iomanip> using namespace std; int main() { int n; cin >> n; string s=""; for(int i=1;i<=n;i++) { s+="*"; } //构造一个长度为n的星号字符串 int m=n*2-1; //第一行的位宽 for(int i=1;i<=n;i++){ cout<<setw(m)<<s<<endl; m++; //下一行位宽+1 s+="**"; //下一行字符串多两个'*' } return 0; }

0
0
我要回答