一.C++刷题
1、MT1016宽度与对齐
输出455、-123、987654,宽度为5,分别左对齐和右对齐
格式
输入格式:
无
输出格式:
输出为整型,空格分隔。每个数的输出占一行
样例 1
输入:
无
输出:
455 455 -123 -123 987654 987654
解决思路
使用c++中的setw()函数实现题目对宽度的要求,然后使用left和right控制对齐方式,最后输入题目中所给出的数字。
尝试实现过程
参考网站:C++ setw() 函数 | 菜鸟教程 (runoob.com)
C++中setw() 函数用于设置字段的宽度
语法格式:setw(n)。其中,n 表示宽度,用数字表示。
setw() 函数只对紧接着的输出产生作用。
注意:当后面紧跟着的输出字段长度小于 n 的时候,在该字段前面用空格补齐,当输出字段长度大于 n 时,全部整体输出。
注意:setw()函数默认向右对齐。
所以,依照上述的学习, 可以得到代码如下:
#include<bits/stdc++.h>
using namespace std;
int main( )
{
cout << "455" << setw(8) << "455" << endl ;
cout << "-123" << setw(7) << "-123" << endl ;
cout << "987654" << setw(7) << "987654" << endl ;
return 0;
}
虽然上面这串代码可以在码题集通过,但是这串代码是通过预期输出慢慢尝试出来的,所以并不是正确答案,所以,我就开始查询别人的思路了。
网上有位博主的思路是使用setw()函数限制字段的宽度,然后使用left和right进行限制对齐的方式,最后输入题目要求的数字。依据这个思路,实现了题目要求:
代码实现
#include<bits/stdc++.h>
using namespace std;
int main( )
{
// cout << "455" << setw(8) << "455" << endl ;
// cout << "-123" << setw(7) << "-123" << endl ;
// cout << "987654" << setw(7) << "987654" << endl ;
//将输出全部修改为整型
cout << setw(5) << left << 455 << " " << setw(5) << right << 455 << endl ;
cout << setw(5) << left << -123 << " " << setw(5) << right << -123 << endl ;
cout << setw(5) << left << 987654 << " " << setw(5) << right << 987654 << endl ;
/*cout<<setw(5)<<left<<455<<" "<<setw(5)<<right<<455<<endl的解释:
cout 是C++标准库中的输出流对象,用于向控制台输出信息。
setw(n) 是iomanip库中的函数,用于设置输出字段宽度为n个字符。在这个例子中,setw(5) 表示设置输出字段宽度为5个字符。
left 和 right 是iomanip库中的控制符,用于指定输出字段的对齐方式。left 表示左对齐,right 表示右对齐。
在这个例子中,<< 是C++中的流插入运算符,用于将输出内容插入到输出流中。
所以,cout<<setw(5)<<left<<455<<" "<<setw(5)<<right<<455<<endl; 的意思是:先设置输出字段宽度为5个字符,并将数字455左对齐输出,然后输出一个空格,接着设置输出字段宽度为5个字符,并将数字455右对齐输出,最后输出换行符endl。*/
return 0;
}
2、MT1017左右对齐
输出3.1415926、22.3456,宽度为14,精度为6,分别左对齐和右对齐。
格式
输入格式:
无
输出格式:
输出为实型,空格分隔。每个数的输出占一行。
样例 1
输入:
无
输出:
3.141593 3.141593 22.345600 22.345600
解决思路
使用c++中的setw()函数实现题目对宽度的要求,使用left和right控制对齐方式,然后使用fixed进行精度的设置,最后输入题目中所给出的数字。
尝试实现过程
本题比上一道题多设置了一个精度的要求,所以首先需要学习可以控制精度的函数。
通过查找资料,学习了fixed和setprecision(),简单的概括它们的作用,
fixed用来设置浮点数的小数位为6位,fixed和setprecision()连用可以控制浮点数后小数点的位数。
例如:
a = 123
cout << fixed << a << endl ;
结果就为123.000000
a = 123
cout << fixed << setprecision(2) << a << endl ;
结果为123.00
依照上述内容,首先写出代码,如下:
#include<bits/stdc++.h>
using namespace std;
int main( )
{
cout << setw(14) << left << fixed << "3.141593" << " " << setw(14) << right << fixed << "3.141593" << endl ;
cout << setw(14) << left << fixed << "22.3456" << " " << setw(14) << right << fixed << "22.3456" << endl ;
return 0;
}
上述代码的思路看起来是正确的,但是却无法输出想要的结果(输出的结果为22.3456),这是因为我在输出的时候设置的是字符串,而不是浮点数,所以导致无法输出想要的结果,前面的代码正确,可能是刚好碰到了特殊情况。发现了这个问题后,将所有的输出进行修改。
#include<bits/stdc++.h>
using namespace std;
int main( )
{
// double b = 22.3456;
cout << setw(14) << left << fixed << 3.141593 << " " << setw(14) << right << fixed << 3.141593 << endl ;
cout << setw(14) << left << fixed << 22.3456 << " " << setw(14) << right << fixed << 22.3456 << endl ;
// cout << fixed << b << endl;
return 0;
}
成功实现题目要求。
二.清零程序。编写程序将 20H 开始的 32 个单元清零。
参考程序
尝试实现代码
;编写程序将 20H 开始的 32 个单元清零
START:
MOV R0,#20H
MOV R2,#32
;MOV 20H,#0 首先给单元赋值,再验证是否成功置零
;MOV 21H,#1
;MOV 22H,#2
;MOV 23H,#3
;MOV 24H,#4
;MOV 25H,#5
LOOP:
MOV @R0,#0
INC R0
DJNZ R2,LOOP
END
成功实现清零。
明天继续吧。