C++笔试要点代C语言要点.docx

上传人:b****1 文档编号:13729459 上传时间:2023-06-16 格式:DOCX 页数:50 大小:73.47KB
下载 相关 举报
C++笔试要点代C语言要点.docx_第1页
第1页 / 共50页
C++笔试要点代C语言要点.docx_第2页
第2页 / 共50页
C++笔试要点代C语言要点.docx_第3页
第3页 / 共50页
C++笔试要点代C语言要点.docx_第4页
第4页 / 共50页
C++笔试要点代C语言要点.docx_第5页
第5页 / 共50页
C++笔试要点代C语言要点.docx_第6页
第6页 / 共50页
C++笔试要点代C语言要点.docx_第7页
第7页 / 共50页
C++笔试要点代C语言要点.docx_第8页
第8页 / 共50页
C++笔试要点代C语言要点.docx_第9页
第9页 / 共50页
C++笔试要点代C语言要点.docx_第10页
第10页 / 共50页
C++笔试要点代C语言要点.docx_第11页
第11页 / 共50页
C++笔试要点代C语言要点.docx_第12页
第12页 / 共50页
C++笔试要点代C语言要点.docx_第13页
第13页 / 共50页
C++笔试要点代C语言要点.docx_第14页
第14页 / 共50页
C++笔试要点代C语言要点.docx_第15页
第15页 / 共50页
C++笔试要点代C语言要点.docx_第16页
第16页 / 共50页
C++笔试要点代C语言要点.docx_第17页
第17页 / 共50页
C++笔试要点代C语言要点.docx_第18页
第18页 / 共50页
C++笔试要点代C语言要点.docx_第19页
第19页 / 共50页
C++笔试要点代C语言要点.docx_第20页
第20页 / 共50页
亲,该文档总共50页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C++笔试要点代C语言要点.docx

《C++笔试要点代C语言要点.docx》由会员分享,可在线阅读,更多相关《C++笔试要点代C语言要点.docx(50页珍藏版)》请在冰点文库上搜索。

C++笔试要点代C语言要点.docx

C++笔试要点代C语言要点

C++笔试部分要点:

1.标识符(可作为变量名、数组名、函数名等)的命名规范

①由52个英文大小写字母,10个数字,一个下划线构成

②以英文字母或下划线开头,不能是保留字

(例子)下列符号中可以用作C++标识符的是__________

A)MainB)foo-barC)elseD)3room

常见错误及注意事项:

①以数字开头(如3room),

②中间含有空格或非法字符(如foo-bar,或MyName)

③区别大小写(如Main与main不同,if与If不同)

④保留字(如if、while等)不能作为标识符

⑤但编译预处理命令(如include、define、main等)不是保留字,它们可以被用作标识符。

如,下列程序合法:

#include

voidmain()

{

intinclude;

cin>>include;

cout<

}

#include

voidmain()

{

intmain;

cin>>main;

cout<

}

#include

voidmain()

{

intdefine;

cin>>define;

cout<

}

2.各种类型常量书写规范

0650X9A0X9AL45L45l35U35u

3.26F3.4f2.3E822.3e-45.3e4

'C''\t''\n''\24''\101''\x4.99a'

'\"''\'''\\'"string"

空字符'\0',空格'',空串""

常见错误:

①八进制数048,0后面跟大于7的数字

②'\038',\0后面跟大于7的数字

③十六进制数0xaG,0x后面跟大于f/F的字符

④5.3e4.2,指数部分写成了带小数点的实型数

⑤'abc',单引号中括多个字符

(例子)以下合法的常量是__________

A)'\28'B)'0XAB'C)2.3E8.0D)"ab\0cd"

#include

main()

{

printf("%d,%d\n",strlen("ab\0cd"),sizeof("ab\0cd"));

}输出2,6

 

3.基本类型数据在内存中的长度以及存放形式:

整型数据:

补码形式存储正整数的补码与原码相同

实型数据:

浮点形式存储

sizeof(char)=sizeof(unsignedchar)1字节

sizeof(short)=sizeof(unsignedshort)2字节

sizeof(int)=sizeof(unsignedint)2字节

sizeof(long)=sizeof(unsignedlong)4字节

sizeof(float)4字节

sizeof(double)8字节

sizeof(char*)=sizeof(int*)=sizeof(float*)=…=2

即所有指针类型的变量的长度都是2。

 

4.不同整型数据(长度不同)相互赋值原则

