为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > C习题与答案解析

C习题与答案解析

2023-03-16 6页 pdf 1MB 22阅读

用户头像 个人认证

is_017931

热爱锻炼

举报
C习题与答案解析第一章习题一、选择填空12345678910CBDADADDAC1.下列各种高级语言中,()是面向对象的程序设计语言。A.BASIC;B.PASCAL;C.C++D.Ada2.下列各种高级语言中,()是最早提出了对象的概念。A.Algol60;B.Simula67;C.Smalltalk;D.C++3.下述面向对象抽象的原理中,()是不对的。A.数据抽象;B.行为共享;C.进化;D.兼容;4.()不是面向对象系统所包含的要数。A.重载;B.对象;C.类;D.继承;5.关于C++与C语言的关系的描述中,()是错误的。A.C语言是...
C习题与答案解析
第一章习一、选择填空12345678910CBDADADDAC1.下列各种高级语言中,()是面向对象的程序设计语言。A.BASIC;B.PASCAL;C.C++D.Ada2.下列各种高级语言中,()是最早提出了对象的概念。A.Algol60;B.Simula67;C.Smalltalk;D.C++3.下述面向对象抽象的原理中,()是不对的。A.数据抽象;B.行为共享;C.进化;D.兼容;4.()不是面向对象系统所包含的要数。A.重载;B.对象;C.类;D.继承;5.关于C++与C语言的关系的描述中,()是错误的。A.C语言是C++的一个子集;B.C语言与C++是兼容的;C.C++对C语言进行了一些改进;D.C++和C语言都是面向对象的;6.下面关于对象概念的描述中,()是错误的。A.对象就是C语言中的结构变量;B.对象代表着正在创建的系统中的一个实体;C.对象是一个状态和操作(或方法)的封装体;D.对象之间的信息传递是通过消息进行的;7.下面关于类概念的描述中,()是错误的。A.类是抽象数据类型的实现;B.类是具有共同行为的若干对象的统一描述体;C.类是创建对象的样板;D.类就是C语言中的结构类型;8.C++对C语言作了很多改进,下列描述中()使得C语言发生了质变,即从面向过程变成为面向对象。A.增加了一些新的运算符;B.允许函数重载,并允许设置缺省参数;C.规定函数说明必须用原型;D.引进了类和对象的概念;9.按照标识符的要求,()符号不能组成标识符。A.连接符;B.下划线;C.大小写字母;D.数字字符;10.下列符号中,()不可作为分隔符。A.,;B.:;C.?;D.;二、判断下列描述的正确性,对者划√,错者划×。123456789101112√√××√××√√√××1.C++引进了引用的概念,对编程带来了很多方便。Y2.C++允许使用友元,但是友元会破坏封装性。Y3.C++中使用了新的注释符(//),C语言中注释符(/*…*/)不能在C++中使用。X4.C++中为了减轻使用者的负担,与C语言相比较C++中减少了一些运算符。X5.C++程序中,每条语句结束时都加一个分号(;)。Y6.C++中标识符内的大小写字母是没有区别的。X7.C++中不允许使用宏定义的方法定义符号常量,只能用关键字const来定义符号常量。X8.在编写C++程序时,一定要注意采用人们习惯使用的书写格式,否则将会降低其可读性。Y9.C++是一种以编译方式实现的高级语言。Y10.在C++编译过程中,包含预处理过程、编译过程和连接过程,并且这三个过程的顺序是不能改变的。Y11.预处理过程是一般编译过程之后连接过程之前进行的。X12.源程序在编译过程中可能会出现一些错误信息,但在连接过程中将不会出现错误信息。X三、分析下列程序的输出结果1.BeiJjingShangHaiTianJing2.Inputa,b:85a=8,b=5a-b=33.d=5:c=m1.#includevoidmain(){cout<<"BeiJing"<<"";cout<<"ShangHai"<<"\n";cout<<"TianJing"<voidmain(){inta,b;cout<<"inputa,b:";cin>>a>>b;cout<<"a="<voidmain(){charc=’m’;intd=5;cout<<"d="<voidmain(){cout<<"Thisisastring!";}Thisisastring!2、#includevoidmain(){intx;cin>>x;intp=x*x;cout<<"p=”<voidmain(){inti,j;i=5;j=0;intk=i+j;cout<<"i+j="<>;D.&17、下列各运算符中,()不能作用于浮点数。A./;B.&&;C.!;D.~18、下列各运算符中,()优先级最高。A.+(双目);B.*(单目);C.<=;D.*=19、下列各运算符中,()优先级最低。A.?:;B.|;C.||;D.!=20、下列各运算符中,()结合性从左到右。A.三目;B.赋值;C.比较;D.单目21、下列表达式中,()是非法的。已知:inta=5;floatb=5.5;A.a%3+b;B.b*b&&++a;C.(a>b)+(int(b)%2);D.---a+b22、下列表达式中,()是合法的。已知:doublem=3.2;intn=3;A.m<<2;B.(m+n)|nC.!m*=n;D.m=5,n=3.1,m+n23、下列关于类型转换的描述中,()是错误的。A.在不同类型操作数组成的表达式中,其表达式类型一定是最高类型double型;B.逗号表达式的类型是最后一个表达式的类型;C.赋值表达式的类型是左值的类型;D.在由底向高的类型转换中是保值映射。24、下列各表达式中,()有二义性。已知:inta(5);b(6);A.a+b>>3;B.++a+b++;C.b+(a=3);D.(a=3)-a++二、判断下列描述是否正确,对者划√,错者划×。1、任何字符常量与一个任意大小的整型数进行加减都是有意义的。2、转义序列表示法只能表示字符不能表示数字。3、在命名标识符中,大小写字母是不加区别的。4、C++的程序中,对变量一定要先说明再使用,说明只要在使用之前就可以。5、C++中数组元素的下标是从0开始,数组元素是连续存储在内存单元中的。6、数组赋初值时,初始值表中的数据项的数目可以大于或等于数组元素的个数。7、枚举变量的取值受到该枚举变量所对应的枚举表中的枚举符的局限。8、指针是用来存放某种变量的地址值的变量。这种变量的地址值也可以存放在某个变量中,存放某个指针的地址值的变量称为指向指针的指针,即二级指针。9、引用是用来给某个变量以别名的变量。,对引用的操作,实质上就是对被引用的变量的操作。10、运算符的优先级和结合性可以确定表达式的计算顺序。11、在说明语句中,的值和的值是相等的。12、已知:表达式具有两用性。13、移位运算符在移位操作中,无论左移还是右移,所移出的空位一律补0;14、某个变量的类型高是指该变量被存放在内存中的高地址处。15、隐含的类型转换都是保值映射,显式的类型转换都是非保值映射。16、类型定义是用来定义一些C++中所没有的新的类型。三、计算下列各表达式的值(下列各表达式是相互独立的,不考虑前面对后面的影响。)1、已知:unsignedintx=015,y=0x2b;A.x|y;B.x^y;C.x&y;D.~x+~y;E.x<<=3;F.y>>=4.2、已知:inti(10),j(5);A.++i-j--;B.i=i*=j;C.i=3/2*(j=3-2);D.~i^j;E.i&j|1;F.i+i&0xff.3、已知:inta(5),b(3);计算下列表达式得值以及a和b的值。A.!a&&b++;B.a||b+4&&a*b;C.a=1,b=2,a>b?++a:++b;D.++b,a=10,a+5;E.a+=b%=a+b;F.a!=b>2<=a+1.4、已知:intd(5),*pd=&d,&rd=d;A.d+-rd;B.*pd*rd;C.++*pd-rd;D.++rd-d.5、已知:’1’的ASCII码的值为49。A.3+2<<1+1;B.2*9|3<<1;C.5%-3*2/6-3;D.8==3<=2&5;E.!(‘3’>’5’)||2<6;F.6>=3+2-(‘0’-7).四、按下列要求编写程序1.从键盘上输入两个int型数,比较其大小,并输出显示其中小的。2.从键盘上输入一个int型数,一个浮点型数比较其大小,并输出其中大的。3.输入一摄氏温度,编程输出华氏温度。已知:华氏温度转换为摄氏温度的计算公式如下:C=(F-32)*5/9其中,F表示华氏温度,C表示摄氏温度。4.编程实现输入公里数,输出显示其英里数。已知:1英里=1.60934公里(用符号常量)。5.输入一个int型数,将它的低4位(右4位)都置为1。第三章习题一、选择填空1.预处理命令在程序中都是以()开头的。A.*;B.#;C.:;D./;2.文件包含命令中被包含的文件的扩转名()。A.必须为.h;B.不能用.h;C.必须是.c;D.不一定是.h;3.下列条件编译命令中#if()<语句序列1>#else<语句序列2>#endifA.整常量表达式;B.任何标识符;C.任意表达式;D.被定义的宏名;4.带参数的宏定义中,程序中引用宏定义的实参()。A.只能是常量;B.只能是整型量;C.只能是整形表达式;D.可以是任意表达式;5.下列()是语句A.;;B.a=17;C.x+y;D.cout<<”\n”;6.下列for循环的次数为()。for(inti(0),x=0;!x&&i<=5;i++)A.5;B.6;C.1;D.无限;7.下列while循环的次数是()。while(inti=0)i--;A.0;B.1;C.5;D.无限;8.下列do-while循环的循环次数为()。已知:inti(5);do{cout<#defineM1.5#defineA(a)M*avoidmain(){intx(5),y(6);cout<#defineMAX(a,b)(a)>(b)?(a):(b)voidmain(){intm(1),n(2),p(0),q;q=MAX(n,n+p)*10;cout<#include”f1.cpp”voidmain(){inta(5),b;b=f1(a);cout<voidmain(){inti(0);while(++i){if(i==10)break;if(i%3!=1)continue;cout<voidmain(){inti(1);do{i++;cout<<++i<voidmain(){inti(1),j(2),k(3),a(10);if(!i)a--;elseif(j)if(k)a=5;elsea=6;a++;cout<voidmain(){inti,j,a[8][8];**a=1;for(i=1;i<8;i++){**(a+i)=1;*(*(a+i)+i)=1;for(j=1;jvoidmain(){intx(5);do{switch(x%2){case1:x--;break;case0:x++;break;}x--;cout<0);}9.#includevoidmain(){inta(5),b(6),i(0),j(0);switch(a){case5:switch(b){case5:i++;break;case6:j++;break;default:i++;j++;}case6:i++;j++;break;default:i++;j++;}cout<charinput[]="SSSWILTECH1\1\11W\1WALLMP1";voidmain(){inti;charc;for(i=2;(c=input[i])!='\0';i++){switch(c){case'a':cout<<'i';continue;case'1':break;case1:while((c=input[++i])!='\1'&&c!='\0');case9:cout<0,有两个不等实根;(3)b2-4ac<0,有两个共轭复根;(4)a=0,不是二次方程。10.编程输出如下图案。*****************************************第四章习题一、选择填空1.当一个函数无返回值时,定义它时函数的类型应是()A.void;B.任意;C.int;D.无;2.在函数说明时,下列()项是不必要的。A.函数的类型;B.函数参数类型和名次;C.函数名字;D.返回值表达式;3.在函数的返回值类型与返回值表达式的类型的描述中,()是错误的。A.函数的返回值的类型是定义函数时确定的;B.函数的返回值的类型就是返回值表达式的类型;C.函数的返回值表达式的类型与函数返回值类型不同时,表达示类型应转换成函数返回值类型;D.函数的返回值类型决定了返回值表达式的类型。4.在一个被调用函数中,关于return语句使用的描述,()是错误的。A.被调用函数中可以不用return语句;B.被调用函数中可以使用多个return语句;C.被调用函数中,如果有返回值,就一定要有return语句;D.被调用函数中,一个return语句可返回多个值给调用函数。5.下列()是引用调用A.形参是指针,实参是地址值;B.形参和实参都是变量;C.形参是数组名,实参是数组名;D.形参是引用,实参是变量。6.在传值调用中,要求()。A.形参和实参类型任意,个数相等;B.形参和实参类型都完全一致,个数相等;C.形参和实参对应的类型一致,个数相等;D.形参和实参对应的类型一致,个数任意。7.在C++中,关于下列设置参数默认的描述中,()是正确的。A.不允许设置参数的默认值;B.设置参数默认值只能在定义函数时设置;C.设置参数默认值时,应该是先设置右边的再设置左边的;D.设置参数默认值时,应该全部参数都设置;8.重载函数在调用时选择的依据中,()是错误的。A.参数个数;B.参数的类型;C.函数名字;D.函数的类型;9.下列的标识符中,()是文件级作用域的。A.函数形参;B.语句标号;C.外部静态类标识符;D.自动类标识符。10.有一个int型变量,在程序中使用频度很高,最好定义为()。A.register;B.auto;C.extern;D.static;11.下列标识符中,()不是局部变量。A.register类;B.外部static类;C.auto类;D.函数形参;12.下列存储类标识符中,()的可见性与存在性不一值。A.外部类;B.自动类;C.内部静态类;D.寄存器类。13.下列存储类标识符中,要求通过函数来实现一种不太复杂的功能,并且要求加快执行速度,选用()合适。A.内联函数;B.重载函数;C.递归调用;D.嵌套调用。14.采用函数重载的目的在于()。A.实现共享;B.减少空间;C.提高速度;D.使用方便,提高可读性。15.在将两个字符串连接起来组成一个字符串时,选用()函数。B.A.strlen();B.strcpy();C.strcat();D.strcmp.二、判断下列描述的正确性,对者划√,错者划×。1.在C++中,定义函数时必须给出函数的类型2.在C++中,说明函数时要用函数原型,即定义函数时的函数头部分。3.在C++中,所有函数在调用前都要说明。4.如果一个函数没有返回值,定义时需用void说明。5.在C++中,传址调用将被引用调用所代替。6.使用内联函数是以牺牲增大空间开销为代价的。7.返回值类型、参数个数和类型都相同的函数也可以重载。8.在设置了参数默认值后,调用函数的对应实参就必须省略。9.计算函数参数顺序引起的二义性完全是由不同的编译系统决定的。10.For循环中,循环变量的作用域是该循环的循环体内。11.语句标号的作用域是定义该语句标号的文件内。12.函数形参的作用域是该函数的函数体。13.定义外部变量时,不用存储类说明符extern,而说明外部变量时用它。14.内部静态类变量与自动类变量作用域相同,但是生存期不同。15.静态生存期的标识符的寿命是短的,而动态生存期的标识符的寿命是长的。16.重新定义的标识符在定义它的区域内是可见的,而与其同名的原标识符在此区域内是不可见的。但是,它是存在的。17.静态类标识符在它的作用域之外是不存在的。18.所有的函数在定义它的程序中都是可见的。19.编译系统所提供的系统函数都被定义在他所对应的头文件中。20.调用系统函数时,要先将该系统函数的原型说明所在的头文件包含进去。三、分析下列程序的输出结果。1.#include#defineN5voidfun();voidmain(){for(inti(1);iintadd(inta,intb);voidmain(){externintx,y;cout<voidf(intj);voidmain(){for(inti(1);i<=4;i++)f(i);}voidf(intj){staticinta(10);intb(1);b++;cout<voidf(intn){intx(5);staticinty(10);if(n>0){++x;++y;cout<intfac(inta);voidmain(){ints(0);for(inti(1);i<=5;i++)s+=fac(i);cout<<”5!+4!+3!+2!+1!=”<voidfun(int,int,int*);voidmain(){intx,y,z;fun(5,6,&x);fun(7,x,&y);fun(x,y,&z);cout<intadd(intx,inty=8);voidmain(){inta(5);cout<<”sum1=”<#defineN6intf1(inta);voidmain(){inta(N);cout<voidswap(int&,int&);voidmain(){inta(5),b(8);cout<<”a=”<int&f1(intn,ints[]){int&m=s[n];returnm;}voidmain(){ints[]={5,4,3,2,1,0};f1(3,s)=10;cout<voidprint(int),print(char),print(char*);voidmain(){intu(1998);print(‘u’);print(u);print(“abcd”);}voidprint(charx){cout<voidff(int),ff(double);voidmain(){floata(88.18);ff(a);charb(‘a’);ff(b);}voidff(intx){cout<<”ff(int):”<和作用域运算符;C.静态数据成员不是所有对象所共用的。10.友元的作用()。A.提高程序的运用效率;B.加强类的封装性;C.实现数据的隐藏性;D.增加成员函数的种类。二、判断下列描述的正确性,对者划√,错者划×。1.使用关键字class定义的类中缺省的访问权限是私有(private)的。2.作用域运算符(::)只能用来限定成员函数所属的类。3.析构函数是一种函数体为空的成员函数。4.构造函数和析构函数都不能重载。5.说明或定义对象时,类名前面不需要加class关键字。6.对象成员的表示与结构变量成员表示相同,使用运算符.或->。7.所谓私有成员是指只有类中所提供的成员函数才能直接使用它们,任何类外的函数对它们的访问都是非法的。8.某类中的友元类的所有成员函数可以存取或修改该类中的私有成员。9.可以在类的构造函数中对静态数据成员进行初始化。10.如果一个成员函数只存取一个类的静态数据成员,则可将该成员函数说明为静态成员函数。三、分析下列程序的输出结果。1.#includeclassA{public:A();A(inti,intj);voidprint();private:inta,b;};A::A(){a=b=0;cout<<”Defaultconstructorcalled.\n”;}A::A(inti,intj){a=i;b=j;cout<<”Constructorcalled.\n”;}voidA::print(){cout<<”a=”<classB{public:B();B(inti,intj);voidprintb();private:inta,b;};classA{public:A();A(inti,intj);voidprinta();private:Bc;};A::A(inti,intj):c(i,j){}voidA::printa(){c.printb();}B::B(inti,intj){a=i;b=j;}voidB::printb(){cout<<”a=”<classCount{public:Count(){count++;}staticintHM(){returncount;}~Count(){count--;}private:staticintcount;};intCount::count=100;voidmain(){Countc1,c2,c3,c4;cout<classA{public:A(doublet,doubler){Total=t;Rate=r;}frienddoubleCount(A&a){a.Total+=a.Rate*a.Total;returna.Total;}private:doubleTotal,Rate;};voidmain(){Aa1(1000.0,0.035),a2(768.0,0.028);cout<classSet{public:Set(){PC=0;}Set(Set&s);voidEmpty(){PC=0;}intIsEmpty(){returnPC==0;}intIsMemberOf(intn);intAdd(intn);voidPrint();friendvoidreverse(Set*m);private:intelems[100];intPC;};intSet::IsMemberOf(intn){for(inti=0;i=100)return0;else{elems[PC++]=n;return1;}}Set::Set(Set&p){PC=p.PC;for(inti=0;i0)cout<PC/2;for(inti=0;ielems[i];m->elems[i]=m->elems[m->PC-i-1];m->elems[m->PC-i-1]=temp;}}voidmain(){SetA;cout<*的功能是()。A.用来表示指向对象指针对指向类成员指针的操作;B.用来表示对象对指向类成员指针的操作;C.用来表示指向对象指针对类成员的操作;D.用来表示对象类成员的操作。3.已知f1(int)是类A的公有成员函数,p是指向成员函数f1()的指针,采用()是正确的。A.p=f1;B.p=A::f1;;C.p=A::f1();D.p=f1();4.已知:p是一个指向类A数据成员m的指针,A1是类A的一个对象。如果要给m赋值为5,()是正确的。A.A1.p=5;B.A1->p=5;C.A.*p=5;D.*A1.p=5。5.已知:类A中一个成员函数说明如下:voidSet(A&a);其中,A&a的含意是()A.指向类A的指针为a;B.将a的地址值赋给变量Set;C.a是类A的对象引用,用来作函数Set()的形参;D.变量A与a按位相与作为函数Set()的参数。6.下列关于对象数组的描述中,()是错的。A.对象数组的下标是从0开始的;B.对象数组的数组名是一个常量指针;C.对象数组的每个元素是同一个类的对象;D.对象数组只能赋初值,而不能被赋值。7.下列定义中,()是定义指向数组的指针p。E.int*p[5];F.int(*p)[5];A.(int*)p[5];B.int*p[];8.下列说明中,constchar*ptr;ptr应该是()。A.指向字符常量的指针;B.指向字符的常量指针;C.指向字符串常量的指针;D.指向字符串的常量指针。9.已知:print()函数是一个类的常成员函数,它无返回值,下列表示中,()是正确的。A.voidprint()const;B.constvoidprint();C.voidconstprint();D.voidprint(const);10.关于new运算符的下列描述中,()是错的。A.它可以用来动态创建对象和对象数组;B.使用它创建的对象或对象数组可以使用运算符delete删除;C.使用它创建对象时要调用构造函数;D.使用它创建对象数组时必须指定初始值。11.关于delete运算符的下列描述中,()是错的。A.它必须用于new返回的指针;B.它也适用于空指针;C.对一个指针可以使用多次该运算符;D.指针名前只用一对方括号符,不管所删除数组的维数。12.具有转换函数功能的构造函数,应该是()。A.不带参数的构造函数;B.带有一个参数的构造函数;C.带有两个以上参数的构造函数;D.缺省构造函数;二、判断下列描述的正确性,对者划√,错者划×。1.指向对象的指针和指向类的成员的指针在表示形式上是不相同的。2.已知:m是类A的对象,n是类A的公有数据成员,p是指向类A中n成员的指针。下述两种表示是等价的:m.c和m.*p。3.指向对象的指针与对象都可以作函数参数,但是使用前者比后者好些。4.对象引用作函数参数比用对象指针更方便些。5.对象数组的元素可以是不同类的对象。6.对象数组既可以赋初值又可以赋值。7.指向对象数组的指针不一定必须指向数组的首元素。8.一维对象指针数组的每个元素应该是某个类的对象的地址值。9.constchar*p说明了p是指向字符串的常量指针。10.一个能够更新的变量使用在一个不能被更新的环境中是不破坏类型保护的,反之依然。11.一个类的构造函数中可以不包含对其子对象的初始化。12.转换函数不是成员函数,它是用来进行强制类型转换的。三、分析下列程序的输出结果。1.#includeclassA{public:A();A(inti,intj);~A();voidSet(inti,intj){a=i;b=j;}private:inta,b;};A::A(){a=b=0;cout<<”Defaultconstructorcalled.\n”;}A::A(inti,intj){a=i;b=j;cout<<”Constructor:a=”<classB{intx,y;public:B();B(inti);B(inti,intj);~B();voidprint();};B::B(){x=y=0;cout<<”Defaultconstructorcalled.\n”;}B::B(inti){x=i;y=0;cout<<”Constructor1called.\n”;}B::B(inti,intj){x=i;y=j;cout<<”Constructor2called.\n”;}B::~B(){cout<<”Destructorcalled.\n”;}voidB::print(){cout<<”x=”<classA{public:A(inti=0){m=i;cout<<”constructorcalled.”<classA{public:A(inti=0){m=i;cout<<”constructorcalled.”<classcomplex{public:complex();complex(doublereal);complex(doublereal,doubleimag);voidprint();voidset(doubler,doublei);private:doublereal,imag;};complex::complex(){set(0.0,0.0);cout<<”Defaultconstructorcalled.\n”;}complex::complex(doublereal){set(real,0.0);cout<<”Constructor:real=”<#includeclassString{p
/
本文档为【C习题与答案解析】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
热门搜索

历史搜索

    清空历史搜索