1、C+语言程序设计教程课后习题答案(2011-03-09 17:24:22)标签:杂谈分类:学习第1章C+语言概述练习题11.1判断题XI.C+语言和C语言都是面向对象的程序设计语言。V 2.面向对象方法具有封装性、继承性和多态性。V 3.C语言是C+语言的一个子集。C+语言继承了 C语言。X4.C+语言程序与C语言程序一样都是函数串。X5.C+语言支持封装性和继承性,不支持多态性。V 6.C+语言比C语言对数据类型要求更加严格了。V 7.C+语言对C语言进行了一次改进,使得编程更加方便了。X8.C+源程序在编译时可能出现错误信息,而在连接时不会出现错误信息。V 9.编译C+源程序时,出现了警告
2、错(Warning)也可以生成可执行文件。V 10.C+语言程序的实现也要经过编辑、编译连接和运行3个步骤。1.2单选题1.下列关于面向对象概念的描述中,错误的是(C)。A.面向对象方法比面向过程方法更加先进B.面向对象方法中使用了一些面向过程方法中没有的概念C.面向对象方法替代了结构化程序设计方法D.面向对象程序设计方法要使用面向对象的程序设计语言2.下列各种高级语言中,不是面向对象的程序设计语言是(D)0A.C+B.JavaC.VBD.C3.下列关于类的描述中,错误的是(A 0A.类就是C语言中的结构类型B.类是创建对象的模板C.类是抽象数据类型的实现D.类是具有共同行为的若干对象的统一描
3、述体4.下列关于对象的描述中,错误的是(C)。A.对象是类的一个实例B.对象是属性和行为的封装体C.对象就是C语言中的结构变量D.对象是现实世界中客观存在的某种实体5.下列关于C+程序中使用提取符和插入符的输入/输出语句的描述中,错误的是(C)。A.提取符是对右移运算符()重载得到的B.插入符是对左移运算符()重载得到的C.提取符和插入符都是双目运算符,它们要求有两个操作数D.提取符和插入符在输入/输出语句中不可以连用1.3填空题1.C+语言具有面向对象方法中要求的三大特性:封装性、继承性 和多态性。2.C+程序中,有且仅有一个 主 函数。3.C+程序是由类和函数 组成的。4.C+源程序的扩展
4、名是cpp o5.使用插入符进行标准输出文件输出时,使用的输出流对象名是cout1.4上机调试下列程序,并分析输出结果1.#include void main()(int i,j;coutEnter i j:;cinij;couti=i,j=njendl;couti+j=ni+j7Hi*j=i*jendl;)假定,输入数据如下:Enter x y:5V91答:i=5,j=9i+j=14,i*j=452.#include int max(int,int);void main()int a,b,c;a=5;b=8;c=max(a,b);coutnmax(na,bH)=ncendl;)int max
5、(int x,int y)(return xy?x:y;)答:max(5,8)=83.文件el.4.3.cpp内容如下:#include voidfl(),f2();void main()(cout v v”在北京.n”;fl();f2();coutv再见An”;)文件1.4.3-l.cpp内容如下:#include void fl()(coutvv”在上海.n”;)文件1.4.3-2.cpp内容如下:#include void f2()(coutvv”在广州.n”;)答:在北京。在上海。在广卅。再见。1.5编译下列程序,修改所出现的错误,获得正确结果1.main()coutIn main()
6、.n答:修改后如下:#include void main()(coutIn main().n;#include void MAIN()(cina;int b=a+a;coutb=bn;)答:修改后如下:#include void main()(int a;cina;int b=a+a;cout*b=bn;#include void main()(int i,j;i=5;int k=i+j;COUTni+j=nkendl;)答:#include void main()(int i,j;j=10;i=5;int k=i+j;cout ni+j=nkendl;1.6通过对1.5题中3个程序的修改,回
7、答下列问题1.从1.5题中第1题程序的修改中,总结出编程应该注意哪些问题。答:C+程序要包含iostraem.h,main。函数前应加类型说明符void。2.C+程序中所出现的变量是否必须先说明后使用?在函数体内说明变量时是否都要放在函数体的开头?答:C+程序中所出现的变量必须先说明后使用。在函数体内说明变量时不一定要放在函数 体的开头。3.使用cout和插入符()输出字符串常量时应注意什么?答:可输出一个字符串常量,也可输出多个字符串常量。每输出一个字符串常量要使用一次 插入符(4?0:1D.2&2II015.下列表达式中,其值不为逻辑值的是(A 0A.算术表达式B.关系表达式C.逗号表达式
8、 D.逻辑表达式16.下列关于数组概念的描述中,错误的是(B)。A.数组中所有元素类型是相同的B.数组定义后,它的元素个数是可以改变的C.数组在定义时可以被初始化,也可以不被初始化D.数组元素的个数与定义时的每维大小有关17.下列关于数组维数的描述中,错误的是(C)。A.定义数组时必须将每维的大小都明确指出B.二维数组是指该数组的维数为2C.数组的维数可以使用常量表达式D.数组元素个数等于该数组的各维大小的乘积18.下列关于数组下标的描述中,错误的是(B)。A.C+语言中数组元素的下标是从0开始的B.数组元素下标是一个整常型表达式C.数组元素可以用下标来表示D.数组元素的某维下标值应小于该维的
9、大小值19.下列关于初始值表的描述中,错误的是(C)。A.数组可以使用初始值表进行初始化B.初始值表是用一对花括号括起的若干个数据项组成的C.初始值表中数据项的个数必须与该数组的元素个数相等D.使用初始值表给数组初始化时,没有被初始化的元素都具有默认值20.下列关于字符数组的描述中,错误的是(D 0A.字符数组中的每一个元素都是字符B.字符数组可以使用初始值表进行初始化C.字符数组可以存放字符串D.字符数组就是字符串21.下列关于字符串的描述中,错误的是(C)。A.一维字符数组可以存放一个字符串B.二维字符数组可以存放多个字符串C.可以使用一个字符串给二维字符数组赋值D.可以用一个字符串给二维
10、字符数组初始化22.已知:inta5=l,2,3,4;下列数组元素值为2的数组元素是(B)。A.a0 B.alC.a2 D.a323.已知:山瓦3=1,5,6,3,0,2;数组元素制1川的值为(A)。A.0 B.1C.2 D.324.已知:chars口二“abed”;输出显示字符d的表达式是(C)。A.s B.s+2C.s2 D.s325.已知:char ss 6=while,nfor,else1,break;输出显示“reak”字符串的表达式是(B)oA.ss3 B.ss3+lC.ss+3 D.ss3l2.3 填空题1.C+语言中,基本数据类型包含有整型、浮点型、字符型、空值型和 布尔型。2
11、.变量的存储类可分为自动类、寄存器类、外邹类 和静态存储类。3.浮点型常量可分为单精度、双精度和长双精度浮点型常量。4.结合性从右至左的运算符有单目运算符、双目运算符 和赋值运算符。5.条件表达式是由 三目 运算符组成的,该表达式的类型是由冒号左边和右边两个操作 数中类型高的操作数类型决定的。6.已知:double dd 3=1.2,2.4,3.6,4.8,5.2,6.4;这里 dd 是一个 二 维数组的数 组名,该数组共有 9 个元素,每个元素的类型是 double o数组元素dd的 值是 1.2,的值是 5.2,数组元素dd22的值是 0。7.已知:char ss 6=while1,bre
12、ak,nforn,else);字符数组 ss 是 二 维数组,它的 第1维大小应该是4。使用cout和输出字符串“for”时,对应的表达式是ss+2。使用cout 和输出字符串break”的子串“reak”时,对应的表达式是ssl+l o使用cout和vv输出字 符串else中的字符C时,对应的表达式是ss3。2.4 分析下列程序1.#include void main()(int a,b;coutEnter a b:cinba;int d=a-b;coutd=dendl;假定输入为5和8。答:d=32.#include void main()(const int A=8;const char
13、 CH=k;const double D=8.5;cout A=nAendl;coutCH+2=char(CH+2)endl;coutHD-5.8=nD-5.8endl;)答:A=8CH=2=m3.#include int a=9;void main()int b=5;cout a+b=a+bendl;static int c;cout c+a=c+aendl;const long int d=8;cout a+d-b=a+d-bendl;)答:a+b=14c+a=9a+d-b=124.#include void main()(int a=3;char b=m;couta=a7b=bendl;
14、(int a=5;b=n;couta=a7b=bendl;couta=a7b=bendl;)答:a=5,b=ma=3,b=na=3,b=n5.#include void main()(cout6%4*5/3+3endl;cout(l 0&3l8)endl;cout(52)+(52)endl;cout-4endl;)答:610216.#include void main()(int a=5;coutlong(&a)7sizeof(a)7sizeof(int)endl;double b=1.5;coutsizeof(l.5f)7sizeof(b)7sizeof(l.5L)endl;)答:地址值,4
15、,44,8,87.#include void main()(int a=3,b=5;cout(ab+a=b-2)7(a!=b+a=b)endl;char c=k;cout(c=,k,),(c!=,h,+2)endl;float f=2.3f;cout(-f=f)endl;答:0,11,018.#include void main()(int i,j,k;i=j=k=5;!i&+j&-k;couti,j 7kendl;illj-ll+k;couti,j 7kendl;i-5llj-5&+k;couti,j 7kendl;)答:5,5,55,5,55,5,59.#include void main
16、()(inti(5),j(8);cout(i=i*=j)endl;i=5,j=8;i=5*j/(j-5);couti7j endl;i=5,j=8;cout(j+=i*=j-5)endl;)答:4013,72310.#include int a=8;void main()int b=6;double d=1.5;d+=a+b;coutdendl;cout(a=l,b=2,d=2.5,a+b+d)endl;cout(a0?a:b0?a+:b+)endl;211.#include void main()(intm3=9,8,7,6,5,4,3,2,l,s=0;for(int i=0;i3;i+)s
17、+=mii;coutsendl;)答:1512.#include void main()(char s=bhy543kpm345n;for(int i=0;si!=,0,;i+)(if(si=,a,&si=,z,)continue;coutsi;)coutendl;)答:54334513.#include void main()(intb=5,-3,4,l,-8,9,0,10);int i=0,j;for(j=i;ibj)j二i;coutj 7bj endl;)答:7,1014.#include void main()(int a 口 3=1,2,34,5,6,7,8,9;int sl(0),
18、s2(0);for(int i=0;i3;i+)for(intj=0;j3;j+)(if(i!=j)sl+=aij;if(i+j=l)s2+=aij;)coutnsl=sl7ns2=s2endl;答:)sl=30,s2=615.#include void main()(char s=n#%#n;for(int i=0;i3;i+)(for(intj=0;ji;j+)cout*;for(int k=0;k0;i-)(for(int j=O;ji-l;j+)cout!for(int k=0;k3;k+)coutsk;coutendl;答:#%#%#%#%#%#2.5编程题1.已知:inta=3,b
19、=5;编程计算下列两个代数式的值,并比较它们是否相等。(a+b)2和a2+2ab+b2答:编程如下:#include void main()(int a=3,b=5;int dl=(a+b)*(a+b);int d2=a*a+2*a*b+b*b;coutHdl=ndlendlnd2=nd2endl;从结果中可以看出dl和d2值是相等的。2.已知:intx=5;编程求下列代数式的值。f(x)=3x3+2x2+5x+2答:编程如下:#include void main()(int x=5;int f=3*x*x*x+2*x*x+5*x+2;coutfendl;)3.从键盘上输入两个double型数
20、,编程输出其中最小者。答:编程如下:#include void main()(double a,b;coutvv”请输入两个double型数:”;cinab;coutv”输入的两个数中较小的是,;if(a=b)coutaendl;elsecoutbendl;)4.华氏温度转换成摄氏温度的计算公式如下:C=(F-32)*5/9其中,C表示摄氏温度,F表示华氏温度。从键盘上输入一摄氏温度,编程输出对应的华氏 温度O答:编程如下:#include void main()(double c,f;coutvv”请输入一个摄氏温度值:”;cinc;f=9.0/5.0*c+32.0;coutvv”摄氏温度为
21、“c 华氏温度为 vvfv vendl;)5.从键盘上输入5个浮点数,输出它们的和以及平均值。答:编程如下:#include void main()(double a,b,c,d,e;coutvv”请输入5个double型数:”;cinabcde;double f=a+b+c+d+e;cout”输入的5个数的和是”vvfvv”平均值是“vvf/5.0vvendl;)6.将字符串”12345”,逆向输出为“54321”。答:编程如下:#include void main()(char a口=12345”;couta4a3a2ala0endl;)2.6简单回答下述问题1.C+语言中注释符的格式如何
22、?注释信息的功能是什么?答:注释符格式有2种:格式一:格式二:注释信息注释信息是用来对程序进行提示和说明的。2.使用const定义符号常量比使用#define定义符号常量有何优点?答:使用const定义符号常量时要指出数据类型,而用#define定义符号常量时不需提出类型,因此前者比后者对类型要求更严格,这样会更安全。3.内部静态存储类变量有何特点?答:内部静态存储类变贯的特点是作用域较小,但寿命很长,这种变量作用域与寿命不一致,因此会出现不可见但又存在的情况。4.在使用插入符()输出若干个表达式值时,有的表达式中使用的运算符的优先级低 于插入符优先级时应该如何处理?答:这时需将表达式用括号括
23、起来,己改变其优先级。5.由多种不同运算符组成的表达式,其类型如何确定?例如,int a,b,c;a=bc?b:c;这是一个条件表达式还是赋值表达式?答:表达式类型由优先级低的运算符组成的表达式来确定。这是一个赋值表达式,因为赋值运算符优先级低于三目运算符。6.数组元素个数是由什么决定的?答:数组元素个数是由维数及其大小来决定的。一维数组元素个数是该维的大小,二维数组 的元素个数是两维大小之积等。7.数组元素下标有何规定?答:C+语言中,数组元素下标从0开始。8.初始值表中数据项的类型和个数有何规定?答:初始值表中数据项的类型应与该变是类型相同,个数应小于或等于被初始化的数组元素 的个数。9.
24、字符数组和字符串有什么关系?答:字符数组中可存放字符串,而字符数组不都是存放字符串的。如果字符数组中有字符串 结束符,则说明该字符数存放的是字符串。10.一个数组中的元素类型是否一定相同?何时定义的数组元素具有默认值?答:数组中元素类型必须相同。存储类为外部和静态的数组其元素具有默认值。第3章语句和预处理练习题33.1判断题V 1.表达式和表达式语句是不同的。X 2.空语句是一种没有用处的语句。X 3.复合语句就是分程序。X 4.条件语句中if子句和else子句都是必须有并且仅有一个。V 5.条件语句中else if子句可以没有,也可以有多个。V 6.开关语句可实现多路分支。X 7.开关语句的
25、语句序列中必须有一个break语句,否则该开关语句便无法退出。X 8.任何循环语句都是至少执行一次循环体。X 9.退出for循环语句必须是for后面括号内的中间一个表达式的值为0。V 10.do-while循环语句至少要执行一次循环体。X 11.循环语句的循环体中可以出现if语句,if语句的if体内不能出现循环语句。x 12.goto语句中所使用的语句标号是一种标识符,它的作用域是文件级的。V 13.break语句和continue语句都可以出现在循环体中,但是它们的作用是不同的。X 14.文件包含命令所能包含的文件类型是不受限制的。3.2单选题1.下列关于语句的描述中,错误的是(A)。A.C
26、+程序中的函数是由若干条语句组成的B.每条语句都要实现某种操作C.条件语句是用来实现分支操作的D.循环语句是用来在一定条件下重复执行某段程序的2.下列关于条件语句的描述中,错误的是(C 。A.if语句中最多只能有一个else子句B.if语句的if体内可以出现开关语句C.if语句中else if子句和else子句的顺序是没有限制的D.if语句中else子句是与它最近的if子句配对的3.下列关于开关语句的描述中,错误的是(B)。A.开关语句中,case子句的个数是不受限制的B.开关语句中,case子句的语句序列中一定要有break语句C.开关语句中,default子句可以省略D.开关语句中,右花括
27、号具有退出开关语句的功能4.下列关于循环语句的描述中,错误的是(A)。A.while循环语句中条件给定的表达式不能为非0的常量,否则便是死循环B.for循环语句的循环体内可以出现while循环语句、do-while循环语句和for循环语句C.循环语句的循环体可以是空语句D.循环语句的循环体内可以出现break语句,也可以出现continue语句5.已知:inti(3);下列do-while循环语句的循环次数是(D)。docouti-endl;while(i!=0);A.0 B.3C.1 D.无限6.下列for循环语句的循环次数是(B)。for(int i(0),j(5);i=3;i+,j-);
28、A.3 B.无限C.5 D.07.下列while循环语句的循环次数是(A)。while(int i(0)i;A.0 B.1C.2 D.无限8.下列程序段执行后,j值是(B)。for(int i(0),j(0);i10;i+)if(i)j+;A.0 B.9C.10 D.无限9.已知:typedefcharCH;下列描述中,正确的是(A)。A.使用CH定义的变量是char型变量B.使用CH定义的是一个字符常量C.使用CH定义的变量其类型不确定D.使用CH定义的是一个字符串10.下列关于预处理命令的描述中,错误的是(D)。A.预处理命令最左边的标识符是#B.预处理命令是在编译前处理的C.宏定义命令可
29、以定义符号常量3.3填空题1.表达式语句是一个表达式后边加上 分号 组成的。空语句是 只有一个分号的语句。2.复合语句是由 两条 条或 两条 条以上的语句加上 花括号()组成的。3.分程序是一种带有 说明 语句的复合语句。4.循环语句的共同特点是都应具有循环体和退出循环的条件。5.下列程序是求100之内的能被7整除的自然数之和。#inelude void main()(int sum;_sum=0_;for(int i(l);_i=100_;i+)if(_i%7=0_)sum+=i;coutsumendl;)3.4上机调试下列程序,并分析其输出结果1.#include void main()(
30、int a(8),b(5);if(b;else if(b)if(a)a+;elsea-;elseb+;couta7bendl;)答:9,52.#include void main()(int a(10);while(a)(if(a=5)break;if(a%2=0&a%3=0)coutaendl;)答:987continue;3.#include void main()intb(10);do+b;cout+bendl;if(b=15)break;while(b15);coutok!Hendl;)答:121416ok!4.#include void main()(int w(5);do swit
31、ch(w%2)(case 1:w;break;case 0:w+;break;w;coutwendl;while(w0);)答:31-15.#include void main()(inta(4),b(5),i(0),j(0);switch(a)(case 4:switch(b)(case 4:i+;break;case 5:j+;break;default:i+;j+;case 5:i+;j+;break;default:i+;j+;)couti7j endl;)答:1,26.#include void main()(intb(10);for(int i=9;i=0;i-)(switch(i
32、)(case 1:case 4:case 7:b+;break;case 2:case 5:case 8:break;case 3:case 6:case 9:b+=2;coutbendl;)答:197.#include void main()(int a(6);for(int i(l);i=a;i+)(for(int j=l;j=a-i;j+)coutvvfor(j=l;j=2*i-l;j+)coutA;coutendl;)答:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8.#include#define MAX(x,y)(x)(y)?(x):(y)void ma
33、in()(typedef int IN;IN a,b(4),c;c=MAX(a,b)*2;coutcendl;)答:83.5编程题1.求100之内的自然数中奇数之和。答:编程如下:#include void main()int s=0;for(int i=l;i100;i+=2)s+二i;coutsendl;)2.求两个整数的最大公约数和最小公倍数。答:编程如下:假定两个整数分别为15和25,求它们的最大公约数和最小公倍数。#include void main()(int m,n,t;m=15;n=25;if(mn)(t=m;m=n;n=t;)int mO=m,nO=n;while(n!=0)
34、t=m%n;m=n;n=t;)cout vv”最大公约数为vvmv vendl;coutvv最小公倍数为vmO*nO/mv vendl;)3.求下列分数序列前15项之和。2/1,3/2,5/3,8/5,13/8,答:编程如下:#include void main()(int a;double i=2,j=l,sum=0,t;for(a=l;a15;a+)(sum+=i/j;仁i;i+=jj=t;coutHSUM=sumendl;)4.按下列公式,求e的近似值。e=l+l/l!+1/2!+1/3!+l/n!答:编程如下:#include#include void main()(double x(
35、l),s(0);for(int i=1;fabs(x)1 e-8;i+)(x*=(-L0)*(2*i-3)/(2*i-l);s+=x;)s*=4;cout npi=n sendl;5.求下列式子之和,假定口下0。S=l+(1+2)+(1+2+3)+,+(1+2+3+n)答:编程如下:#include void main()(int s(O),sl(O);for(int i=l;i=10;i+)(sl+=i;s+=sl;)coutsendl;3.6简单回答下列问题1.分程序是复合语句吗?复合语句与分程序的区别是什么?答:分程序是复合语句。复合语句与分程序的区别在于含有说明语句的复合语句称为分程序
36、。2.if语句中,else子句的功能是什么?答:该子句的功能是当if子句和所有else if子句的条件都为0时,则执行else子句。3.在开关语句中,是否每个case子句后面的语句序列中都应该有break语句?答:通常case子句后面的语句序列中都有break语句,根据需要也可以没有break语句。4.循环语句的循环体中出现的continue语句的作用是什么?答:结束本次循环,转到循环头判断是否继续循环。5.文件包含命令的功能吗?该命令一定要放在程序首部吗?答:该预处理命令是将指定的包含文件内容放在该命令出现的地方。通常放在程序开头,便 于后边语句的使用。第4章指针和引用练习题44.1判断题X
37、 1.指针是变量,它具有的值是某个变量或对象的地址值,它还具有一个地址值,这两个 地址值是相等的。V 2.指针的类型是它所指向的变量或对象的类型。X 3.定义指针时不可以赋初值。V 4.指针可以赋值,给指针赋值时一定要类型相同,级别一致。X 5.指针可以加上或减去一个int型数,也可以加上一个指针。V 6.两个指针在任何情况下相减都是有意义的。V 7.数组元素可以用下标表示,也可以用指针表示。X 8.指向数组元素的指针只可指向数组的首元素。V 9.指向一维数组的指针是一个二级指针。X 10.指针数组的元素可以是不同类型的指针。V 11.字符指针是指向字符串的指针,可以用字符串常量给字符指针赋值
38、。X 12.引用是一种变量,它也有值和地址值。V 13.引用是某个变量的别名,引用是被绑定在被引用的变量上。V 14.创建引用时要用一个同类型的变量进行初始化。V 15.指针是变量,它可以有引用,而引用不能有引用。4.2单选题1.下列关于定义一个指向double型变量的指针,正确的是(B)。A.int a(5);double*pd=a;B.double d(2.5),*pd二&d;C.double d(2.5),*pd=d;D.double a(2.5),pd=d;2.下列关于创建一个int型变量的引用,正确的是(A)。A.int a(3),&ra=a;B.int a(3),&ra=&a;C.
39、double d(3.1);int&rd=d;D.int a(3),ra=a;3.下列关于指针概念的描述中,错误的是(B)。A.指针中存放的是某变量或对象的地址值B.指针的类型是它所存放的数值的类型C.指针是变量,它也具有一个内存地址值D.指针的值(非常量指针)是可以改变的4.下列关于引用概念的描述中,错误的是(A)。A.引用是变量,它具有值和地址值B.引用不可以作数组元素C.引用是变量的别名D.创建引用时必须进行初始化5.已知:inta5,*p=a;贝!J与+*p相同的是(D)。A.*+pB.a0C.*p+D.+a06.已知:inta=1,2,3,4,5,*p=a;在下列数组元素地址的表示中
40、,正确的是(C)。A.&(a+l)B.&(p+l)C.&p2D.*p+7.已知:inta34,*p 4;下列赋值表达式中,正确的是(A)0A.p=a+2B.p=alC.p=*a8.已知:intb35=0;下列数组元素值的表示中,错误的是(D)0D.p=*a+2A.*(b+l)B.e(b+i)2C.*(*(b+l)+l)D.*(b+2)9.已知:int a=l,b=2,*p2;下列表达式中正确的是(C)oA.p=&aB.p=&bC.pO=&a,pl=&bD.p=&a,&b;10.已知:inta 5,&ra=a;下列描述中,错误的是(D)。A.ra是变量a的引用,即为变量的别名B.ra的值为5C.
41、ra的地址值为&a D.改变ra的值为10,变量a值仍为54.3填空题1.单目运算符&作用在变量名左边,表示该变量的 地址值,单目运算符*作用在指针名 的左边,表示取该变量的 值。2.指向一维数组元素的指针是 一 级指针,指向二维数组元素的指针是 一 级指针,指向一维数组的指针是 二 级指针,指向一级指针的指针是 二 级指针,一维一级指针数组名是 二 级指针的地址值,二维数组的数组名是 二 级指针的地址值。3.在一个二维数组b3中,b与*b 是等价的,&bl与b+1是等价的。4.指针的运算有4种,它们是 赋值 运算、一个指针加减整型数的运算、两个指针相减 和比较运算。5.引用不是变量,它是某个
42、变量或对象的 别名。引用的值是 被引用的变量的值,引用的地址值是 被引用的变量的地址值。4.4分析下列程序的输出结果1.#include void main()(int a口=5,4,321;int*p=&a2;int m(5),n;for(int i(2);i=0;i-)(n=(*(p+i)v*a)?*(p+i):*a;coutnendl;)答:1232.#include void main()(char*pl,*p2;pl=nabcqrvn;p2=abcpqo;while(*p 1&*p2&*p2+=*p 1+)int n=*(pl-l)-*(p2-l);coutnendl;)答:13.#
43、include int a=10,9,6,5,4,2,1);void main()(intn(7),i(7),x(7);while(x*(a+i)*(a+i+l)=*(a+i);*(a+i+l)=x;for(i=0;in;i+)cout*(a+i)7;coutaiendl;)答:10,9,7,6,5,4,2,14.#include int a3=1,2,34,5,6,7,8,9);int*p=a0,al,a2;int*pp=p;void main()(int(*s)3=a;for(int i(l);i3;i+)for(intj(0);j2;j+)cout*(ai+j)7*(*(p+i)+j)7
44、(*(pp+i)j7*(*s+3*i+j)endl;)答:4,4,4,47,7,7,78,8,8,85.#include int a=1,2,345,6,7,8,9;void main()(int*pa二a;cout*pa7;cout*(pa+)7;cout*+pa7;cout*(pa-)7;pa+=4;cout*pa7*(pa+2)endl;答:1,1,3,3,6,86.#include void main()(charstr4=345,n789,*m2;int s(0);for(int i=0;i2;i+)mi=stri;for(i=0;i2;i+)for(intj(0);j4;j+=2)
45、s+=m5叶O;coutsendl;)答:247.#include void main()(double dl=3.2,d2=5.2;double&rd 1=d 1,&rd2=d2;coutrd 1+rd27d 1+rd2endl;rdl=9.3;coutrd 1+rd27d 1+rd2endl;d2=0.8;cout2*rd2endl;8.#include void main()(int*p;int*&rp=p;int a=90;p=&a;couta=a7n*rp=*rpendl;int b=50;rp=&b;coutb=bVn*rp=*rpendl;答:a=90,*rp=90b=50,*r
46、p=504.5 编程题(使用指针)1.已知4个字符串,编程输出它们中最小的一个。答:编程如下:#include#include void swap(char pl,char p2);void main()(charsl10=nwhileH,s210=elseH,s310=default,s410=continue;if(strcmp(sl,s2)swap(sl,s2);if(strcmp(s3,s4)swap(s3,s4);if(strcmp(sl,s3)swap(sl,s3);coutslendl;void swap(char pl,char p2)char p10;strcpy(p,pl)
47、;strcpy(pl,p2);strcpy(p2,p);)2.将一个长度为n的字符串,编程实现其逆序输出。答:编程如下:#include#include void inverse(char);void main()(char s50;cout输入一个字符串:”;cins;inverse(s);coutvv”反序后的字符串是sendl;)void inverse(char p)int n=strlen(p);int limit=n/2;for(int i=O;ilimit;i+)(char t=pi;pi=pn-i-l;pn-i-l=t;)3.已知一个二维int型数组,编程求出它的最小的元素值。
48、答:编程如下:#include void main()(intn32=3,8,-5,9,2,4;int lim=n00;for(int i=0;i3;i+)for(int j=0;j2;j+)if(nijlim)lim=nij;coutcv”最小元素值为 Hlimendl;4.已知字符型指针数组中存放若干个字符串,编程从键盘上修改其中某个字符串。答:编程如下:#include#include char*str5=,abcVdef,V,ghin,njkln,npqo;char modify(int,char);void main()(int n;char s10;coutvv”修改第几个字符串:
49、”;cinn;coutvv”该字符串修改为:”;cins;coutv”修改后的字符串是 Hmodify(n,s)endl;coutvv”修改后字符指针数组中的字符串如下:n”;for(int i=0;i5;i+)coutstri endl;char*modify(int n,char s)return*(str+n-l)=s;5.有n个小孩排成一圈。从第1个小孩开始作1至3报数,凡报数为3的小孩从圈中出 来,求最后出圈的小孩的顺序号是多少?答:编程如下:#include void main()(int n,num100;coutvv”输入排号人数:”;cinn;int*p=num;for(in
50、t i=0;in;i+)*(p+i)=i+l;i=0;int k=0,a=0;while(an-l)(if(*(p+i)!=O)k+;if(k=3)*(p+i)=O;k=0;a+;i+;if(i=n)i=0;)while(*p=0)P+;coutvv”最后留下的是第n*p号vvendl;)4.6 简单回答下列问题1.指针与一般变量有何不同?答:指针是变量,它不同于一般量。其一是指针存放的是地址值,其二指针的类型是它所指 向的变量类型。2.指针可以作哪些运算?答:指针的运算有4种:赋值运算加减一个整型数运算 在一定条件下,两个指针可以比较运算在一定条件下,两个指针可以相减运算3.指针可以作数组元