其实内容都很简单,只是想记录一下自己的学习经历和总结一些方法。
首先说一下解决问题的一些方法。自顶向下求解。也就是说从结果出发,倒推代码的书写过程,可能写短代码感觉不到逻辑的重要性,但是写的代码如果很长,那么肯定要先设计步骤,分解问题。
我给的是输出结果:要求我们安装图示的要求打印出字符表。其实这个问题很简单。
但是我认为强制的分析下过程,加深自己的理解。按照我开始写的,自顶向下求解。所以先是观察输出结果。根据高中锻炼的知识,大多数人都知道如何观察表格数据。一般来说,无非就是横向和纵向观察。
横向看一下:0,16,32.这个暗示还是很明显的啦。估计对数字敏感的人一下就知道是等差数列了,公差为16.基于计算机是横向打印的,你可以猜测出存在于类似i+=16(i=i+16)的式子。
纵向观察下:好巧,也是等差数列。但是有一点反常的就是。0,1,2竟然是纵向排列,常规不应该是横向的嘛。事出反常必有妖啊。
看完横向纵向,大致可以得出如下信息:有类似步长为16和1的东西。而且应该是两个循环。一个是控制横向打印(步长16)一个控制纵向打印(步长1)。而且循环是嵌套的,不然不相关的两个循环也没啥可说的。
基于常识可以知道一共128个字符,进一步推测循环的范围可能和128有关系,而且有16行,8列,循环范围可能和这两个数字有关系。
补充一个基本只是。char(i)函数可以打印出打印字符,但是非打印字符就打印不出了.怎么解决这个问题?另一个好东西来了。转义(\)。现在我们知道了要把非打印字符单独拿出来设置一下转义。
现在整理一下思路:要按格式打印字符表→用char函数→但是格式有要求→根据观察大致推测一下循环嵌套以及范围→控制下格式→准备打印。
但是一个难点就是如何设置非打印字符??
解决方案:因为字符表是有顺序的,我们可以在添加选择语句,让循环变量进行选择。也就是说循环变量累加到非打印字符时让它单独打印。
下面上代码,首先要明白,代码一般普通人是做不到一次性搞定的,好的代码是改出来的,所以有点思路就开始撸吧。
#include<iostream>
using namespace std;
int main(){
int i=0;
for (int j = 0; j < 16; j++){
i = j;
while (i < 128){
switch (i)
{
case 7:
cout << i << "=" << " \\a" << '\t';
break;
case 8:
cout << i << "=" << "\\b" << '\t';
break;
case 9:
cout << i << "=" << "\\t" << '\t';
break;
case 10:
cout << i << "=" << "\\n" << '\t';
break;
case 11:
cout << i << "=" << "\\v" << '\t';
break;
case 12:
cout << i << "=" << "\\f" << '\t';
break;
case 13:
cout << i << "=" << "\\r" << '\t';
break;
default:
cout << i << "=" << char(i) <<'\t';
}
i = i + 16;
}
cout << endl;
}
return 0;
}
//这种问题重点在于观察输出的格式。还要要知道char(i)函数。计算机都是横向逐行打印。分校代码的打印结果,每行开头是0,16,32,间隔都是16,可以想到是打印char(0),然后是char(16)等等等。
//观察纵向,第一个是0,第二行第一个竟然是1,
//此代码用swithc语句很巧妙实现了非打印字符的输出。
这个我写的代码,大家大致参考下就行。自己回去想办法解决下非打印字符问题吧。方法不唯一,欢迎想到了来分享下。