char,int,short,long,

(每种类型前都可加signed和unsigned)得:

signedchar,signedint,signedshort,signedlong,

unsignedchar,unsignedint,unsignedshort,unsignedlong

均可用作整型量

赋值时:

短←长截取“长”数据的低位,然后赋值

长←短将“短”数据扩展成等长数据,然后赋值

扩展原则:

若短数据为无符号型,则前面补0(unsigned)

若短数据为有符号型,则前面补符号位

(例子)短←长

已知216=65536,请写出下列程序段的输出。

inti=65538;cout<

65538是长整型常量

65538:

00000000000000010000000000000010

i:

0000000000000010

(例子)请写出下列程序段的输出。

长←短

voidmain()

{

charc1=-3;unsignedcharc2=-3;/*短←长*/

inta1=c1,a2=c2;/*长←短*/

cout<

}

-3:

1111111111111101(32位)整型常数

c1:

11111101(8位)c2:

11111101(8位)

a1:

1111111111111101(16位)a2:

0000000011111101(16位)

5.类型转换(赋值时的类型转换,混合运算时的类型转换)

(例子)设有语句:

for(ints=1,i=2;i<=6;i++)s*=i/2;

执行该语句后,s的值是_______________。

A.1B.12

C.22D.22.5

【解析】

若两个量都是整型,则运算结果应是整型量。

i/2的结果应是整型量,如i=3,则i/2的结果应是1。

(例子)已知x=2.5,a=7,y=4.7

求x+a%3*(int)(x+y)%2/4的值

答案:

2.5

(例子)设有语句:

chars[]="246",*ptr=s;

cout<<(char)(*(ptr+1)+1)<<'\n';

执行以上语句后,输出_______。

A.5B.6C.46D.56

①cout<<(*(ptr+1)+1)<<'\n';输出什么?

②表达式(*(ptr+1)+1)的类型是什么?

答案:

①输出53('5'的ASCII码)

②表达式类型是int型

(例子)设有变量说明:

inta=0,b=0;

则表达式sizeof('a'+'b')的值为:

A.1B.2C.4D.8

(例子)设有变量说明:

floata=0,b=0;

则表达式sizeof(a+b)的值为:

A.1B.2C.4D.8

 

【解析】

 

横向:

必定转换

 

问题:

①表达式'3'+'5'的类型?

int型

②sizeof('3'+'5')的值?

2

③cout<<('3'+'5')<

(因为'3'和'5'的ASCII码分别是51和53)

④sizeof('a'*'b')的值为?

2

⑤sizeof(3)的值?

2

⑥sizeof('3')的值?

1

⑦cout<<'3'<

⑧cout<

 

6.表达式的计算

(逗号表达式,赋值表达式,逻辑表达式优化,关系表达式,整数求余%,整数整除/)

(例子)设定义了说明语句:

intk,j;

下列选项中,没有语法错误的表达式是_________。

A.(k++)++B.(k+3)=5C.k--/=5D.k---j

【解析】

A.++不能作用于表达式

B.C.赋值表达式的左值不能是表达式。

D.k---j等价于(k--)-j,不是赋值表达式。

自左至右扫描,尽量构成运算符。

因此k---j不等价于k-(--j)。

(例子)设有变量说明:

inta=3,b=4,c=5;下列表达式中,值为0的表达式是__________。

A.'a'&&'b'B.a<=b

C.a||b+c&&b-cD.!

(a

(例子)已知intx=1,y=3,m=0,n=0,k=0;

k=(n=y>x)||(m=x

则语句cout<

输出的是__________。

A)1,1,0B)1,0,1C)1,1,1D)0,1,1

(例子)若有语句

intx=0,y=1,z=2;

z=++x||++y;

执行以上语句后,变量x、y和z的值分别为_____。

答案:

1,1,1

以上两题适用于如下规则

逻辑运算优化规则:

不管优先级,从左至右扫描,若||前为“真”,或者&&前为“假”,则停止。

(“或”运算的前一个值若为真,则后一个表达式不算)

(“与”运算的前一个值若为假,则后一个表达式不算)

(例子)请写出下列程序段的输出。

intx=-5;

