C语言基本概念题解答选编.docx

上传人:b****5 文档编号:10177458 上传时间:2023-02-09 格式:DOCX 页数:19 大小:28.96KB
下载 相关 举报
C语言基本概念题解答选编.docx_第1页
第1页 / 共19页
C语言基本概念题解答选编.docx_第2页
第2页 / 共19页
C语言基本概念题解答选编.docx_第3页
第3页 / 共19页
C语言基本概念题解答选编.docx_第4页
第4页 / 共19页
C语言基本概念题解答选编.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

C语言基本概念题解答选编.docx

《C语言基本概念题解答选编.docx》由会员分享,可在线阅读,更多相关《C语言基本概念题解答选编.docx(19页珍藏版)》请在冰豆网上搜索。

C语言基本概念题解答选编.docx

C语言基本概念题解答选编

C语言基本概念题解答选编

 一、单项选择题

 1.以下字符列中,能作为C程序自定义标识符的是

A、num(10)  B、file_bak  C、break  D、class+2

【解】C语言规定,C程序的标识符的命名规则是要由英文字母或下线字符开头,由英文字母、下线字符和数字符构成的字符序列,并且不可以与C语言规定的保留字相同。

在供选择的答案中,选择A含有括号字符,不是标识符,它好象是函数调用表达式;选择B符合C语言关于标识符的构成规则,所以它可以作为标识符;选择C是C语言的保留字,它不可以再被程序设定为标识符;选择D是一个加法运算算术表达式,也不可以作为程序的标识符。

所以解答是B。

 2.下列字符列中,不是用来表达转义字符是

  A、\\  B、\’  C、074  D、\0

【解】转义字符有三种书写形式:

反斜杠字符后接上某个规定的字符;反斜杠字符后接上1至3个八进制数字符;反斜杠字符和字符x之后接上1至2个十六进制数字符。

后两种分别以八进制数和十六进制数直接给出字符的ASCII代码值。

而074是八进制整数,不是转义字符。

所以解答是C。

 3.下列字符列中,可以作为“字符串常量”的是

  A、ABC  B、″ABC″  C、’abc’  D、’a’

【解】C程序中,一个字符串常量是表示一个字符序列,书写时,用双引号字符前后括住这个字符序列。

所以只有″ABC″是一个正确的字符串常量,其余都不是。

其中,ABC可作为标识符,字符列’abc’不能出现在C程序中,’a’是一个字符常量。

所以解答是B。

 4.在用一个字节存储一个字符的系统中,’\n’在内存占用的字节数是

  A、1  B、2  C、3  D、4

【解】一般来说,一个字符在内存中只占1个字节,’\n’是转义字符,其意义是换行符,它作为一个字符存储,在内存也只占1个字节。

所以解答是A。

 5.字符串″xyz″在内存占用的字节数是

  ①3 ②4  ③6  ④8

【解】字符串中的每个字符占1个字节,但C程序在存储字符串时,要在最后一个有效字符后面接上1个字符串结束的标记符’\0’。

这样,存储字符串常量″xyz″需要4个字节。

所以解答是②。

 6.设变量m,n,a,b,c,d均为0,执行(m=a==b)||(n=c==d)后,m,n的值是

  ①0,0 ②0,1  ③1,0  ④1,1

【解】计算(m=a==b)||(n=c==d)的过程是先计算逻辑或的左运算分量(m=a==b)的值,由于赋值运算符的优先级比关系运算符==的优先级低,又先计算a==b。

因a,b均为0后,所以比较结果值为1。

将1赋给变量m,使变量m的值变为1。

同时这个赋值运算的结果也是1,这样逻辑运算的左运算分量的值为1。

由于逻辑或运算的左运算分量值为1,按照C语言对逻辑或运算优化计算的规定,不再计算逻辑或的右运算分量,而直接得到逻辑或运算的结果为1。

由于逻辑或的右运算分量不曾计算过,所以变量n的值也不为变化。

这样,上述表达式计算后,变量m的值为1,变量n的值为0。

所以解答是③。

 7.设a为5,执行下列语句后,b的值不为2的是

  ①b=a/2 ②b=6-(--a)  ③b=a%2  ④b=a<3?

3:

2

【解】因两个整型数据相除,结果是整数,当a的值为5时,计算表达式b=a/2后,使b的值为2。

计算表达式b=6-(--a)是先计算子表达式(--a),先让a的值减1变成4,并以减1后的a为子表达式的结果,所以子表达式的结果为4,最后使b的值为2。

