高级程序设计课后习题及答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一章 概述
一、单项选择题
1.二进制语言是属于( ) A.面向机器语言 B.面向问题语言 C.面向过程语言 D.面向汇编语言
解:A.人们研制了许许多多计算机程序设计语言,其中二进制语言直接来自计算机的指令系统,与具体计算机紧密相关,所以是一种面向机器语言.面向问题语言是为了易于描述和求解某类特定领域的问题而专门设计的一种非过程语言.面向过程语言是一种能方便描述算法过程的计算机程序设计语言.有汇编语言,但没有面向汇编语言.汇编语言也是一种面向机器的语言,与机器语言比较,汇编语言用有助于记忆的符号来代表二进制代码.
2.将汇编语言编写的程序翻译成目标程序的是( )程序 A.解释 B.编译 C.汇编 D.源
解:C.
3.不属于面向机器语言的是( ) A.符号语言 B.二进制语言 C.汇编语言 D.C语言
解:D.
4.下列语言中不属于面向过程的语言是( ) A.高级语言 B.低级语言 C.C语言 D.ALGOL语言
解:B.C语言和ALGOL等程序设计语言都是高级语言,它们用于描述复杂加工的处理过程,所以也称它们是面向过程语言.低级语言是指机器语言和汇编语言,低级语言是面向机器的语言,而不是面向过程的语言.
5.将高级语言编写的程序翻译成目标程序的是( )程序 A.解释 B.编译 C.汇编 D.源
解:B.
6.不属于高级语言的计算机语言是( )语言 A.BASIC B.C C.ALGOL D.符号
解:D.
二、填空题
1.汇编语言属于面向____语言,高级语言属于面向____语言.
解:汇编语言与具体计算机密切有关,是属于面向机器的语言;而高级语言用来描述求解题的算法,所以是面向过程的语言.所以解答是:机器,过程.
2.用高级语言编写的程序称为____程序,它可以通过____程序翻译一句执行一句的方式执行,也可以通过____程序一次翻译产生____程序,然后执行.
解:用高级语言编写的程序称为源程序,源程序不能在计算机上直接运行,运行源程序有种方式:一种是通过解释程序,对源程序逐句解释执行;另一种是先让编译程序将源程序翻译产生目标程序(目标程序是计算机可直接执行的机器语言程序,它是一种二进制代码程),然后执行目标程序. 所以解答时:源,解释,编译,二进制.
3.从计算机角度出发,程序就是____,程序设计就是____.
解:用某种计算机能理解并执行的计算机语言描写解决问题的方法步骤;分析解决问题的方法步骤,并将其记录下来的过程.
第二章 C语言的基本知识
一、单项选择题
1.属于C语言字符集中可显示字符的是( ) A.\ B.\n C.\t D.\b
解:A
2.不属于C语言字符集中的符号是( ) A.\ B.| C.≤ D.^
解:C
3.下列选项中,不是转义字符的是( ) A.\\ B.\' C.074 D.\0
解:C
4.下列
选项中,正确的转义字符是( ) A.\0F1 B.\" C.\094 D.\0xF1
解:B
5.下列给出的符号串中,不属于C语言保留字的是( ) A.swith B.cher C.case D.else
解:B
6.下列给出的符号串中,属于C语言保留字的是( ) A.if B.iF C.If D.IF
解:A
7.下列给出的符号串中,可作为标识符的是( ) A.? a B.a=2 C.a.3 D.a_3
解:D
8.下列给出的符号串中,不能作为C语言标识符的是( ) A.a_2 B._2a C._a2 D.2_a
解:D
9.下列给出的符号串中,可以作为C语言标识符的是( ) A.static B.do C.register D.GOTO
解:D
10.下列说法中错误的是( ) A.主函数可以分为2个部分:主函数头和主函数体 B.主函数可以调用任何不是主函数的其他函数 C.任何函数可以调用不是主函数的其他函数 D.程序总是从排在程序最前面的某个函数开始执行
解:D 程序总是在主函数中开始执行,并在主函数中结束
二、填空题
1.转义字符是由____符号开始的单个字符或者若干个字符组成的.
解:反斜杠
2.C语言的保留字规定全部由____字母组成,
解:英文小写
3.C语言标识符是由____或____开头的字母、数字、下划线组成的一串符号.ANSIC规定标识符的长度≤____个字符;而PC机上规定前____个字符有效.
解:字母,下划线,32,8
4.C语言词类主要分为____,____,____,____,____和____6类.
解:常量,变量,运算符,函数调用,表达式,保留字
5.C语言的语句主要分为____语句,____语句,____语句,____语句,____语句,____语句,____语句和____语句.
解:数据定义,赋值,函数调用,表达式,流程控制,复合,空,其他
6.在C语言中既是词类,又能单独组成语句的有____和____两类.
解:保留字,标识符
7.C语言的程序是由若干个函数组成的,其中有且仅有一个函数名规定为____的主函数.
解:main
8.C程序的执行总是由____函数开始,并且在____函数中结束. 解:主,主
9.C语言程序的注释可以出现在程序中的任何地方,它总是以____符号作为开始标记,以____符号作为结束标记.
解:/*,*/
10.C语句的最后一定要有一个____号.
解:分
11.使用Turbo C调试C程序的主要操作步骤分为____,____,____,____,____,____.
解:输入新程序或调入已存在的程序,编辑修改源程序,源程序清单存盘,编译连接生成目标程序,执行目标程序,显示运行结果.
第三章 基本数据类型、运算符和表达式
一、单项选择题
1.下列选项中属于C语言字符常量的是( ) A.'abc' B."\n" C.'a' D.'a\0'
解:C 2.下列选项中属于字符串常量的是( ) A.ABC B."ABC" C.'abc' D.'a'
解:B.C程序中,一个字符串常量是表示一个字符序列,书写时,用双引号字符前后括住这个字符序列.所以只有"ABC"是一个正确的字符率常量,其余都不是.其中,ABC可作为标识符,字符列'abc'不
能出现在C程序中,'a'是一个字符常量.
3.在PC机中,'\n'在内存占用的字节数是( ) A.1 B.2 C.3 D.4
解:B.一般来说,一个字符在内存中只占1个字节,'\n'是转义字符,其意义是换行符,它作为一个字符存储,在内存占2个字节.
4.下列字符串常量中,占用内存字节数为2的字符串常量是( ) A."12" B."1" C."1\0" D."\n\n"
解:B
5.字符串"ABC"在内存占用的字节数是( ) A.3 B.4 C.6 D.8
解:B.字符串中的每个字符占1个字节,但C程序在存储字符串时,要在最后一个有效字符后面接上1个字符串结束的标记符'\0'.这样,存储字符串常量"ABC"需要4个字节.
6.在C语言中,合法的长整型常量是( ) A.0L B.4962 C.0.054838743 D.2.1869el0
解:A.为表示不同范围的整数,整型数据分短整型、基本型和长整型,并对三种整型内部表示的最高位的不同理解,又分别分成无符号和带符号两种.若要明确指明一个整数是长整型的,必须在 整数之后接上字符'L'.所以0L是一个长整型的整型常量,而4962是基本整型数据;0.054839743和2.1869el0都是double型的实数.
7.下列符号常量的定义中正确的是( ) A.#define N3 B.define N 3 C.#define N_1 3 D.#define N 1 3
解:C
8.设有宏定义"#define R 2+3",则R*R的宏替换结果正确的是( ) A.(2+3)*(2+3) B.2+3*2+3 C.5*5 D.5.0*5.0
解:B
9.char型数据在内存中存放的是( ) A.ASCII代码值 B.二进制代码值 C.八进制代码值 D.十进制代码值
解:A.计算机存储字符,通常是存储字符的某种代码值.有许多种字符编码的方法,最流行的是ASCII代码.在C语言中,char型数据用ASCII代码表示.
10.下列说法中错误的是( ) A.整形变量可以存放字符常量的值 B.字符型变量可以存放任意整形常量的值 C.变量必须先定义,后使用 D.字符串的长度不等于它占用的字节数
解:B
11.设整型变量i的值为3,则表达式i---i的值为( ) A.0 B.1 C.2 D.3
解:A.有些运算符只有一个字符,也有许多运算符由两个字符组成.特别是有些字符既可是单个字符的运算符,又能组成双字符的运算符.编译系统在识别源程序时,通常是尽量多地读字符,能组成多字符单词的先尽量组成多字符单词.所以表达式i---i,被编译器理解为(i--)-i.另外,当表达式中某变量有后缀自增和自减运算时,先按变量的原值计算表达式,然后再对变量进行自增和自减运算.同样地,当表达式中某变量有前缀自增和自减运算时,先对变量进行自增和自减运算,然后再按变量的新值计算表达式.按这个约定,求表达式(i--)-i是计算i-i的值为0,然后再对i作自减运算,这样,表达式i---i的值为0.
12.设整型变量a,b,c均为2,表达式a+++b+++c++的结果是( ) A.6 B.9 C.8 D.12
解:A.与上一小题解答的理由相同,表达式a+++b+++c++被系统理解成(a++)+(b++)+(c++).
表达式"变量++"的值是变量的原来值,所以在变量a,b,c均为2的前题下,执行上述表达式,得到结果 为6.
13.表达式"10!=9"的值是( ) A.true B.非0值 C.0 D.1
解:D.关系运算的结果只有0和1,若关系成立,则结果为1;若关系不成立,则结果为0.因关系式10!=9成立,所以表达式的结果为1.
14.设a为整型变量,下列C表达式中,不能表达数学关系式:1010&&a<15 D.!(a<=10)&&!(a>=15)
解:A.数学关系式1010&&a<15,或!(a<=10)&&!(a>=15)或a==11||a==12||a===13||a==14,若写成1010的结果0或1,然后以这个结果与15比较,是否小于15.显然这与数学式子的意义是不一致的.
15.设a,b和c都是int型变量,且a=3,b=4,c=5,则下面的表达式中值为0的是( ) A.'a'&&'b' B.a<=b C.a||b+c&&b-c D.!((a解:D.对于表达式'a'&&'b',两个非O运算分量的逻辑与结果为1.对于表达式a<=b,由于关系式成立,结果也为1,又由于变量a为非0,表达式a||b+c&&b-c的结果也为1.对于表达式!((a16.设x为整型变量,和表达式!(!x)的值完全相同的表达式是( ) A.x==0 B.x==1 C.x!=0 D.x!=1
解:C
17.设有代码int a=3;,则执行了语句a+=a-=a*a;后,变量a的值是( ) A.3 B.0 C.9 D.-12
解:D.由于赋值运算符的结合性自右至左,语句a+=a-=a*a,的执行是先计算a*a,得到值9,再计算a-=a*a,使a的值为-6,接着计算,a+=a,使a的值为-12.
18.下列表达式中,正确的C赋值表达式是( ) A.a=7+b+c=a+7 B.c=7+b++=a+7 C.a=(7+b,b++,a+7) D.a=7+b,c=a+7
解:C.赋值运算符是运算符之一,赋值运算也可以出现在一般表达式中.赋值运算时,出现在赋值运算符左边的表达式应该是引用一个存储对象,例如变量.不可以是一个数值计算表达式.如表达式a=7+b+c=a+7因算术运算符比赋值运算符的优先级高要把a+7的结果赋给7+b+c,这是错误的.同样理由,表达式a=7+b++=a+7也是错误的.而表达式a=(7+b,b++,a+7)就是正确的赋值表达式, 它是先计算赋值号左边的括号内的表达式,括号表达式内是一个逗号表达式,远号表达式要求顺序逐一计算各子表达式,并以最后一个子表达式的值作为逗号表达式的结果,最后将该结果赋给变量a.而表达式a=7+b,c=a+7则不是一个赋值表达式,而是一个逗号表达式,它由两个赋值子表达式组成.
19.设变量m,n,a,b,c,d均为0,执行(m=a==b)||(n=c==d)后,m,n的值是( ) A.0,0 B.0,1 C.1,0 D.1,1
解:C.计算(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.
20.设整型变量m,n,a,b,c,d均为1,执行"(m=a>b)&&(n=a>b)"后m,n的值是( ) A.0,0 B.0,1 C.1,0 D.1,l
解:B.表达式(m=a>b)&&(n=a>b)是一个逻辑表达式,它的计算过程是先计算逻辑与的左分量m=a>b,其中又是先计算a>b.因a>b不成立,结果为0,将0赋给变量m,最后逻辑与的左分量结果为0.由于逻辑运算采用特别的优化计算规则,当逻辑与的左分量结果为0时,不再计算逻辑与的右分量,而直接以0为逻辑与的结果.所以,上述表达式计算使m的值变为0,而n的值没有变,依旧为l.
21.若已定义x和y为double类型,则表达式:x=1,y=x+3/2结果是( ) A.1 B.2 C.2.0 D.2.5
解:C.由于变量x和y都是double类型,表达式x=l,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+l的值为2.0,最后将该值赋给变量y,并得到整个表达式的值为2.0.
22.执行语句"x=(a=3,b=a--);"后,x,a,b的值依次为( ) A.3,3,2 B.2,3,2 C.3,2,3 D.2,3,3
解:C.计算表达式x=(a=3,b=a--)时,先计算赋值号右端圆括号内的逗号表达式.逗号表达式要求各子表达式顺序计算,并以最后予表达式的值为整个逗号表达式的结果,所以该表达式计算时,先让变量a的值为3,a--的值是a当时的值,以该值为结果赋给变量b,并以该值为逗号表达式的值赋给变量x,然后a的值被减少1.所以计算该表达式后,使变量x,a,b的值依次为3,2,3.
23.设a为5,执行下列计算后,b的值不为2的是( ) A.b=a/2 B.b=6-(--a) C.b=a%2 D.b=a>3?3:2
解:C.因两个整型数据相除,结果是整数,当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.
24.设a=1,b=2,c=3,d=4则表达式a解:D.条件运算符的优先级比关系运算符的优先级低,并且它的结合性是自右向左的,所以表达式a
:d可用圆括号等价地写成(a='A'&&ch<='Z')?(ch+32):ch的值是( ) A.'A' B.'a' C.'Z' D.'z'
解:B.由于字符型变量ch的值为'A',计算表达式ch=(ch>='A'&&ch<='Z')?(ch+32):ch.先计算其中条件表达式,由于条件(ch>='A'&ch<='Z')成立,该条件表达式以ch+32=97为结果,将该值赋给变量ch,以字符表达这个值为'a'.
26.在C语言中,结果不等于4的表达式是( ) A.sizeof(double) B. sizeof(long) C.sizeof(float) D.sizeof(unsigned long)
解:A
27.用十进制数表示表达式"12|012"的运算结果是( ) A.1 B.0 C.14 D.16
解:C.按位运算将运算分量视作二进位的位运算,对两运算分量的对应位进行运算,产生进位的位串信息结果.整数12最低8位二进位是00001100,整数012是八进制数,它的最低8位二进位是00001010.这两个二进位位串信息按位或运算,得到结果是00001110,对应十进制数14,八进制数是016.
28.设有定义"char a=3,b=6,c;"计算表达式c=(a^b)<<2后c的二进制值是( ) A.00011100 B.00000111 C.00000001 D.00010100
解:D.a的值为3,写成8位二进制数形式是00000011,b的值为6,写成8位二进制数形式是00000110.表达式c=(a^b)<<2,先计算a与b的按位加,得到结果00000101,将这结果向左移2位,得到二进位的位串信息是00010100.
29.设有定义short i=013,j=0x13,k;,计算表达式k=~i|j>>3;后,k的值是( ) A.06 B.0177776 C.066 D.0177766
解:D.将变量i的八进制数值013写成二进制形式为00001011,将变量j的十六进制值0xl3写成二进制数形式为00010011.表达式k=~i|j>>3的计算过程是先求~i,结果用八进制代码表示为0177764,接着计算j>>3,结果为02,对它们进行按位或运算结果为0177766.
30.设整型变量x,y,z均已赋值,下列选项中,正确的赋值表达式是( ) A.<
31.在以下一组运算符中,优先级最高的运算符是( ) A.<= B.= C.% D.&&
解:C.常规运算符的优先级自高到低的排列顺序是算术运算符,移位运算符,关系运算符,按位运算符逻辑运算符,条件运算符,赋值运算符,逗号运算符.所以问题所给的四个运算符按优先级自高到低的排列顺序是%,<=,&&,=.
32.在以下一组运算符中,优先级最高的运算符是( ) A.-- B.== C.|| D.&&
解:A
33.若有以下定义:char a;int b;float c;double d;则表达式a*b+d-c值的类型为( ) A.float B.int C.char D.double
解:D.基本类型的数据可以混合运算,但运算时,对要求运算分量类型相同的运算来说,如运算分量的类型不是全相同则会有自动类型转换发生.类型自动转换规则规定类型低(简单)的向类型高(复杂)的转换.各类型由高到低的排列顺序是:long double,float,unsigned long,long,unsigned int,int.这样,若有定义:char a; int b;float c;double d;则表达式a*b+d-c的值
的类型是double的.首先计算a*b,得到int类型的值,接着计算a*b+d,得到double类型的值,最后计算a*b+d-c,得到double类型的值.
34.关于运算时的数据类型转换,下列说法中错误的是( ) A.表达式计算中,数据要转换成数据长度最长的数据类型再运算 B.赋值时,右边表达式的运算结果转换成左边变量的数据类型再赋值 C.赋值时,左边变量的数据类型转换成右边表达式的运算结果类型再辅助 D.(float)(n+m)是先计算n+m,然后再将结果强行转换成单精度实型
解:C
二、填空题
1.C语言中的常量有4种类型:整型,实型,____型,____型.
解:数值,字符
2.用十进制表示整型常量-017为____,表示整型常量-0xF为____.
解:-15,-14
3.无符号短整型数据的表示范围是____至____.
解:0,65535
4.在内存中存储"A"要占用____个字节,存储字符'A'要占用_____个字节.
解:计算机存储一个字符用1个字节,存储字符串时,每个字符要占用1个字节,另在字符串的有效字符之后存储1个字符串的结束标记符.所以存储"A"要占用2个字节,存储字符'A'只要1个字节. 5.在内存中存放字符串,其最后一个字符为"空字符",对应的转义字符为____,其值为____.
解:\0,0
6.符号常量的定义方法是____.
解:定义符号常量用预处理命令的宏定义,其定义的一般形式是:#define 符号常量 常量
7.设有宏定义#define X 3-2;则2*X的宏替换结果是____.
解:2*3-2
8.定义变量的语句格式是____.
解:数据类型符 变量1,变量2,…;
9.无符号基本整型的数据类型符为____,双精度实型数据类型符为____,字符型数据类型符为____
解:无符号的基本整型的类型符为unsigned int,或简写成unsigned.双精度实型数据类型符为double,字符型数据类型符为char.
10.定义整型有名常量nn的初值为199,正确的定义语句是____.
解:const int nn=199;
11.设x和y均为int型变量,且x=l,y=2,则表达式1.0+x/y的值为____.
解:计算表达式1.0+x/y,先求x/y,因x和y是整型变量,其中的除运算是整除,1/2的结果为0.接着计算1.0+0,计算时,先将右分量转换成0.0,最后得到结果1.0.
12.请写出数学式a/bc的C语言表达式____.
解:数学式子表述的是a除以b乘c的积,写成表达式可以写为x/(y*z),或可等价地写成x/y/z.
13.设a=3,b=2,c=l,则c>b的值为____,a>b>c的值为______.
解:0,0.因a的值为3,b的值是2,条件a>b为真,其值为1.表达式a>b>c的求值顺序是计算a>b,结果为1,接着计算1>c,因c的值为1,条件1>c为假.结果为0.
14.C语言中作为运算对象时的逻辑值真是用____表示的,逻辑值假是用____表示的.逻辑表达式值为真时是用____表示的,逻辑表达式值为假时是用____表示的.
解:在C程序中,判逻辑值时,用非0值表示真,用值0表示假;但逻辑表达式计
算结果,逻辑表达式值为真是用1表示的,而逻辑表达式的值为假,则用0表示.
15.若已知a=10,b=20,则表达式!a解:计算表达式!a16.能表述20
解:x<0||y<0||z<0
18.表达式'a'>'A'>=1<=0==1!=0的值等于____.
解:表达式计算时可按照顺序(((('a'>'A')>=1)<=0)==1)!=0,首先计算'a'>'A'得到1,然后计算1>=1得到1,再计算1<=0得到0,再计算0==1得到0最后计算0!=0得到0,故表达式的值为0.
19.设二进制数A是00101101,若想通过异或运算A^B使A的高4位取反,低4位不变,则二进制数B应是____.
解:按位加运算的一个重要应用是让某个整型变量的二进位位串信息的某些位信息反向,0变成1,而1变成0.这只要设计这样一个位串信息,让要变反的位为1,不要改变的位为0,用这个位串信息与整型变量按位加就能得到希望的结果.要使字节的高4位取反,低4位不变,则需要位串信息是11110000,写成八进制数是0360,写成十六进制数为0xF0.
20.设整型变量x,y,z均为5: A.执行x-=y-x后,x=____; B.执行x%=y+z后,x=____; C.执行x=(y>z)?x+2:x-2,3,2后,x=____.
解:在变量x,y,z的值均为5的情况下,计算各表达式.由于表达式x-=y-z等价于表达式x=x-(y-z),所以计算后x的值为5.表达式x%=y+z等价于表达式x=x%(y+z),所以计算后x的值也为5.表达式x=(y>z)?x+2:x-2,3,2的计算过程用圆括号描述其计算顺序是:x=(y>z)?x+2:x-2,3,2,即这是一个逗号运算表达式,由一个赋值表达式和两个数值构成,逗号表达式要求顺序求各子表达式的值.表达式x=(y>z)?x+2:x-2的计算是先求赋值号右边的条件表达式,因条件(y>z)为假,求出x-2的值为3,将该值赋给变量x,使x的值为3.
21.设有下列运算符<<,+,++,&&,<=,其中优先级最高的是____,优先级最低的是____.
解:对运算符<<,+,++,&&,<=,按它们的优先级自高到低的顺序排列为:++,+,<<,<=,&&,所以优先级最高的是++,优先级最低的是&&.
22.C语言中运算结果可以当成逻辑值使用的表达式有____表达式,____表达式,____表达式,____表达式,____表达式和____表达式.
解:算术,关系,逻辑,赋值,逗号,条件. 在c语言中,逻辑判断以非0值为真,以0值为假.所以,几乎所有的表达式的运算结果都可以当成逻辑值使用,如算术表达式,关系表达式,逻辑表达式,赋值表达式,逗号表达式,条件表达式等.
第四章 顺序结构、选择结构和循环结构的程序设计
一、单项选择题
1.设a=3,b=4,执行"printf("%d,%d",(a,b),(b,a));"的输出是( ) A.
3,4 B.4,3 C.3,3 D.4,4
解:B.在调用格式输出函数的语句中,其中每个格式符对应一个输出项,格式符%d要求输出项内容以十进制整数形式输出.第一个输出项(a,b)是一个逗号表达式,该表达式的值是b的值,输出4.接着输出字符逗号.第二个输出项(b,a)的值是a的值,输出3.所以语句执行将输出4,3.
2.使用语句"scanf("x=%f,y=%f",&x,&y)",要使x,y均为1.25,正确的输入是( ) A.1.25,1.25 B.1.25 1.25 C.x=1.25,y=1.25 D.x=1.25 y=1.25
解:C.格式输入函数的格式字符串中的字符可以分成三类:空格类字符,其它普通字符和格式转换说明.其中空格类字符用来跳过一个空格类字符序列,直至下一个非空格类字符.普通字符要求输入字符与其完全相同.格式转换说明对输入字符列按格式转换说明进行转换,得到内部值存储到对应输入项所指定的存储位置中.函数调用scanf("x=%f,y=%f,&x,&y)以普通字符x=开头,输入时也要先输入x=.接着是一个浮点数输入格式,所有能构成一个浮点数1.25的字符序列都能满足要求.接着是普通字符列",y=",在输入的浮点数之后也要有字符列",y=".最后又是浮点数输入格式,同样所有能构成一个浮点数1.25的字符序列都能满足要求.问题给出的供选择答案中只有x=1.25,y=1.25是能满足上述要求的.
3.设有int i=010,j=10;则执行"printf("%d,%d\n",++i,j--);"的输出是( ) A.ll,10 B.9,10 C.010,9 D.10,9
解:B.变量i和j的初值分别为八进制数010和十进制数10,函数调用printf("%d,%d\n",++i,j--)中,++i的值是变量i增1后的值,原来值是八进制数010,等于十进制数8,输出9.j--的值是变量j减1之前的值,输出10.格式字符申中的逗号是普通字符照原样输出.所以问题给出的格式输出函数调用将输出9,10.
4.设a,b为字符型变量,执行"scanf("a=%c,b=%c",&a,&b);"后使a为'A',b为'B',从键盘上的正确输入是( ) A.'A''B' B.'A','B' C.A=A,B=B D.a=A,b=B
解:D.函数调用scanf("c=%c,b=%c",&c,&b)中,普通字符必须按格式字符串要求照原样输入,c格式对紧接的任何字符都输入.所以实现问题的要求,输入字符列应为"a=A,b=B".另外要特别指出,在程序中,为表示字符常量,字符前后需加单引号.但用字符格式输入字符时,在要输入字符前后不必另键人单引号.若键人单引号,则这个单引号也将作为字符被输入.
5.设x,y,z,t均为int型变量,则执行以下语句后,t的值为( ) x=y=z=1;t=++x||++y&&++z; A.不定值 B.2 C.l D.0
解:C.语句序列"x=y=z=1;t=++x||++y&&++z;"使变量x的值为1,变量t是赋一个逻辑表达式的值.在C语言中,由逻辑与和逻辑或构成的逻辑表达式有特别的计算规则,顺序计算各逻辑子表达式,并当一旦能得到逻辑表达式的结果时,就立即结束逻辑表达式的计算,不再计算后继逻辑子表达式.本题的逻辑表达式是两个运算分量的
逻辑或,而且左运算分量++x的值为非0,立即得到逻辑或运算的结果为1,并将1赋给变量t,所以变量t的值为1.
6.设x,y,z,t均为int型变量,则执行以下语句后,t的值为( ) x=y=z=0; if(x==y) t=z;else t=!z A.不定值 B.2 C.2 D.0
解:D
7.假定所有变量均已正确定义,下列程序段运行后x的值是( ) a=b=c=0;x=35; if(!a) x--;else if(b);if(c) x=3;else x=4; A.34 B.4 C.35 D.3
解:B.以变量a,b,c的值均为0,变量x的值为35,语句:if(!a) x--;else if(b);if(c)x=3;else x=4;由两个语句组成.首先执行前一个if语句"if (!a)x--;else if(b);",因变量a的值为0,条件!a成立,执行x--使x的值变为34.接着执行后继的if语句"if(c)x=3;else x=4;",因变量c的值为0,条件不成立而执行x=4,最终使变量x的值为4.注意前一个if语句的else部分的成分语句只有"if(b);",这是一个单分支if语句,且其成分语句为空语句.
8.下面的程序段所表示的数学函数关系是( ) y=-l; if(x!=0) if (x>0) y=l;else y=0; -1(x<0) 1 (x<0) 0 (x<0) -l(x<0)
A.y={0 (x=0) B.y={-l(x=0) C.y={-1(x=0) D.y={1 (x=0) 1 (x>0) 0 (x>0) 1 (x>0) 0 (x>0)
解:C.程序段首先置变量y的值为-l,接着按变量x值的不同情况重置变量y的值.重置的首要条件是x!=0,若变量x的值为0,则不再重置变量y的值,所以在x值为0情况下,y的值是-l.在变量x的值不等于0的条件下,若x的值大于0,重置变量y的值为1;若变量x的值小于0,重置变量y的值为0.所以程序段实现当变量x的值为0时,变量y的值为-1;当变量x的值大于0时,置变量y的值为1;当变量x的值小于0时,置变量y的值为0.
9.设整型变量m1值为3,m2值为2,m3值为1,执行下列语句后,整型变量m4值是( ) switch (m1=m2==m3+1) {case 1:m4=1;break; case 3:m4=3;break; case 2:m4=2;break; default:m4=4; } A.1 B.2 C.3 D.4
解:A
10.下列语句中,错误的是( ) A.while (x=y) 5; B.do x++ while(x==10); C.while (0); D.do 2;while(a==b);
解:B.while语句的一般形式是:while (表达式) 语句;.这里的表达式可以是任何合理的表达式,语句可以是任何语句,包括空语句,或表达式语句.可能书写的while语句没有任何意义,如供选择的A.While (x=y) 5;和C.while(0);,但这两个语句的句法没有任何错误.do-While语句的一般形式是:do语句 while (表达式);,其中的成分语句也可以是任何语句,但供选择答案B.do