if(0

printf("***\n");

else

printf("###\n");

本题答案:

输出***

表示数学关系0

1

另外还有:

'A'<=ch&&ch<='Z'

不能写成:

'A'<=ch<='Z'

(例子)若a1,a2,a3和a4均为整型变量,则以下选项中,符合C++语法规则的表达式是_______________。

A.a1=25%3.3B.a2=a1+a3=3*5

C.a3=078D.a4=0Xa2

解析:

%要求运算量为整型

+比=优先级高

078是非法常量

 

7.=与==的区别

(例子)

设有语句:

inti=10,j=10;

if(j=0)i=i*i;

elsei=i+j;

执行以上语句后i的值为______。

//答案:

10。

j被赋值是0,所以if里面是0,为假,若j被赋值是12(非零量即可),则输出100;

(例子)

设有语句:

inti=10,j=0;

if(j==0)i=i*i;

elsei=i+j;

执行以上语句后i的值为______。

//100

8.前后缀++,――

(例子)执行以下程序段后,输出结果是_______。

intx=9,y=8;

inta,b,c;

a=(--x==y++)?

--x:

++y;//注意=与==的区别

b=x++;

c=y;

cout<

A)7,7,9B)8,8,8C)8,9,8D)1,10,9

(例子)有语句:

inty=100;

while(y--);

cout<<"y="<

A)y=0B)while构成无限循环

C)y=1D)y=-1

(例子)i=5;while(i++<10);运行结束后i=?

答案:

i=11

 

9.运算符的优先级和结合性

(例子)以下程序输出______

intx=5,y=6;

y*=x+y;//等价于y=y*(x+y);

cout<

【解析】*=的优先级与=一样

(例子)

voidfun(int*a,int*b)//a指向c1[0],b指向c2[0]

{

(*a)++;

*b++;//等价于*(b++),表达式b++的值是b的原始值,

而++是作用在b上的

*a++;

(*b)++;

cout<<*a<<'\t'<<*b<

}

voidmain(void)

{

intc1[3]={10,20,30},c2[3]={40,50,60};

fun(c1,c2);//参数传递时,有int*a=c1;int*b=c2;

cout<

cout<

}

程序输出的第一行是_____,第二行是_____,第三行是_____。

//答案:

205111204051

10.if语句的语义(else的匹配问题)

(例子)写出程序的输出________

voidmain()

{intx=2,y=-1,z=2;

if(x

if(y<0)z=0;

elsez+=1;

cout<

}

A)3B)2C)1D)0

【解析】else与距它最近的尚未匹配的if匹配,而不是靠书写对齐来匹配

(例子)写出程序的输出________

inta=1,b=2,c=3;

if(a==b)

if(b==c)printf("a=b=c\n");

elseprintf("a!

=b\n");

答案:

无输出

11.switch语句---break

 

注意:

“表达式”中可以有变量。

“常数i”只能是常数表达式,如'a'或3+2或3+N等,N是已定义的符号常数。

(例子)

设变量a,b是整型变量,下列switch语句中,语法正确的是:

A.switch(a){

 casea:

a++;break;

caseb:

b++;break;

}

B.switch(a+b){

case1:

b=a++;break;

case1:

a=++b;

}

C.switch(a*a){

 case10,12:

++a;

case14,16:

++b;

}

D.switch(a/10+b){

case3:

b=a/10;break;

default:

a+=b;

}

(例子)

#include

voidmain()

{intx=1,y=0,a=0,b=0;

switch(x)

{case1:

switch(y)

{case0:

a++;break;

case1:

b++;break;

}

case2:

a++;b++;break;

}

cout<<”a=”<

}

程序输出为:

A)a=2,b=1B)a=1,b=1

C)a=1,b=0D)a=2,b=2

(例子)

voidmain(void)

{

charc,*s="1234";

while(c=*s++)

switch(c-'0')

{

case0:

case1:

printf(“%c”,c+1);

case2:

printf(“%c\n”,c+2);

break;

default:

printf(“%c\n”,c+3);

break;

}

printf(“\n”);

}

程序的输出的第一行是________。

答案:

23

程序的完整输出是:

23

4

6

7

(例子)以下程序若输入china#则输出_____//5,5

voidmain()

{

intv1=0,v2=0;

charch;

while(ch=getchar())!

='#')

switch(ch)

{

case'a':

case'h':

default:

v1++;

case'o':

v2++;

}

cout<

}

12.循环

(1)for语句中的条件表达式缺省,则条件为永“真”。

(例子)设e1和e3是表达式,与语句for(e1;;e3)s;等同的语句是_____。

A.for(e1;e1;e3)sB.for(e1;e3;e3)s

