1、计算机软件习题1参考答案1.1解释以下术语(1)计算机软件:计算机软件是一系列按照特定结构组织的程序、数据(Data)和文档(Document)的集合。(2)计算机程序:用计算机语言所编写的一系列指令的集合。(3)数据:数据是程序加工和处理的对象。(4)算法:算法是一组有穷的规则,它们规定了为解决某一特定问题而采取的一系列运算步骤。 (5)数据结构:数据结构是存在一种或多种特定关系的数据元素的集合,其外在表现为数据的组织形式。(6)数据类型:数据类型是一个值的集合和定义在这个值集上的操作的总称。(7)程序设计:程序设计是给出解决特定问题程序的方法和过程,是软件构造活动中的重要组成部分。1.2
2、简答题(1)简述内存的组织结构形式? 计算机系统把内存看作是由若干个连续的存储单元(Storage Location)组成的,每个存储单元的大小为一个字节(Byte)。为了能唯一标志每个存储单元,在计算机系统中给每个存储单元指定一个唯一的编号,该编号被称为存储单元的地址(Address),计算机在读写内存时就是按照存储单元的地址进行的。(2)为什么计算机系统是一个通用的计算系统? 在计算机硬件相对固定不变的前提下,计算机的通用性主要表现在通过运行不同的程序来完成不同的计算任务。(3)简述结构化程序设计的基本思想?在程序设计过程中,如果仅仅使用顺序、选择和循环这三种基本控制结构,并且使每个代码块
3、只有一个入口和一个出口,则这样的程序设计方法被称为结构化程序设计(Structured Programming)。(4)简述计算机语言的发展史? 程序设计语言经历了从机器语言、汇编语言、高级语言到超高级语言的发展历程。(5)简述利用计算机进行问题求解的过程?1、理解问题特征2、设想解决方案3、优化解决方案4、描述解决方案5、执行并分析解决方案(6)简述各个程序质量要素的含义?1、正确性(Correctness):正确性是指一个计算机程序的正确程度,即程序在预定的运行环境下能正确完成预期功能的程度。2、鲁棒性(Robustness):鲁棒性也称为健壮性,是指在硬件发生故障、输入数据无效或操作错误
4、等意外情况下,程序能做出响应的程度。3、效率(Efficiency):效率是指为了完成预定的功能,系统需要的计算资源(主要包括计算时间和存储空间)的多少。4、易用性(Usability):易用性又称为可用性,是指在完成预定功能时人机交互的难易程度。易用性高的程序容易被程序用户理解和掌握,使用户操作简单方便。5、可理解性(Understandability):可理解性是指理解程序的难易程度。可理解性高的程序才容易测试和维护。如果程序难以读懂,就会给测试和维护带来巨大的困难。6、可测试性(Testability):可测试性是一个计算机程序能够被测试的容易程度。为了提高程序的可靠性,必须通过测试尽可
5、能多得发现并改正程序中的错误。程序的可测试性直接影响测试的质量和效率。7、可维护性(Maintainability):诊断和改正程序错误以及功能扩充和性能提高的容易程度。程序设计是一个迭代过程,要开发出高质量的程序需要对程序进行多次修改和完善。程序的可维护性决定了上述工作的质量和效率。8、可重用性(Reusability):可重用性是指在其它应用中该程序可以被再次使用的容易程度。如果我们在开发新程序时,能够直接或稍加修改就能利用原有的程序,则会大大提高新程序开发的质量和效率。因此,提高程序的可重用性是提高程序设计质量和效率的根本途径。1.3计算题(1)计算-1的8位原码、反码、补码和Exces
6、s_127码。 分别为:10000001B、11111110B、11111111B、01111110B(2)计算机内存中相邻四个字节的值为10111110000000000000000000000000,试问该值表示的实数、有符号数和无符号数各为多少? 分别是:实数0.125、有符号数-1107296256(负数在计算机中用补码表示)无符号数3187671040(3)字符A、a、1的ASCII值是多少,给出将大写字母的ASCII转换成对应小写字母ASCII值得计算公式。A:41H a:61H 1:31H大写转化为小写:大写字母的ASCII值+20H=小写字母的ASCII值1.4为下列问题求解设
7、计算法,并分别用程序流程图、NS盒图和PAD图加以描述。(1)有两个调料盒S1和S2,分别盛有糖和盐,要求将它们互换(即S1盒原来盛糖,现在改盛盐;S2同理)。算法思想:这是一个两个变量交换值的问题,可以设置一个临时变量,首先把S1的值放入临时变量中,然后将S2的值放入S1中,最后将临时变量的值放入S1中即可。程序流程图:N-S盒图:PAD图:(2)依次输入6个整数,要求输出其中最小的数。算法思想:定义一个临时变量用来存放最小的数,首先输入第一个数赋值于临时变量,然后循环输入其余的整数,比较输入的整数和临时变量的大小,如果大于临时变量则继续输入,反之,则给临时变量赋值为次此数。最后临时变量中存
8、放的数输入的数中的最小数,输入临时变量即可。程序流程图:N-S盒图:PAD图:(3)输入3个整数,按从大到小的顺序输出。算法思想:输入三个数a、b、c,首先比较a和b,如果ab,则比较c和a,如果ca则输出c、a、b;如果cb,输出a、c、b,否则输出a、b、c;对于ab的情况同理可以得出结果。程序流程图:N-S盒图:PAD图:(4)求1*2*3*10。 算法思想:定义一个变量用来存放最后的值,赋初值为1,做十次循环,每次循环在原来变量的基础上乘循环变量值(即1-10),最后输出这个变量即可。程序流程图:N-S盒图:PAD图:(5)输入两个整数,求其最大公约数。算法思想:选取两个数中较小的数作
9、为起始值,让这两个数分别除以这个值,如果可以整除,则这个数就是最后结果,如果不能整除则将起始值减一之后再用原来的两个数对其做除法运算,知道整除为止,得到的起始值的最后值就是结果。程序流程图:N-S盒图:PAD图:1.5算法思考题(1)钞票换硬币:把一元钞票换成一分、二分、五分硬币(每种至少一枚),有哪些种换法? 分析:1元相当于100分,设5分、2分、1分的硬币数分别为X、Y、Z,求换法就是在寻找这样一种组合,使得5*X+2*Y+Z =100,所以每当找到1种组合时,将个数记录下来,就可知换法有多少种,算法描述如下:Count = 0; /用于记录个数,初始为0for(X=1;X=20;X+)
10、 for(Y=1;Y=50;Y+) for(Z=1;Z=100;Z+) if(5*X + 2*Y + Z = 100) /可实现交换 Count +; 输出Count(2)百钱买百鸡:一只公鸡值元,一只母鸡值元,只小鸡值元,现用一百元要买一百只鸡,问有什么方案?分析:由题意可知,假设公鸡、母鸡、小鸡分别有X、Y、Z只,那么X、Y、Z满足:X+Y+Z=100,而且要满足钱数限定:5*X+3*Y+1/3*Z = 100,由于3只小鸡1元钱,所以小鸡的个数必须是3的整数倍,即:Z是3的整数倍。可通过限制条件,筛选出满足条件的X,Y,Z。当然X、Y、Z还满足以下条件:5*X = 100;3*Y = 1
11、00;Z = 100。以下是算法描述:for(X=0;X=100;X+) for(Y=0;Y=100;Y+) for(Z=0;Z=100;Z+) if(5*X=100 and 3*Y=100 and z%3=0) if(X+Y+Z=100 and 5*X+3*Y+Z/3 = 100) 输出X、Y、Z;(3)斐波那契兔子的问题:某人有一对兔子饲养在围墙中,如果它们每个月生一对兔子,且新生的兔子在第二个月后也是每个月生一对兔子,问一年后围墙中共有多少对兔子。分析:第一个月是最初的一对兔子生下一对兔子,围墙内共有两对兔子。第二个月仍是最初的一对兔子生下一对兔子,共有3对兔子。到第三个月除最初的兔子新
12、生一对兔子外,第一个月生的兔子也开始生兔子,因此共有5对兔子。继续推下去,第12个月时最终共有对377对兔子。由分析知,每个月的兔子都是上个月的兔子与新增兔子之和,而上个月新生的兔子到下个月才会生兔子,所以新增的兔子都是上两月的兔子生的。设每个月的兔子数为F(n),则可列出下列式子:F(0) = F(1) = 1F(n) = F(n-1) + F(n-2)显然可用递归的方法解出此题,算法流程图如下:习题2参考答案1、 答:C语言的主要特点有:(1) C程序是由函数组成的。(2) 函数由函数头部和函数体组成。(3) C程序总是从main函数开始执行。(4) 每个语句和数据声明的最后必须有一个“;
13、”。(5) C语言没有自己的输入输出语句,它的输入输出由库函数printf和scanf完成。(6) 可以添加注释。(7) C语言程序中的变量必须先声明后使用。2、 答:执行C程序的一般步骤为:由C语言编写的源程序得到想要的结果,需要经过如下步骤:(1) 编辑源程序。程序员使用任一种编辑软件(编辑器),将编写好的C程序输入计算机,并以文本文件的形式保存在计算机的磁盘上。编辑的结果是建立C源程序文件。C源程序文件存盘的扩展名必须是“.c”。(2) 编译程序。编译是指将编辑好的源文件翻译成二进制目标代码的过程。编译过程是使用C语言提供的编译程序(编译器)完成的。在编译过程中,编译程序首先检查程序的语
14、法错误,如果存在错误,则返回编辑程序进行修改。正确的源程序在编译后形成扩展名为.obj的目标文件。(3) 连接程序。编译后产生的目标文件还不可以直接执行,还需要把目标文件、系统的函数库和其他目标函数连接在一起,生成可以运行的可执行文件。(4) 执行程序。生成可执行文件后,就可以执行。如果程序执行后没有达到预期的目的,就需要进一步修改源程序,并重复上述过程,直到达到预期目的。3、 答:使用VC6开发控制台程序的方法为:(1) 在Miscrosoft Visual C+ 6.0环境下, 首先建立一个空的工程。(2) 而后建立一个C源程序文件,并在该文件中输入源代码。(3) 使用Bulid命令或者快
15、捷键F7,进行编译连接。(4) 如果没有错误,选择Execute或者快捷键Ctrl+F5,进行执行。4、 VC6下提供的调试方法主要有:(1) 修正语法错误。在编译过程中,会在输出窗口中列出所有错误项,每个错误项都给出其所在的文件名、行号及其错误编号。(2) 设置断点。在VC6中,用于调试的断点有:位置断点、数据断点、条件断点。可以采用快捷方法或者Breakpoints对话框来设置断点。(3) 启用调试器。有四种Debug命令:Step Over、Step Into、Step Out、Run to Cursor。(4) 可以使用QuickWatch窗口、Watch窗口、Variables窗口来
16、监视程序执行情况。习题3参考答案:3.1 选择题 1.B 2.D 3.D 4.A 5.A 6.A 7.C 8.C 9.C 10.B3.2 写出下列程序的输出结果1200 310 c82.a=100,b=2003.97,141,61,a4.5.aabb c abc4,36.6,6,6,73.3 编程题1 #include void main()int a=500;printf(%d,%o,%xn,a,a,a);输出结果:500,764,1f42.#include void main()float x;scanf(%f,&x);printf(a=%.3f,a=%.3en,x,x);输入:66输出结
17、果:a=66.000,a=6.60000e+0013.#include void main()char ch1=a,ch2=ch1;printf(%c,%d,%o,%xn,ch1,ch1,ch1,ch1);printf(%c,%d,%o,%xn,ch2,ch2,ch2,ch2);输出结果:A,65,101,41a,97,141,614.#include void main()float x,y,z,s,v;scanf(%f%f%f,&x,&y,&z);s=2*(x*y+x*z+y*z);v=x*y*z;printf(Area=%.lf,Volume=%.lfn,s,v);输入:3 4 5输出结
18、果:Area=94 ,Volume=605#define PI 3.14#include #include void main()float r,s,l;scanf(%f,&r);s=(float)PI*r*r;l=2*(float)PI*r;printf(r=%4.1f,s=%4.1f,l=%4.1fn,r,s,l);输入:3输出结果:r= 3.0,s=28.3 ,l=18.86#include #include void main()float x1,y1,x2,y2,x3,y3,a,b,c,p,s;scanf(%f%f%f%f%f%f,&x1,&y1,&x2,&y2,&x3,&y3);a
19、=sqrt(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);b=sqrt(x1-x3)*(x1-x3)+(y1-y3)*(y1-y3);c=sqrt(x2-x3)*(x2-x3)+(y2-y3)*(y2-y3);p=(a+b+c)/2;s=sqrt(p*(p-a)*(p-b)*(p-c);printf(Area=%fn,s);输入:5 6 3 8 0 23输出结果:Area=12.000013习题4参考答案4.1所谓输入输出是以计算机主机为主体而言的。输入是指通过输入设备(如键盘、磁盘、光盘、扫描仪等)向计算机输入数据;输出是指通过计算机向外部输出设备(如显示器、打印机、磁盘、绘
20、图仪等)输出数据。由于键盘和显示器是用户上机使用最频繁的输入输出设备,所以操作系统将键盘定义为标准输入设备,将显示器定义为标准输出设备。常用的标准输入输出函数有字符输入输出函数putchar、getchar及格式化输入输出函数printf、scanf。putchar函数用来向标准输出设备输出一个字符,getchar函数用来从标准输入设备输入一个字符。printf()函数用来向终端输出若干个任意类型的数据,scanf()函数用来从标准输入设备输入若干个任意类型的数据。4.2 参见表4-1,4-3。4.3 #includemain()char c;printf(please enter a cha
21、rn);c=getchar();/或scanf(%c,&c);printf(%c,%dn,c,c);4.4#includemain()float c,f;printf(输入华氏温度:n);scanf(%f,&f);c=(f-32)*5/9;printf(摄氏温度为:%5.2fn,c);4.5#includemain()char s20;gets(s); /或scanf(%s,&s);printf(“%sn”,s);/或puts(s);4.6#include#includemain()char s110,s210,s320;printf(please enter two stringn);get
22、s(s1);gets(s2);strcat(s1,s2);printf(%sn,s1);printf(%dn,strlen(s1);4.7#include#includemain()double a,b; printf(please enter two data:n);scanf(%lf%lf,&a,&b);printf(%lf raised to %lf is %lfn, a, b, pow(a,b); 4.8#include#includemain()double x1 ,y1,x2,y2, result; printf(please enter the first point data:
23、n);scanf(%lf%lf,&x1,&y1);printf(please enter the second point data:n);scanf(%lf%lf,&x2,&y2);result = sqrt(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2); printf(The result is %lfn, result); 习题5参考答案1填空题(1) n=4 (2) 2*i-1 (3) 7 (4) #2#include void main() long m,n,a,b,s; printf(nPlease input value of M :); scanf(%ld,&m
24、); printf(nPlease input value of N :); scanf(%ld,&n); a=(mn)?m:n; b=(mn)?n:m; while (a%b!=0) s=a%b; a=b; b=s; printf(nGong yue shu:%ldn,s); printf(nGong Bei shu:%ldn,(m*n)/s);3#include void main() int a,b,c,d,e; printf(Please input an integer:n); scanf(%d,&a); if (a/1000=0) printf(input error!n); re
25、turn; b=a/1000; e=a%10; c=a%1000/100; d=a%100/10; if (b=e & c=d) printf(YES.n); else printf(NO.n);4#include void main() int c; int Num1,Num2,Num3,Num4; Num1=Num2=Num3=Num4=0; do c=getchar(); if (c=a & c=A & c=0 & c=9) Num2+; else if (c= ) Num3+; else Num4+; while(c!=n); printf(英文字母有%d个,数字有%d个,空格有%d个
26、,其它字符有%d个。n,Num1,Num2,Num3,Num4);5#include #include void main() float a,b,c,disc,x1,x2,realpart,imagepart; printf(Input a,b and c:); scanf(%f,%f,%f,&a,&b,&c); printf(The equation); disc=b*b-4*a*c; if (fabs(disc)1e-7) x1=(-b+sqrt(disc)/(2*a); x2=(-b-sqrt(disc)/(2*a);printf(has distince real roots:%4.
27、2f and %4.2f.n,x1,x2); else realpart=-b/(2*a); imagepart=sqrt(-disc)/(2*a); printf(has complext roots:); printf(%4.2f+%4.2fi,realpart,imagepart); printf( and %4.2f-%4.2fin,realpart,imagepart); 6. #include void main() int i,j; for (i=1;i=5;i+) for (j=1;j=1;i-) for (j=i;j=1;j-) printf(*); printf(n); 7#include #define EPS 1e-7void main() int n; double x,an,sum; printf(input x:); scanf(%lf,&x); x=x*3.1415926/180; sum=0; an=x; n=1; do sum+=an; n=n*(n+1)*(n+2); an*=(-x*x)/n; printf(an=%fn,an); while(fabs(an)=EPS); printf(sin(%.4lf)=%.4lfn,x,sum);8#include void main() unsigned
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1