中级光能
打印图形课堂讲义(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; }
高级光能
讲义:
打印图形课堂讲义(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; }
高级光能
讲义:
打印图形课堂讲义(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; }