C.for(e1;0;e3)sD.for(e1;1;e3)s

(2)while(或for)与do-while的区别,循环体执行的次数

(3)循环的执行次数

(例子)设有循环语句:

for(inti=0,x=0,s=0;i<=9&&x!

=55;i++)

{

scanf(“%d”,&x);

s+=x;

}

在这个循环语句中,循环体最多执行为____次,最少执行_____次。

答案:

101

(例子)执行以下语句时,循环的次数是:

for(intx=0,y=0;!

x&&y<=5;y++);正确的程序是这样

A.无次数B.0C.5D.6

(例子)执行以下语句时,循环的次数是:

for(intx=0,y=0;!

x&&y<=5;y--);

A.无次数B.0C.5D.6

答案:

我们习题汇编中给出的答案是A,

省考试中心给出的标准答案是D(我们题目录入错误)

实际上此题在C语言环境中无正确答案,循环次数应该是32769次。

y实际变化的过程是:

y=0(0000000000000000)

y=-1(1111111111111111)

y=-2(1111111111111110)

y=-32768(-215)其内存内容是:

(1000000000000000)

再次减1,发生溢出(即比int型数值的下限还要小),y变为:

(0111111111111111)

值为32767(215-1)即int型数值的上限。

此y<=5不成立,循环结束。

为了验证了上述观点,修改上述程序:

#include

main()

{

intx,y;

longcount=0;//count用于统计循环次数

for(x=0,y=0;!

x&&y<=5;y--)count++;

printf("%ld\n",count);

}

输出:

32769

13.嵌套循环,循环中的break,continue

(例子)有一种只在循环语句或switch语句中使用的流程控制语句,表示该语句的关键字是__________

(例子)//判断一个二维数组是否关于主对角线对称

voidmain(void)

{

inta[4][4]={1,2,3,4,2,2,5,6,3,5,2,7,4,6,7,4};

1234

2256

3527

4674

inti,j,flag=0;

for(j=0;j<4;j++)

for(i=0;i<=j;i++)

{

if(a[j][i]==a[i][j])continue;//流程转到哪里?

Continue跳过下面的语句

flag=1;

}

if(flag)cout<<"No!

"<

elsecout<<"AllRight!

"<

}

输出:

AllRight!

(例子)程序输出为:

______

#include

voidmain()

{inti,j,sum=0;

for(i=0;i<5;i++)

for(j=0;j<6;j++)

{

sum++;

if(i==3)break;//break跳出哪一个循环?

}

cout<

120-1

3-2-30

40-55

-6607

}

输出:

25,5,6

(例子16)

#include

voidmain(void)

{inta[4][4]={{1,2,0,-1},{3,-2,-3,0},{4,0,-5,5},{-6,6,0,7}};

for(inti=0,s=0;i<4;i++)

for(intj=0;j<4;j++)

{

if(a[i][j]<0)continue;

if(a[i][j]==0)break;

s+=a[i][j];

}

cout<

}

程序的输出是______________。

输出:

16

(例子)

voidmain()

{intx=3,y=6,a=0;

while(x++!

=(y-=1))//注意:

比较时,x,y的值

{a+=1;//比较后,x,y的值

if(y

}

cout<<"x="<

}

A)x=4,y=4,a=1B)x=5,y=5,a=1

C)x=5,y=4,a=3D)x=5,y=4,a=1

(例子)程序读入最多20个数,统计正数个数,并计算正数之和。

要求或者输入0结束,或者若已读入20个数自动结束。

请填空。

#include

voidmain()

{

inti,a[20],sum,count;

sum=count=0;

for(i=0;;i++)

{

if(i>19)____________;//break;

cin>>a[i];

if(a[i]==0)____________;//break;

if(a[i]<0)____________;//continue;

sum+=a[i];

count++;

}

cout<<"sum="<

}

14.函数原型说明,函数调用,函数的返回值

(例子)下列关于C++函数的叙述中,正确的是______

A)每个函数至少要具有一个参数

B)每个函数都必须返回一个值

C)函数在被调用之前必须先声明

D)函数不能自己调用自己

(例子)下列叙述中,不正确的是:

A.一个函数中可以有多个return语句

B.函数可通过return语句返回数据

C.必须用一个独立的语句来调用函数

D.函数main也可以带有参数

【解析】函数调用可以作为表达式的一部分,如y=4+f(x);

(例子)在以下的函

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2