`

【编程珠玑】第三章 数据决定程序结构

 
阅读更多

一,内容

通过使用恰当的数据结构来替代复杂的代码。

二,习题

1、题目描述:本书出版之时,美国的个人收入所得税分为5种不同的税率,其中最大的税率大约为40%.以前的情况则更为复杂,税率也更高。下面所示的程序文本采用25个if语句的合理方法来计算1978年的美国联邦所得税。税率序列为0.14, 0.15, 0.16, 0.17, 0.18.....。序列中此后的计算大于0.01.有何建议呢?

if income <= 2200

tax = 0;

else if income <= 2700

tax = 0.14 * (income - 2200);

else if income <= 3200

tax = 70 + 0.15 * (income - 2700);

else if income <= 3700

tax = 145 + 0.16 * (income -3200);

else if income <= 4200

tax =225 + 0.17 * (income - 3700);

.......

else

tax =53090 + 0.70 * (income - 102200);

采用二分搜索定位到采用哪个分段函数,然后对应求出结果。

源码:

2、

#include <iostream>
using namespace std;

int main()
{
	int t=0;
	int i,k;
    int  n=10;
 	int c[10]={1,2,3,4,5,6,7,8,9,10};
 	int a[10]={0};
	for(k=1;k<n;++k)
	{
    	for(i=1;i<k;++i)
       		a[k] = a[k-i] * c [i];

		a[k] +=c[k+1];
	}
	for(i=0;i<n;++i)
		cout<<a[i]<<endl;
	
	return 0;
}


3、当要输入数据很多,且没有规律时,可以考虑编写一个格式信函发生器(form letter generator)用于解析格式信函模板(form letter schema)。将数据从控制层分离的好处在于:避免每次针对不同的数据编写不同的代码;当需要改变一些公用文本的输出方式时,直接编辑模板即可,并不需要对数据进行修改

题目要求:输入一个字母,输出一个字符数组,该数组要以图像的方式将该字母的大写打印出来。
对于26个字母,每个字母的外形并没有必然规律可循,最直接方法是编写26个函数,针对特定的字母编写特定的打印程序,这是个体力活,代码数量将非常巨大。联想上面的格式信函编程,可以考虑为字母的外形设计一个定制模板,自己规定一套模板编写的格式,然后写一个解析程序,每次打印字母时,只需解析字母对应的模板即可,这样主要的工作量就花在每个字母模板的编写上,当然模板的编写是相当简单的,将字母图形转化为相应的模板格式即可。例如: 一个字母可以利用length = 12, width = 9的矩阵来表示


x x x x x x x x x
x x x x x x x x x
x x x x x x x x x
x x x
x x x
x x x
x x x
x x x
x x x
x x x x x x x x x
x x x x x x x x x
x x x x x x x x x
任何母都可以在这张表示出来,每个点就像一个像素点。下面就对字母I和L进行模板编码,编码要求
(1)用尽可能简单的方式表示上面的图像;
(2)方便程序解析;
(3)必须适用于所有的情况
根据书上给出的编码结构,上图可表示为:
39x
63b3x3b
39x
编码规则: 第一列表示要打印的行数,,后面的数字代表每行要打印的字符个数,个数后面紧跟要打印的字符,并用空格隔开。这里字母b表示空格。根据上述规则,字母L编码如下
93x6b
39x
x x x
x x x
x x x
x x x
x x x
x x x
x x x
x x x
x x x
x x x x x x x x x
x x x x x x x x x
x x x x x x x x
x

4、日期处理

这里把所有相关的处理函数放出来。



第5题,解法是hash表中带hash。第一个以ic, tic 等做hash

首先根据后缀找到hash_set,再把余下的字段,依次在hash_set中查找,并取出最长的。



6、这个可以用python来写,下面先看一下示例代码。

模板文件/tmp/win03.domain.template



代码


如果采用C++实现,并且${}里面的代单词表明是要被替换的单词。那么处理方法如下:



7、略去,比较扯

8、2^16 = 65536个数。所以5个七段显示器肯定是够用的。

因为最大的数 65535 有五位数。

#include <iostream>
#include <memory>
using namespace std;

void  showNumber(int i)
{
	int j=i;
	switch(j)
	{
		case 0:printf(" --\n");break;
		case 1:printf("|");break;
		case 2:printf("  |\n");break;
		case 3:printf(" --\n");break;
		case 4:printf("|");break;
		case 5:printf("  |\n");break;
		case 6:printf(" --\n");break;
		default :break; 
	};
}
void  showNullNumber(int i)
{
	switch(i)
	{
		case 0:printf("\n");break;
		case 1:printf(" ");break;
		case 2:printf("   \n");break;
		case 3:printf("");break;
		case 4:printf(" ");break;
		case 5:printf("   \n");break;
		case 6:printf("\n");break;
		default :break; 
	};
}

void GraphFigure(int i)
{
	int show[7];
	int show0[]={1,1,1,0,1,1,1};
	int show1[]={0,1,0,0,1,0,0};
	int show2[]={1,0,1,1,1,0,1};
	int show3[]={1,0,1,1,0,1,1};
	int show4[]={0,1,1,1,0,1,0};
	int show5[]={1,1,0,1,0,1,1};
	int show6[]={1,1,0,1,1,1,1};
	int show7[]={1,0,1,0,0,1,0};
	int show8[]={1,1,1,1,1,1,1};
	int show9[]={1,1,1,1,1,0,1};
	
	
	switch(i)
	{
		case 0:memcpy(show,show0,sizeof(show));break;
		case 1:memcpy(show,show1,sizeof(show));break;
		case 2:memcpy(show,show2,sizeof(show));break;
		case 3:memcpy(show,show3,sizeof(show));break;
		case 4:memcpy(show,show4,sizeof(show));break;
		case 5:memcpy(show,show5,sizeof(show));break;
		case 6:memcpy(show,show6,sizeof(show));break;
		case 7:memcpy(show,show7,sizeof(show));break;
		case 8:memcpy(show,show8,sizeof(show));break;
		case 9:memcpy(show,show9,sizeof(show));break;
		default :break; 
	};
	for(int i=0;i<7;++i)
	{
		if(1 == show[i])
			showNumber(i);
		else
			showNullNumber(i);
	}

}
int main()
{
   for(int i=0;i<10;++i)
   {	
       GraphFigure(i);
       cout<<"\n\n";
   	
   }
	return 0;
}


分享到:
评论

相关推荐

    编程珠玑 第2版(修订版)_编程珠玑修订_资料_

    《编程珠玑》一书将这些技巧和经验整理成章,涵盖了算法、数据结构、性能优化、代码质量等多个方面,是程序员自我提升的重要参考资料。书中强调的问题求解策略和程序设计思想,对于初学者和资深开发者都有很大的启发...

    编程珠玑(第二版)答案

    根据提供的标题“编程珠玑(第二版)答案”和描述“编程珠玑(第二版)答案”,我们可以推测出这是关于《编程珠玑》这本书的相关解答资料。《编程珠玑》是一本经典的计算机科学书籍,作者为Jon Bentley。本书旨在...

    编程珠玑 Programming Pearls 第二版(中文版+源代码)

    3. **数据结构的应用**:书中详细讲解了各种数据结构,如数组、链表、树、图等,并探讨了它们在特定问题中的适用性。例如,B树和B+树在数据库索引中的应用,哈希表在快速查找中的作用。 4. **编程语言选择**:虽然...

    编程珠玑 第二版 修订版

    第3章 数据决定程序结构 21 3.1 一个调查程序 21 3.2 格式信函编程 23 3.3 一组示例 25 3.4 结构化数据 26 3.5 用于特殊数据的强大工具 27 3.6 原理 28 3.7 习题 29 3.8 深入阅读 30 第4章 编写正确的程序...

    编程珠玑 第二版 修订版 epub

    如何高效地读写数据,减少磁盘访问,提高程序响应速度,这些都是《编程珠玑》所关注的问题。 4. **问题分解与设计模式**:书中强调了将复杂问题分解为可管理部分的重要性,同时也介绍了设计模式的概念,如工厂模式...

    编程珠玑第2版(中文pdf版)

    数据结构是程序设计的核心组成部分之一,《编程珠玑》第二版中也对此做了详尽的讲解。书中介绍了数组、链表、树、图等常见数据结构,并且深入分析了它们各自的优缺点以及适用场景。此外,还讨论了如何选择合适的数据...

    《编程珠玑》第2版中文PDF+源代码

    《编程珠玑》的核心内容围绕着数据结构、算法优化以及问题解决策略展开。书中的每个章节都精心设计了一组编程挑战,旨在帮助读者提高分析和解决问题的能力。以下是该书的一些主要知识点: 1. **数据结构与算法**:...

    编程珠玑第二版英文版 带源码

    《编程珠玑第二版英文版》是一本深受程序员喜爱的经典著作,由Jon Bentley 所著。这本书以其深入浅出的方式探讨了程序设计的艺术,通过一系列精心挑选的问题和解决方案,揭示了编程中的智慧与技巧。书中的每个章节都...

    编程珠玑源代码

    《编程珠玑源代码》是针对经典书籍《编程珠玑》第二版的源代码集合,主要涵盖C语言和C++编程。这本书以其独特的视角和深入浅出的讲解方式,深受程序员喜爱,尤其对于数据结构、算法和程序设计思维的提升有着重要的...

    编程珠玑中文 第二版 非扫描版

    在《编程珠玑》中,你将学习到如何处理大量数据,如何设计高效的输入/输出策略,以及如何利用空间和时间复杂度的权衡来优化程序。这些问题在大数据处理、云计算和现代软件工程中都是至关重要的。书中还讨论了如何...

    编程珠玑(第二版).pdf

    《编程珠玑(第二版)》是一本深受程序员喜爱的经典著作,它由Jon Bentley 所著,详尽探讨了程序设计中的效率问题和算法优化。这本书不仅提供了实用的编程技巧,还深入浅出地讲解了如何通过巧妙的思维来解决复杂的问题...

    编程珠玑中文版 第二版 带源码

    3. **输入/输出处理**:在实际编程中,高效地处理输入和输出往往被忽视,但《编程珠玑》对此进行了深入探讨,包括缓冲区管理、格式化输出和大规模数据读写策略等。 4. **磁盘I/O优化**:针对磁盘I/O效率低下的问题...

    编程珠玑总结笔记

    这个程序的主要数据结构是一个 n 比特的数组,初始值都为真。每发现一个素数时,数组中所有这个素数的倍数就设置为假。下一个素数就是数组中下一个为真的比特。 代码实现: ```c #include using namespace std; ...

    《编程珠玑》(Programming Pearls)课本和习题代码实现

    3. **column1.cpp**: 第一章通常介绍了一些基础概念,可能是关于程序设计思想的引入,例如代码的简洁性和可读性,以及如何编写高质量的代码。 4. **column15.cpp**: 第十五章可能讨论了字符串处理和模式匹配。书中...

    编程珠玑详解

    第三部分,源代码.rar中包含的源代码示例是书中案例的实现,读者可以对照阅读,加深对理论知识的理解。通过实际操作,读者能够更好地领会书中的编程技巧,并将之应用到自己的项目中。 总之,《编程珠玑》是一本面向...

    《编程珠玑》第二版中文版(含英文版&&源码)

    1. **算法设计与分析**:《编程珠玑》以其独特的视角探讨了如何设计和优化算法,特别是针对数据结构和问题规模的考虑,如排序、搜索等基础算法的改进。 2. **问题分解与抽象**:书中强调将复杂问题分解为更小、更易...

    编程珠玑 中英文 第2版(含源代码)

    3. **程序性能优化**:《编程珠玑》强调了效率的重要性,书中会介绍如何通过优化算法和改进数据结构来提高程序的运行速度和内存使用效率。这对于处理大规模数据或性能敏感的应用尤其重要。 4. **编程艺术**:除了...

    编程珠玑pdf

    《编程珠玑》第二版,由Jon Bentley撰写,是一本被众多顶级大师推荐的经典之作,深入探讨了软件工程中令人着迷的一面——编程技巧与创新思维。本书不仅为学生提供了宝贵的指导,也对经验丰富的程序员有着重要的启示...

    编程珠玑第二版

    《编程珠玑》第二版是一本深受欢迎的计算机科学与编程的经典著作,它不仅涵盖了算法设计和分析的基础,还深入探讨了程序设计的艺术与实践。这本书由Jon Bentley编著,以其独特的视角和实用的示例,揭示了如何解决...

Global site tag (gtag.js) - Google Analytics