第1页共7页C++习题及答案一、单项选择题(在每小题的四个备选答案中,选出一个正确答案,并将正确答案的序号填在题目的括号内。每小题1分,共20分)1.不属于字符型常量的是()A.‘A’B.‘a’C.“A”D.‘b’2.根据C语言的语法规则,下列()是不合法标识符。A.whileB.NameC.Rern5D._exam3.表达式“1?(0?3:2):(10?1:0)”的值为().A.3B.2C.1D.04.为表示关系x≥y≥z,应使用C语言表达式().A.(x=y)&&(y=z)B.(x=y)AND(y=z)C.(x=y=z)D.(x=z)&(y=z)5.以下说法中正确的是().A.C语言程序总是从第一个定义的函数开始执行。B.在C语言程序中,要调用的函数必须有main()函数中定义。C.C语言程序总是从main()函数开始执行。D.C语言程序中的main()函数必须放在程序的开始部分。6.设有数组定义:chararray[]=“China”;则数组所占的存贮空间为().A.4个字节B.5个字节C.6个字节D.7个字节7.C语言中以只读方式打开一个文件应选择()参数。A.”r”B.“w”C.“rb”D.“a”8.从循环体内某处跳出,继续从头执行该循环外的语句是:().A.break语句B.return语句C.continue语句D.空语句。9.设有定义:longx=-123456L;则以下能够正确输出变量x值的语句是().A.printf(“x=%d\n”,x)B.printf(“x=%ld\n”,x)C.printf(“x=l\n”,x)D.printf(“x=%D\n”,x);10.C语言用()表示逻辑“真”值。A.trueB.t或yC.非零整型值D.整型值011.设A为存放(短)整型的一维数组,如果A的首地址为P,那么A中第i个元素的地址为()。A.P+i*2B.P+(i-1)*2C.P+(i-1)D.P+i12.字符串指针变量中存入的是().A.字符串的首地址。B.字符串C.第一个字符D.字符串变量。13.以()个是不正确的描述。A.数组名可以作为参数进行传递。B.在定义函数时,必须指定形参的类型。C.形参和实参之间可以是值传递。D.不论在主函数还是自定义函数中,只要说明了变量,就可为其分配存贮单元。14.在函数中默认存储类型说明符的变量应该是()存储类型。A.内部静态B.外部C.自动D.寄存器15.设已有定义:char*st=howareyou;下列程序段中正确的是()A.chara[11],*p;strcpy(p=a+1,st[4]);B.chara[11];strcpy(a,st);C.chara[11];strcpy(++a,st);D.chara[],*p;strcpy(p=&a[1],st+2);16.计算机算法指的是()。得分第2页共7页A.计算方法B.排序方法C.调度方法D.解决某一问题的有限运算序列17.栈是一种()的数据结构。A.先进后出B.先进先出C.只允许在端点处插入和删除元素D.操作没有限制18.循环队列用数组A[0..m-1]存放其元素值,已知其头尾指针分别是front和rear,则当前队列中的元素个数是()。A.rear-front-1B.rear-front+1C.(rear-front+m)MODmD.rear-front19.structsk{inta;floatb;}data;int*p;若要使p指向data中的a域,正确的赋值语句是()。A.p=&a;B.p=data.a;C.p=&data.a;D.*p=data.a20.若有以下说明和定义typedefint*INTEGERINTEGERp,*q;以下叙述正确的是()。A.p是int型变量B.p是基类型为int的指针变量C.q是基类型为int的指针变量D.程序中可用INTEGER代替int类型名二、填空题(1-2题每题2分,3-8题每题1分,共10分)1.C语言中基本的数据类型有:______、______、______。2.C语言中普通整型变量的类型说明符为______,在内存中占______字节,有符号普通整型的数据范围是______。3.整数-35在机内的补码表示为______。4.执行下列语句inta=8;a+=a-=a*a;后,a的值是______。5.有如下语句:charA[]={“Iamastudent”};该字符串的长度是______,A[3]=______。6.符号“a”和‘a’的区别是______。7.所谓“指针”就是______.“&”运算符的作用是______.“*”运算符的作用是______。8.有如下输入语句:scanf(“a=%d,b=%d,c=%d”,&a,&b,&c);为使变量a的值为1,b的值为3,c的值为2,从键盘输入数据的正确形式应是。三、判断题(判断下列各小题,正确的在题后括号内打“√”,错的打“╳”。每小题1分,共10分)1.C语言源程序文件通过了编译、连接之后,生成一个后缀为.EXE的文件。()2.在C程序中,函数既可以嵌套定义,也可以嵌套调用。()3.在C程序中,APH和aph代表不同的变量。()4.表达式0195是一个八进制整数。()5.continue语句的作用是结束本次循环。()6.extern变量的生命期是整个程序执行期。()7.C语言中字符串的结束符是‘\0’。()8.如果有定义inta,*p=&a;则*p与a意义相同。()9.结构体变量中各成员共享空间。()10.起泡排序法是稳定的。()得分得分第3页共7页四、应用题(每小题7分,共42分)1.#include“stdio.h”main(){inta[]={8,2,9,4,1},*p;p=a;*(p+2)+=2;printf(“%d,%d”,*p,*(p+2));}该程序的运行结果是___________________________________.2.已知有一函数定义如下:templateclassTvoidswap1(Ta,Tb){Ttemp;temp=a;a=b;b=temp;}主函数调用格式如下:main(){intx=1,y=2;printf(“x=%dy=%d\n”,x,y);swap1(x,y);printf(“x=%dy=%d\n”,x,y);}执行后输出结果为x=1y=2x=1y=2本来是想交换x和y的值,但没有成功,请指出错误所在,并该正之。3.for(a=1,b=1;a=100;a++){if(b=20)break;if(b%3==1){b+=3;continue;}b-=5;}程序执行后a和b的值分别为。4.main(){inti,num[5];for(i=0;i5;i++)num[i]=i*10-2;printf(“%d”,num[3]);}得分第4页共7页该程序的运行结果是_______________________________.5.main(){floatc,f;c=30.0;f=(6*c)/5+32;printf(“f=%f”,f);}该程序的运行结果是________________________________.6.写出下列程序的运行结果。#include“stdio.h”main(){inta[]={1,2,3,-4,5};intm,n,*p;p=&a[0];m=*(p+1);n=*(p+4);printf(“%d%d%d”,*p,m,n);}该程序的运行结果是________________________________.五、编程题(18分,任选2题,每题9分,选题操作2题按错误最多的2题评分)1.编程将文件score1.txt中的字符读出显示到屏幕上。2.输出1—100之间不能被12整除的数。3.从键盘上输出10个整数存入一维数组中,按由大到小的顺序输出。4.假设以带头结点的单链表表示线性表,单链表的类型定义如下:templateclassT得分第5页共7页structNode{Tdata;NodeT*next;//此处T也可以省略};编写函数判断链表是否为空。函数原型如下:boolIsEmpty(NodeT*head);单项选择题CABACCACBCBADCBDACCB填空题1.整型实型字符型顺序可以不一致,实型1分,其余两种各0.5分2.int4-231~+231-1(1分)3.232-35或0xffffffdd4.-1125.14‘m’没有单引号不扣分(各0.5分)6.一个字符串一个字符7.地址取地址取内容(或代表目标变量)(各1/3分,答对2个不扣分)8.1,3,2判断题√╳√╳√√√√╳√应用题1.8,112.指出错误3分,改正4分改成引用或指针均可,改成指针,如下:templateclassTvoidswap1(T*a,T*b)//3分{Ttemp;temp=*a;*a=*b;*b=temp;}main(){intx=1,y=2;printf(x=%dy=%d\n,x,y);swap1(&x,&y);//1分printf(x=%dy=%d\n,x,y);}3.8224.28第6页共7页5.68.0000006.125编程题5.编程将文件score1.txt中的字符读出显示到屏幕上。参考程序:#includestdio.hmain(){FILE*fp;//1分charc;//1分fp=fopen(score1.txt,r);//1分while(!feof(fp))//2分{//fscanf(fp,%c,&c);c=fgetc(fp);//2分putchar(c);//1分}fclose(fp);//1分}6.输出1—100之间不能被12整除的数。参考程序:#includestdio.hmain(){inti;//1分for(i=1;i=100;i++)//2分{if(i%12==0)//3分continue;//1分printf(%d,i);//2分}}7.从键盘上输出10个整数存入一维数组中,按由大到小的顺序输出。#includestdio.hmain(){inti,j,a[10],temp;//1分for(i=0;i10;i++)scanf(%d,&a[i]);//2分for(i=0;i10;i++)for(j=0;j10-i-1;j++){第7页共7页if(a[j]a[j+1]){temp=a[j];a[j]=a[j+1];a[j+1]=temp;}}//4分for(i=0;i10;i++)printf(%d,a[i]);//2分}8.假设以带头结点的单链表表示线性表,单链表的类型定义如下:templateclassTstructNode{Tdata;NodeT*next;//此处T也可以省略};编写函数判断链表是否为空。函数原型如下:boolIsEmpty(NodeT*head);参考程序:boolIsEmpty(NodeT*head)//3分{return!head-next;//6分}