文档库 最新最全的文档下载
当前位置:文档库 › 第5章 编码

第5章 编码

第5章 编码
第5章 编码

第5章编码

5.1 有人说程序编好后能上机运行就可以了,为什么还要讲究风格和可读性呢?你觉得对吗?为什么?

对于学生的练习题和作业题,程序编好后能上机运行,一般认为任务就完成了。但对于实际开发的项目来说,任务并没有结束。编码人员编写完程序后,要对自己的程序进行单元测试,测试人员要进行集成测试和系统测试,提交用户使用后,还需要对软件进行持续的维护修改工作。在软件开发和维护过程中,都需要阅读程序。道理很简单,如果需要对某段程序进行修改,首先要读懂,阅读程序是软件开发和维护过程中的一个重要组成部分,而且读程序的时间比写程序的时间还要多。所以,程序的风格和可读性很重要,具有良好的程序风格和可读性的程序,有助于对程序的正确理解,可以大大减少阅读理解程序的时间,从而提高维护工作的效率。

5.2 一般情况下,程序的效率和清晰性相比哪一个更重要?

在计算机发展的早期,由于CPU效率低,内存小,程序在运行时容易出现运行时间太长或内存溢出问题。因此,人们在编写程序时,很注重程序的时间效率和空间效率,而不太注重程序的清晰性。

随着计算机硬件性能的飞速发展以及软件规模和复杂性的急剧增加,这种情况已经发生了根本的转变,程序的清晰性越来越受到重视,程序的清晰性不好会给测试、维护修改带来困难,这对于规模庞大和复杂的软件尤其明显。

软件运行的效率主要取决于软件的体系结构及算法,编码阶段虽然也有机会提高效率,但效果并不明显。对于效率没有特殊严格要求的系统来说,要将程序的清晰性放在第一位,在不影响清晰性的情况下,去改进效率。

5.3 程序中的注释是否越多越好?

注释的原则是有助于对程序的阅读理解,注释不宜太多也不能太少,太少不利于代码理解,太多则会对阅读产生干扰,因此只在必要的地方才加注释,而且注释要准确、易懂、尽可能简洁。

5.4 如何提高表达式的可读性?

注意运算符的优先级,并用括号明确表达式的操作顺序,避免使用默认优先级。这是为了防止阅读程序时产生误解。

5.5 将下面的表达式改写成更容易理解的形式。

!((year % 4 ==0 && year % 100 != 0) || year % 400 ==0)

改写后的表达式如下:

(year % 4 !=0 || year % 100 == 0) && year % 400 !=0

5.6 在一行内只写一条语句,并且采取适当的移行格式,使程序的逻辑和功能变得更加明确。许多程序设计语言允许在一行内写多个语句。但这种方式会使程序可读性变差。下面是一段排序程序,请对其编码风格进行改进,以增加其可读性。

for (i=1; i<=n-1; i++) for (j=1; j<=n-i; j++) if (a[j]>a[j+1]) { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp;}

改进后的代码如下:

for (i=1; i<=n-1; i++)

for (j=1; j<=n-i; j++)

if (a[j]>a[j+1])

{

temp=a[j];

a[j]=a[j+1];

a[j+1]=temp;

}

5.7 请对下面代码的布局进行改进,使其符合规范其更容易理解。

for (i=1; i<=n-1; i++){

t=i;

for (j=i+1; j<=n; j++)

if (a[j]

if (t!=i) {

temp=a[t];

a[t]=a[i];

a[i]=temp

}

}

改进后的代码如下:

for (i=1; i<=n-1; i++)

{

t=i;

for (j=i+1; j<=n; j++)

{

if (a[j]

t=j;

}

if (t!=i)

{

temp=a[t];

a[t]=a[i];

a[i]=temp

}

}

5.8使用你熟悉的语言编写出习题4.15的程序,注意编码风格。

下面为使用C语言编写的习题4.15的程序:

#include "math.h"

#include "stdio.h"

#include "stdlib.h"

#include "time.h"

int main()

{

int a[10][10], b[10],c[10];

int i,j,minOfB, maxOfC, result;

/*产生随机数种子*/

srand((unsigned int)time(NULL));

/*建立10 10的二维随机整数数组a*/

for(i=0;i<=9;i++)

for (j=0; j<=9; j++)

a[i][j]=rand()%100+1; /*产生1-100之间的随机数*/ /*求a中每一行的最大值→数组b*/

for (i=0; i<=9; i++)

{ /*求数组a第i行的最大值→b[i] */

b[i]=a[i][0];

for (j=1; j<=9; j++)

if (a[i][j]>b[i]) b[i] = a[i][j];

}

/*求a中每一列的最小值→数组c*/

for (j=0; j<=9; j++)

{ /*求数组a第j列的最小值→c[j]; */

c[j]=a[0][j];

for (i=1; i<=9; i++)

if (a[i][j]

}

/*求数组b中的最小值?minOfB*/

minOfB = b[0];

for (i=1; i<=9; i++)

if (minOfB > b[i]) minOfB = b[i];

/*求数组c中的最大值?maxOfC*/

maxOfC = c[0];

for (i=1; i<=9; i++)

if (maxOfC

result = pow(minOfB- maxOfC, 2);

printf("结果是:%d",result);

return(result);

}

5.9使用你熟悉的语言编写出习题4.16的程序,注意编码风格。

下面为使用C语言编写的习题4.16的程序:

#include "stdio.h"

#include "string.h"

#include "ctype.h"

void main()

{ char a[1000], b[1000], c,e;

int i,n;

gets(a);

n=strlen(a);

if(isalpha(a[0]))

{ a[0]=toupper(a[0]);

b[0]=a[0];

}

for (i=1; i

{ c=a[i];

e=a[i-1];

if (isalpha(c))

{ if(strchr(".?!",e))

c=toupper(c);

else

c=tolower(c);

}

b[i]=c;

}

b[n]='\0';

puts(b);

}

相关文档