计算机高级语言程序设计(c)习题答案.doc_第1页
计算机高级语言程序设计(c)习题答案.doc_第2页
计算机高级语言程序设计(c)习题答案.doc_第3页
计算机高级语言程序设计(c)习题答案.doc_第4页
计算机高级语言程序设计(c)习题答案.doc_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第1章一、选择题1. C 2. C 3. B二、填空题1. main2. 3. ;(分号)4. 机器语言5. 编译6. 链接7. 运行8. 单行注释 块注释三、思考题1. 特定的机器语言较难理解,不易于人们编写相关的程序。2. 计算机程序设计语言从机器语言发展到结构化程序设计语言极大地提高了编写程序的效率,但到了20世纪90年代,结构化程序设计对软件危机的缓解已起不到太大的作用,大型软件的投资失败,软件系统的不可维护性与不可靠性等现象依然存在。在抽象数数据类型和交互式环境设计思想的基础上,出现了面向对象的程序设计技术。3. 面向对象的程序设计是以所处理的数据为中心,而不是以函数功能为中心来编写程序的,它采用对象作为描述问题的实体。对象是包含现实世界事物特征的抽象实体,反映了系统的信息交互的能力,因此,用面向对象的程序设计方法设计出的程序具有较强的稳定性。4. 预处理命令、输入输出、语句、函数、常量、变量、类。5. 通过输入输出的函数来完成。6. (1)建立应用项目。 建立项目及工作区。 建立主程序文件。(2)运行程序。选择“编译”菜单中的“编译程序名.cpp”,编译源程序;然后选择“编译”菜单中的“编译文件名.exe”连接目标文件。四、上机操作题1. 写出运行结果:(1)This is a C+ program。(2)请输入两个数字:3 23+2=52. 程序如下:#include using namespace std;void main() cout* * * * * * * * * * * * * *n; cout Hello World! n; cout int -long - float - double三、思考题1. C+基本数据类型有char(字符型)、int(整型)、float(浮点型)、double(双精度型)。命名变量名要遵守如下规则:(1)变量名不能与C+的关键字、库函数名、类名和对象名等相同。(2)变量名的第一个字母必须是字母或下划线。(3)变量名的字符个数不能太多,以不超过31个字符为宜。(4)变量名不能以数字开头。(5)变量名不能有空格,不能包含“. ; , “ + ” ”之类的特殊符号。2. C+是大小写敏感的,即大写和小写字母认为是不同的字母。3. 变量是指在程序运行过程中可改变的量,常量是不可改变的量,常量可以是常数或符号常量,变量必须命名。4. 当C+不能进行自动类型转换时,就须进行强制类型的转换才能保证某些运算结果的正确性。5. C+中的赋值运算符可以与某些特定操作符结合形成复合赋值运算符,这种运算符既有运算功能又有赋值功能。四、上机操作题1. 参考代码:#include iostreamusing namespace std; void main() int a,b,c; float sum,ave,max,min; coutabc; sum=a+b+c; cout这三个数之和为:sumendl; ave=sum/3; cout这三个数的平均值为:aveb) max=a; min=b; else max=b; min=a; if(cmax) max=c; else if(cmin) min=c; cout这三个数中的最小数为:minendl; cout这三个数中的最大数为:maxendl;2. 参考代码:#include using namespace std;void main() int b; b = -2 + 5*7; / b=33 b =-4 + 5%(-2/4); /错误,-2/4的结果为0 ,5%0是错误的表达法 int j=1; / j=1 int k=j+;/ k=1 j=2 int m=(j*=4);/ m=8 j=8 j= -m; / j=7 m=73. 参考代码:#include using namespace std;void main() int a,b,c; a=b=c=2; / a b c value int value=(+a | +b & +c); / 3 2 2 1 value=(a+ & b+ | c+); / 4 3 2 1第3章一、选择题1. C 2. A 3. C二、填空题来源:(/s/blog_5da603c80100bvet.html) - 计算机高级语言程序设计(c+)答案(13)_yuanyuan_新浪博客1. 文件包含 条件编译 宏定义2. 顺序结构 选择结构 循环结构3. #define 宏名 字符串4. 输出宽度 填充字符为x5. 输出 输入 输出 输入6. 程序编译三、思考题1. 文件包含命令的格式为:(1)#include (2)#include “文件名”第1种方法告诉预处理器,从编译器或外部库的头文件中寻找所要的头文件。第2种方法告诉预处理器,从正在编译的应用程序源代码中寻找头文件;如果预处理器在那里没有找到头文件,它将在编译器的头文件中查找。2. 利用条件编译可以使同一源程序在不同的编译条件下产生不同的目标代码。主要包括:(1)#if 条件表达式 程序段#endif(2)#ifdef 标识符 程序段1#else 程序段2#endif(3)#ifndef 标识符 程序段1#else 程序段2#endif(4)#if 条件表达式1 程序段1#elif 条件表达式2 程序段2#elif 条件表达式3 程序段3 . . .#else 程序段 N=1#endif3. 空语句就是一条语句中只有分号“;”的语句,主要用于需要一条语句而又不作任何操作的时候。4. 文件包含是在程序编译的阶段完成,而程序文件的链接是编译完成后进行的。5. 顺序结构是C+内建的。除非特别声明,否则计算机都会按原先书写的顺序逐条执行C+语句。选择结构是程序在执行时需要根据相应的条件表达式的值决定程序的走向,不同条件表达式的值,程序所执行的语句及其顺序也相应不同。循环结构是在程序执行时,概据某种条件需要反复执行的某些语句所组成的语句结构,这些语句执行的次数由循环的条件控制。6. 表达式语句就是表达式之后加上分号,区别也在于此。7. 不同。宏定义的符号常量没有类型,其作用是作为字符串进行替换,使用时要特别注意替换方式;用CONST定义的常量有类型,定义时要赋值,以后不能再改变,使用时按常量名使用。8. 对于输出的数据往往需要一定的格式,而C+系统默认的输出格式是不能满足这种需求的,因此要有C+输出格式控制符。四、上机操作题1. 参考代码:#include #include using namespace std;double const PI=3.1415926;void main() double r,s,l; coutr; s=PI*r*r; l=2*PI*r; coutsetprecision(12)sendl; coutsetprecision(12)lendl; 2. 参考代码:#include using namespace std;#define SHANG(x,y) x/yvoid main() int m,a,b; coutab; m=SHANG(a,b); cout两个数的商为:m;3. 参考代码:#include using namespace std;#define question How many students here? #define answer 500void main() coutquestionendl; coutanswerendl;4. 参考代码:#include using namespace std;#define CHANGE 1int main() char ch40; coutinput text:endl; gets(ch); #if (CHANGE) for (int i=0;i=a& chiA& chiZ) chi+=1; else if (chi=z|chi=Z) chi-=25; #endif coutoutput:endlchendl; return 0;第4章一、选择题1. D 2. B 3. A 4. B5. D 6. B 7. C二、填空题1. for while dowhile2. break continue3. dowhile4. switch三、思考题1. for语句的特点是可以定义控制变量的初值与终值,以及循环的次数。2. goto语句只能在当前函数范围内跳转,不允许在不同的函数之间进行跳转。goto语句在跳转时,只能从一个语句结构的内层向外层跳转,不允许由外层直接向内层跳转。3. case子句的条件应是整型常量表达式。4. do中的循环体至少执行一次,而while中只有当条件成立时才能执行循环体。5. 这三种循环语句各有各的特色,可以方便地用于某些特定的用途。如已知循环次数时,用for循环方便些;已知循环条件时,用while或do循环方便些;若循环次数至少要执行一次,用do循环最为方便。另外,这三种循环都可以嵌套使用,形成多重循环。四、上机操作题1. 参考代码:#include using namespace std;void main() float s=0, t=1; int n; for(n=1;n=15;n+) t=t*n; s=s+t; cout1!+2!+3!+4!+ + 15!=sendl;2. 参考代码:#include using namespace std;void main() int i,j,k,n; cout所有的水仙花数为:endl; for(n=100;n1000;n+) i=n/100; j=n/10-i*10; k=n%10; if(n=i*i*i+j*j*j+k*k*k) coutn ; coutendl;3. 参考代码:#include using namespace std;int main ()int t,a,b,c,d;coutabcd;couta=a, b=b, c=c,d=db)t=a;a=b;b=t;if (ac)t=a; a=c; c=t;if (ad)t=a; a=d; d=t;if (bc)t=b; b=c; c=t;if (bd)t=b; b=d; d=t;if (cd)t=c; c=d; d=t;coutthe sorted sequence:endl;couta, b, c, dendl;return 0;4. 参考代码:#include using namespace std;void main() int day,x1,x2; day=9; x2=1; while(day0) x1=(x2+1)*2; x2=x1; day-; cout第一天一共摘了:x1个桃子。endl;5. 参考代码:#include using namespace std;void main() int i,k; for(i=0;i=3;i+) for(k=0;k=2*i;k+) cout*; coutendl; for(i=0;i=2;i+) for(k=0;k=4-2*i;k+) cout*; coutendl; 6. 参考代码:#include using namespace std;int main () int count=0; for(int i=1;i10;i+) for(int j=1;j20;j+) for(int k=1;k100;k+) int total=10*i+5*j+1*k; if (total=100) couti j kendl; count+; cout总的兑换数为:count; 第5章一、选择题1. B 2. C 3. B4. B 5. A二、填空题1. 数组名 数据类型2. 定义3. 行 列4. mxn三、思考题1. 数组是有序的且类型相同的数据的集合,它用统一的名称和下标来惟一地确定数组中的每一个元素。数组必须先行定义才能使用。2. 数组在内存中连续存放,其下标从0开始。3. 字符型数组中存放的是字符数据类型,其结尾有0结束符。四、上机操作题1. 参考代码:#include iostreamusing namespace std;void main()int a10=35,99,88,57,30,94,57,13,86, 71;int min=a0;int index=0;for(int i=1;iai)min=ai;index=i;cout最小数为:min其下标为:index;2. 参考代码:#include using namespace std;void main() int a33, sum=0; int i,j; cout请输入矩阵元素:endl; for(i=0;i3;i+) for(j=0;jaij; for(i=0;i3;i+) sum=sum+aii; cout该矩阵的对象线元素之和为:sumendl;3. 参考代码:#include using namespace std;void main() int a11=3,5,7,9,11,23,45,48,89,101; int num,i,j; cout原数组为:endl; for(i=0;i10;i+) coutai ; coutendl; coutnum; if(numa9) a10=num; else for(i=0;inum) for(j=9;j=i;j-) aj+1=aj; ai=num; break; cout插入数据后的数组为:endl; for(i=0;i11;i+) coutai ; coutendl;4. 参考代码:#include using namespace std; int main() int y,m,d; int i,n; / 平年各月份天数 int M13= 0, / 不用,C语言数组下标从1开始。 31, / 一月 28, / 二月 31, / 三月 30, / 四月 31, / 五月 30, / 六月 31, / 七月来源:(/s/blog_5da603c80100bveu.html) - 计算机高级语言程序设计(c+)答案(46)_yuanyuan_新浪博客 31, / 八月 30, / 九月 31, / 十月 30, / 十一月 31, / 十二月(后面的逗号可要可不要) cout y; cout m; cout d; if ( y%400=0 | ( y%4 = 0 & y%100 != 0) M2 += 1; / 闰年2月加多1天。 if (m0 & mMm) cout y 年 m 月最多只有 Mm 天。n; return 1; / 出错返回 else cout 月份只能是12。n; return 1; / 出错返回 / 前m-1个月的总天数 for (n=0,i=1; im; i+) n += Mi; / 再加上当月的天数 n += d; cout n endl; return 0; / 正常退出5. 参考代码:#include using namespace std;void main() char a5=*,*,*,*,*; int i,j,k; for(i=0;i5;i+) coutendl; cout ; for(j=1;j=i;j+) cout ; for(k=0;k5;k+) coutak; coutendl;6. 参考代码:#include using namespace std;void main() char a5=H,E,L,L,O; int i; for(i=4;i=0;i-) coutai; coutendl; 7. 参考代码:#include #include using namespace std;const int n=5;string namen;int numn,scoren;int main() int i; void input_data(); input_data(); coutendlThe list of failed:endl; for(i=0;in;i+) if(scorei60) coutnamei numi scoreiendl; return 0; void input_data() int i; for (i=0;in;i+) coutinput name,number and score of student i+1nameinumiscorei; 第6章一、选择题1. B 2. D 3. B二、填空题1. int *pa; char *pc; float *pf;2. int *pa = &a; *pa = 20;3. int &ra = a; ra = 20;4. int *pa = new int; *pa = 10; delete pa;5. int *pc = new char12; strcpy(pc,”Hello,World!”); delete pc;6. *p=0 b=3 c=57. 19三、思考题1. void指针可以指向任何类型的C+数据。也就是说,可以用任何类型的指针直接给void指针赋值。不过,如果需要将void指针的值赋给其他类型的指针,则需要进行强制类型转换。2. 通过引用和指针,都可以操作它们所指向的目标对象,但是它们在使用上有很大的差别。这种差别主要体现在:指针是个变量,可以在程序中改变指针所指向的目标;而引用是一个声明,在声明引用时必须给它初始化,并且引用在初始化后,不可以在关联其他的目标对象。3. 在C+中,指针与一维数组有密切的联系。一维数组元素存放在一段连续的内存区域里,每个元素占用的内存单元大小相同,数组名就是数组所占存储区域的首地址,也就是指向该数组第一个元素的地址(指针)。数组元素的访问可以通过下标访问,也可以通过指针访问。4. C+中使用new运算符可以从堆上分配内存。使用new运算符分配空间是必须是以定义的数据类型。new运算符会向系统申请足够的存储空间,如果申请成功,则返回该内存块的首地址,如果申请不成功,则返回零值。使用new运算符的一般格式:格式1:指针变量名=new 类型标识符;格式2:指针变量名=new 类型标识符(初始值);格式3:指针变量名=new 类型标识符内存单元个数。使用new运算符分配的内存一定要释放,否则会产生系统内存泄漏。在C+中释放动态分配的内存需要使用delete运算符。delete运算符的操作数应该是new运算符返回的指针。如果是释放数组空间,则应加上。四、上机操作题1. 参考代码:#include using namespace std;void main( ) int i; int a100; int *p; int nTotal = 0; for(i=0;i100;i+) ai = i + 1; p = a; for(i=0;i100;i+) nTotal += *p; p+; cout累加和等于:nTotalendl; 2. 使用直接插入排序。#include using namespace std;void main() int i; int j; int nTmp; int a=23,87,12,8,56,43,61,33,99,5; int *p = a; cout排序前:endl; for(i=0;isizeof(a)/ sizeof(int);i+) coutpi ; coutendl; for(i=1;i0 & nTmp pj-1) pj = pj-1; j-; pj = nTmp; cout排序后:endl; for(i=0;isizeof(a)/ sizeof(int);i+) coutpi ; coutendl;3. 参考代码:#include using namespace std;void main() int nCount = 0; char *ps = Count the string length.; char *pc = ps; while(*pc+) nCount +; cout这个字符串的长度是:nCountendl;4. 参考代码:#include using namespace std;void main() int nIdx; char buf30; char *ps1 = Thi is a ; char *ps2 = book.; char *pc = ps1; nIdx = 0; while(*pc) bufnIdx+ = *pc+; pc = ps2; while(*pc) bufnIdx+ = *pc+; bufnIdx = 0; cout合并后的字符串是: bufb)return b;elsereturn a;3. 根据函数的参数传递的不同,函数调用可以分为函数的值传递调用(传值调用)、函数的指针传递调用(传址调用)和函数的引用传递调用。缺省情况下,函数的参数传递过程是将实参表达式的值拷贝一份给形参。这样,实参变量和形参变量占据的是不同的存储空间。因此在函数里对形参变量的改变不会影响到实参变量的值。在下面的这些情况下,使用函数的值传递调用方式不太恰当或者不能达到目的:(1)要传递的参数是一个比较大的自定义的复杂数据类型,如果按照值传递方式,需要将这个复杂的数据类型在被调用的函数的栈空间复制一份,这样对时间和空间的开销都比较大。(2)有时需要在被调用函数里改变实参变量的值。在这些情况下,可以使用函数的指针传递调用的方式来传递参数。其方法是将函数的形参声明为指针,然后在函数调用时,将实参的地址传递给形参。这样在参数传递时,是将实参的地址复制给形参。在被调函数里,如果对形参指向的内存空间进行操作,实际上就是对主调函数里的实参变量进行操作。函数也可以通过引用来传递参数。使用引用传递参数与传递指针的效果一样。如果将形参定义为引用,那么当进行参数传递时,实际上是将形参与实参绑定起来,让形参成为实参的别名,而并不是将实参拷贝了一份给形参。因为形参是实参的别名,所以对形参的操作等同于对实参变量的操作。4. 同一个程序里,如果在嵌套的作用域里定义了同名的变量,则在内层作用域中,外层定义的同名变量在内层是不可见的,也可说是内层变量隐藏了外层变量。如果隐藏的外层变量是全局变量,则可以使用域作用符“:”在内层作用域里显式地访问全局变量。使用域作用符“:”只能访问全局变量,如果不是全局变量,则会出错。5. 变量的有效性是由变量的作用域和变量的可见性综合作用的结果。变量根据其定义的不同,具有语句块级、函数级、文件级、程序级作用域。超出了作用域,变量就不再有效。四、上机操作题1. 参考代码:#include using namespace std;int mul(int a,int b);void main() int a = 10; int b = 20; couta x b = mul(a,b)endl;int mul(int a,int b) return a*b;2. 参考代码:#include bool IsPrimer(int nNum);void main() int a; cout请输入一个数:a; if (IsPrimer(a) couta是素数。endl; else couta不是素数。endl; bool IsPrimer(int nNum) for(int i=2;inNum / 2;i+) if (nNum % i = 0) return false; return true;3. 参考代码:#include using namespace std;int Convert(int nNum);void main() int a; cout请输入一个数:a; cout逆序后的结果是:Convert(a) 0) nResidual = nQuotient % 10; nQuotient /= 10; nRet = nRet * 10 + nResidual; return nRet;4. 参考代码:#include using namespace std;void Arithmetic(int a, int b, int *pAdd,int *pSub,int *pMul);void main() int nAdd; int nSub; int nMul; int a = 20; int b = 10; Arithmetic(a,b,&nAdd,&nSub,&nMul); couta和b的和是:nAddendl a和b的差是:nSubendl a和b的积是:nMulendl;void Arithmetic(int a,int b,int *pAdd,int *pSub,int *pMul) *pAdd = a + b; *pSub = a - b; *pMul = a * b;5. 参考代码:#include using namespace std;bool IsLeapYear(int &nYear);void main() int a; cout请输入一个4位正数:a; if (IsLeapYear(a) couta是闰年.endl; else couta不是闰年.endl; bool IsLeapYear(int &nYear) if (nYear % 4 = 0 & nYear % 100 !=0) return true; else if (nYear % 400 = 0) return true; return false;/ return nYear % (nYear % 100?4:400) =0;第8章一、选择题1. B 2. D 3. C 4. B二、填空题1. int Sum(int a,int nLen);2. int Sum(int *pArr,int nLen);3. int *Func(int a,int b);4. intline double GetVolume(double l,double w,double h);5. double GetVolume(double dLen,double dWidth = 10.0,double dHeight = 5.0);三、思考题1. 用指向数组的指针作为函数的参数和用数组名作为函数的参数,都可以在函数体里存取该数组的元素。他们的区别是,数组名是常量,不可以通过地址运算,让数组名指向数组的其他元素,而指向数组的指针是变量,可以通过地址运算,让指针指向数组的其他元素。如:int a10 = 0,1,2,3,4,5,6,7,8,9;.void func(int a,int nLen) . a += 1 ; /数组名是常量,不可以被赋值void func(int *p,int nLen) for(int i=0;inLen;i+) cout*pendl; p+; /指针是变量,可以被赋值,通过自加,指向数组下一个元素 2. 函数返回指针时要注意:可以返回全局变量的地址,可以返回堆空间的地址,还可以返回静态局部变量的地址,但是不可以返回局部变量的地址。3. 内联函数的引入就是为了解决函数调用的效率问题。在程序编译时,编译器将程序中出现的内联函数调用语句用内联函数的函数代码进行替换。这样会增加目标程序的代码量,但是省略了函数调用所需要的开销,实际上是用空间换时间。只有经常使用且程序量较小的程序段,才适合使用内联函数。在定义内联函数时,函数值的类型左面有“inline”关键字。当定义了内联函数后,程序中调用内联函数与调用普通函数的方法相同。但是内联函数只是编译器的一种许可,并不是一种承诺。因此不是任何一个函数都可定义成内联函数。例如在下面的情况下,就算是

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论