在计算表达式b= a%2时,求余运算a%2的结果为1,最后使变量b的值为1。

计算表达式b=a<3?

3:

2时,先计算条件表达式a<3?

3:

2,以2为结果,最后也使变量b的值为2。

所以解答是③。

 8.执行语句“x=(a=3,b=a--);”后,x,a,b的值依次为

  ①3,3,2 ②2,3,2  ③3,2,3  ④2,3,3

【解】计算表达式x=(a=3,b=a--)时,先计算赋值号右端圆括号内的逗号表达式。

逗号表达式要求各子表达式顺序计算,并以最后子表达式的值为整个逗号表达式的结果。

所以该表达式计算时,先让变量a的值为3,a--的值是a当时的值,以该值为结果赋给变量b,并以该值为逗号表达式的值赋给变量x,然后a的值被减少1。

所以计算该表达式后,使变量x,a,b的值依次为3,2,3。

所以解答是③。

 9.设有语句“inta=3;”,则执行了语句“a+=a-=a*a;”后,变量a的值是

  ①3 ②0 ③9 ④-12

【解】由于赋值运算符的结合性自右至左,语句“a+=a-=a*a;”的执行是先计算a*a,得到值9,再计算a-=a*a,使a的值为-6,接着计算a+=a,使a的值为-12。

所以解答是④。

 10.在以下一组运算符中,优先级最高的运算符是

  ①<= ②= ③% ④&&

【解】常规运算符的优先级自高到低的排列顺序是算术运算符、移位运算符、关系运算符、按位运算符、逻辑运算符、条件运算符、赋值运算符、逗号运算符。

所以问题所给的四个运算符按优先级自高到低的排列顺序是%,<=,&&,=。

所以解答是③。

 11.设整型变量i的值为3,则计算表达式i---i后表达式的值为

  ①0 ②1 ③2 ④表达式出错

【解】有些运算符只有一个字符,也有许多运算符由两个字符组成。

特别是有些字符既可是单个字符的运算符,又能组成双字符的运算符。

编译系统在识别源程序时,通常是尽量多地读入字符,能组成多字符单词的先尽量组成多字符单词。

所以表达式i---i,被编译器理解为(i--)-i。

另外,当表达式中某变量有后缀自增和自减运算时,先按变量的原值计算表达式,然后再对变量进行自增和自减运算。

同样地,当表达式中某变量有前缀自增和自减运算时,先对变量进行自增和自减运算,然后再按变量的新值计算表达式。

按这个约定,求表达式(i--)-i是计算i-i的值为0,然后再对i作自减运算。

这样,表达式(i--)-i的值为0。

所以解答是①。

 12.若已定义x和y为double类型,则表达式:

x=1,y=x+3/2的结果是

  ①1 ②2 ③2.0 ④2.5

【解】由于变量x和y都是double类型,表达式x=1,y=x+3/2是先计算x=1,由于1是整型的,x是double类型的,该计算先将整数1转换成double类型的1.0,并将1.0赋给变量x。

计算y=x+3/2是先求3/2的值,因是两整数相除,结果是整型值1,然后在计算x+1时,也先将1转换成1.0,然后求得x+1的值为2.0,最后将该值赋给变量y,并得到整个表达式的值为2.0,简写成2.0。

所以解答是③。

 13.设a=1,b=2,c=3,d=4,则表达式a

a:

c

a:

d的结果为

  ①4 ②3 ③2 ④1

【解】条件运算符的优先级比关系运算符的优先级低,并且它的结合性是自右向左的,所以表达式a

a:

c

a:

d可用圆括号等价地写成(a

a:

((c

a:

d)。

因a

所以解答是④。

 14.设a为整型变量,下列C表达式中,不能表达数学关系式:

10

  ①10

  ③a>10&&a<15     ④!

(a<=10)&&!

(a>=15)

【解】数学关系式10

用C表达式表示这个条件,可写成a>10&&a<15,或!

(a<=10)&&!

(a>=15),或a==11||a==12||a==13||a==14等。

若写成10

所以解答是①。

 15.若有以下定义:

chara;intb;floatc;doubled;则表达式a*b+d-c值的类型为

 ①float ②int ③char ④double

【解】基本类型的数据可以混合运算,但运算时,对要求运算分量类型相同的运算来说,如运算分量的类型不是全相同,则会有自动类型转换发生。

类型自动转换规则规定类型低(简单)的向类型高(复杂)的转换。

各类型由高到低的排列顺序是:

      longdouble、double、float、unsignedlong、long、unsignedint、int。

这样,若有定义:

chara;intb;floatc;doubled;则表达式a*b+d-c的值的类型是double的。

首先计算a*b,得到int类型的值,接着计算a*b+d,得到double类型的值,最后计算a*b+d-c,得到double类型的值。

所以解答是④。

 16.设a,b和c都是int型变量,且a=3,b=4,c=5,则下面的表达式中值为0的是

①’a’&&’b’ ②a<=b ③a||b+c&&b-c ④!

((a

c||1)

【解】对于表达式’a’&&’b’,两个非0运算分量的逻辑与结果为1。

对于表达式a<=b,由于关系式成立,结果也为1。

又由于变量a为非0,表达式a||b+c&&b-c的结果也为1。

对于表达式!

((a

c||1),先是计算(a

c得到结果为0;再计算它们的逻辑与,结果为0。

继续与1求逻辑或,得到结果为1。

最后,对1求逻辑非,得到结果为0。

所以解答是④。

 17.设a=3,b=4,执行“printf(“%d,%d”,(a,b),(b,a));”的输出是

①3,4 ②4,3 ③3,3 ④4,4

【解】在调用格式输出函数的语句中,其中每个格式符对应一个输出项,格式符d要求输出项内容以十进制整数形式输出。

语句中的第一个格式符对应输出项(a,b)是一个逗号表达式,该表达式的值是b的值,所以先输出4。

接着输出字符逗号。

同样输出项(b,a)的值是a的值,输出3。

所以语句执行将输出4,3。

正解的选择是②。

 18.使用“scanf(“x=%f,y=%f”,&x,&y)”,要使x,y均为1.25,正确的输入是

① 1.25,1.25 ②1.25 1.25 ③x=1.25,y=1.25 ④x=1.25 y=1.25

【解】格式输入函数的格式字符串中的字符可以分成三类:

空格类字符、其它普通字符和格式转换说明。

其中空格类字符用来自动跳过空格类字符,直至下一个非空格类字符。

普通字符要求输入字符与其完全相同。

格式转换说明对输入字符列按格式转换说明进行转换,得到内部值存储到对应输入项所指定的存储位置中。

格式输入函数调用scanf(“x=%f,y=%f”,&x,&y)以普通字符x=开头,输入时也要先输入x=。

接着是一个浮点数输入格式,所有能构成一个浮点数1.25的字符序列都能满足要求。

接着是普通字符列“,y=”,在输入的浮点数之后也要有字符列“,y=”。

最后又是浮点数输入格式,同样所有能构成一个浮点数1.25的字符序列都能满足要求。

问题给出的供选择答案中只有x=1.25,y=1.25是正确的输入。

所以选择③。

   通常,格式输入函数调用中,不在格式字符串插入普通字符,要求输入与格式中的普通字符匹配的字符,而是简洁地写上输入格式即可。

 19.设a,b为字符型变量,执行“scanf(“a=%c,b=%c”,&a,&b)”后使a为’A’,b为’B’,从键盘上的正确输入是

 ①‘A’’B’ ②‘A’,’B’ ③A=A,B=B ④a=A,b=B

【解】函数调用scanf(“a=%c,b=%c”,&a,&b)中,普通字符必须按格式字符串要求照原样输入,c格式对紧接的任何字符都输入。

所以实现问题的要求,输入字符列应为“a=A,b=B”。

另外要特别指出,在程序中,为表示字符常量,字符前后需加单引号。

但用字符格式输入字符时,在要输入字符前后不必另键入单引号。

若键入单引号,则这个单引号也将作为字符被输入。

正确的解答是④。

 20.设有inti=010,j=10;则执行“printf(“%d,%d\n”,++i,j--);”的输出是

 ①11,10 ②9,10 ③010,9 ④10,9

【解】变量i和j的初值分别为八进制数010和十进制数10,格式输出函数调用printf(“%d,%d\n”,++i,j--)中,++i的值是变量i增1后的值,原来值是八进制数010,等于十进制数8,输出9。

j--的值是变量j减1之前的值,输出10。

格式字符串中的逗号是普通字符照原样输出。

所以问题给出的格式输出函数调用将输出9,10。

正确的解答是②

 21.假定所有变量均已正确定义,下列程序段运行后x的值是

  a=b=c=0;x=35;

     if(!

a)x--;elseif(b);if(c)x=3;elsex=4;

①34 ②4 ③35 ④3

【解】以变量a,b,c的值均为0,变量x的值为35,语句:

     if(!

a)x--;elseif(b);if(c)x=3;elsex=4;

由两个if语句组成。

首先执行前一个if语句“if(!

a)x--;elseif(b);”,因变量a的值为0,条件!

a成立,执行x--使x的值变为34。

接着执行后继的if语句“if(c)x=3;elsex=4;”,因变量c的值为0,条件不成立而执行x=4,最终使变量x的值为4。

正确解答是②。

注意前一个if语句的else部分的成分语句只有“if(b);”,这是一个单分支if语句,且其成分语句为空语句。

 22.下面的程序段所表示的数学函数关系是

    y=-1;

    if(x!

=0)if(x>0)y=1;elsey=0;

      -1 (x<0)         1 (x<0)          0 (x<0)         -1 (x<0)

①y=0 (x=0)  ②y=-1(x=0)  ③y=-1(x=0) ④y=1(x=0)

      1 (x>0)         0 (x>0)          1(x>0)        0(x>0)

【解】程序段首先置变量y的值为-1,接着按变量x值的不同情况重置变量y的值。

重置的首要条件是x!

=0,若变量x的值为0,则不再重置变量y的值,所以在x值为0情况下,y的值是-1。

在变量x的值不等于0的条下,若x的值大于0,重置变量y的值为1;若变量x的值小于0,重置变量y的值为0。

所以程序段实现当变量x的值为0时,变量y的值为-1;当变量x的值大于0时,置变量y的值为1;当变量x的值小于0时,置变量y的值为0。

正确解答为③。

 23.设inta=8,b=7,c=6,x=1;执行语句

  if(a>6)if(b>7)if(c>8)x=2;elsex=3;

后x的值是

①0   ②1   ③2   ④3

【解】将上述语句写成易读的结构化形式:

  if(a>6)

    if(b>7)

       if(c>8)

          x=2;

       else

          x=3;

该语句的执行过程是,首先判定(a>6),因a的值是8,条件成立;接着判定(b>7),因b的值是7,条件不成立。

在上述语句中,没有对应if(b>7)的else,上述语句就因(b>7)的条件不成立而不执行任何有意义的动作,结束该语句的执行。

这样,变量a、b、c和x的值都不会因执行上述语句而改变,所以变量x的值依旧保持1。

所以解答是②。

 24.执行下列程序段

  x=9;

  while(x>7)

  { printf(“*”);x--;}

后输出的结果是

①****   ②***   ③**   ④*

【解】上述代码以x的初值为9,在x>7成立的情况下循环,每次循环输出一个*字符,并让x的值减1。

共执行2次循环,也就共输出了2个*字符。

所以解答为③。

 25.循环语句“for(x=0,y=0;(y!

=123)||(x<4);x++);”的循环执行

①无限次  ②不确定次 ③4次     ④3次

【解】for循环语句的初始化部分置变量x和y的初值为0,循环条件是(y!

=123)||(x<4),每次循环后变量x的值增1。

由于循环过程中变量y的值未被修改过,循环条件又是一个逻辑或,其左分量(y!

=123)永远成立,也就是循环条件永远成立。

所以该循环语句将循环执行无限次。

正确解答是①。

 26.设x和y为int型变量,则执行下面的循环后,y的值为

for(y=1,x=1;y<=50;y++){

  if(x>=10)break;

  if(x%2==1){x+=5;continue;}

  x-=3;

}

①2 ②4 ③6 ④8

【解】for循环语句的初始化部分置变量x和y的初值为1,循环条件是(y<=50),每次循环后变量y的值增1,控制循环最多执行50次。

循环体有三个语句:

首先在发现变量x的值大于等于10时,结束循环;接着是当变量x除2的余数为1(即变量x是奇数)时,让变量x值增5,让x变成偶数,并直接进入下一轮循环;如变量x是偶数,则从变量x减去3,让变量x变成奇数。

由上述分析知,每两次循环使变量x的值增加2。

第一次循环后,变量x的值变成6。

第二次循环后,变量x的值变成3。

第三次循环后,变量x的值变成8。

第四次循环后,变量x的值变成5。

第五次循环后,变量x的值变成10。

第六次循环时,因变量x的值大于等于10,直接跳出循环,这次循环是非正常结束,对变量y的修正只执行了5次。

所以循环结束后,变量y的值增至6。

正确的解答是③。

 27.在C语言中,下列说法中正确的是

① 编程时尽量不要使用“do语句while(条件)”的循环

②“do语句while(条件)”的循环中必须使用“break”语句退出循环

③“do语句while(条件)”的循环中,当条件非0时将结束循环

④“do语句while(条件)”的循环中,当条件为0时将结束循环

【解】do-while语句的一般形式是:

 do语句

 while(表达式);

其语义是重复执行其成分语句,直至表示条件的表达式值为0时结束。

do-while语句是正常使用的一种循环结构之一。

do-while语句的循环结束条件由while后的表达式值为0所控制,并不一定要有break语句跳出循环来结束循环。

do-while语句在条件值非0时,将继续循环,而不是结束循环。

条件值为0时,才结束循环。

所以正确的选择是④。

 28.若有下列说明,则数值为4的表达式是

inta[12]={1,2,3,4,5,6,7,8,9,10,11,12};

char c=‘a’,d,g;

② a[g-c] ②a[4] ③a[‘d’-‘c’] ④a[‘d’-c]

【解】数组元素的下标自0开始顺序编号,值为4的元素是a[3]。

所以只有下标表达式的值为3才是正确的。

下标表达式g-c中的的变量g和c的值是还未被设定的,其值不确定。

a[4]的值为5,下标为4是不对的。

’d’-‘c’的值为1,a[1]的值是2,所以也是不对的。

变量c的值为’a’,’d’-c=3,所以正确解答是④。

 29.设有定义:

“chars[12]={“string”};”,则printf(“%d\n”,strlen(s));的输出是

①6 ②7 ③11 ④12

【解】在C语言中,字符串是指在有效字符之后有字符串结束标记符的字符列,并约定字符串的长度是指字符串中有效字符个数,不包括字符串的结束标记符。

存于字符数组s中的字符串是”string”,该字符串的长度为6,所以输出该字符串的长度应是6。

正确的解答是①。

 30.下列C代码中,合法的数组定义是

  ①inta[]={“string”};  ②inta[5]={0,1,2,3,4,5};

  ③chara={“string”};    ④chara[]={0,1,2,3,4,5};

【解】①错误的原因是整数数组不可以用字符串对其初始化。

②错误的原因是,数组初始化时,初始化指定的值的个数不能多于数组的元素个数。

③错误的原因是,能用字符串初始化的只有字符指针变量,或字符数组。

字符串不能对其它类型的变量初始化,包括字符变量。

④是正确的,因为字符数组可以用小整数(作为字符的ASCII代码值)对其元素初始化。

 31.字符串”m\x43\\\np\102q”的长度是

①7  ② 9  ③15  ④16

【解】字符串的长度是指字符串中有效字符的个数。

在C程序中,组成字符串的字符可以是一般的普通字符,也可以是转义字符。

其中转义字符又可以用多种不同形式来表达:

反斜杠字符之后接上预先规定的字符,用来表示特殊字符或特定意义的控制字符。

如单引号字符、双引号字符、反斜杠字符等特殊字符,换行、回车、退格等控制字符。

反斜杠字符之后接上1至3位八进制数字符,这是直接用八进制数字表示字符的ASCII代码的方式。

反斜杠字符之后接上字符x,并后接1至2个十六进制数字符,这是直接用十六进制数字表示字符的ASCII代码的方式。

后二种能表示C语言允许的任何字符。

在本小题给出的字符串中,字符’\x43’是用十六进制数表示的一个字符,字符’\\’表示一个反斜杠字符,字符’\n’表示一个换行字符,字符’\102’是用八进制数表示的一个字符。

这样,所给字符串只有7个有效字符。

所以,该字符串的长度是7,解答为①。

 32.设有如下定义,则正确的叙述为

charx[]={“abcdefg”},y[]={‘a’,‘b’,‘c’,‘d’,‘e’,‘f’,‘g’};

 ①数组x和数组y等价             ② 数组x和数组y长度相同

 ③数组x的长度大于数组y的长度   ④ 数组x的长度小于数组y的长度

【解】不指定数组长度的字符数组定义,其所需要的字节数可由初始化中给出的值的个数确定。

字符数组可以用字符串初始化,也可用字符逐个给字符数组的元素初始化。

但尽管用字符初始化时,给出了字符串中的全部字符,但字符串自动会含有字符串的结束标记符,字符串初始化所需要的字节个数会比用同样多的字符初始化多1个字节。

所以只有③才是正确的。

 33.设有定义“inta=3,b,*p=&a;”,则下列语

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

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

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1