1、国家二级 C语言(C 语言基础知识)机试-试卷 1及答案解析(总分:60.00,做题时间:90 分钟)一、选择题(总题数:30,分数:60.00)1.计算机高级语言程序的运行方法有编译执行和解释执行两种,以下叙述中正确的是(分数:2.00)A.C语言程序仅可以编译执行B.C语言程序仅可以解释执行C.C语言程序既可以编译执行又可以解释执行D.以上说法都不对2.以下选项中关于程序模块化的叙述错误的是(分数:2.00)A.把程序分成若干相对独立、功能单一的模块,可便于重复使用这些模块B.可采用自底向上、逐步细化的设计方法把若干独立模块组装成所要求的程序C.把程序分成若干相对独立的模块,可便于编码和调
2、试D.可采用自顶向下、逐步细化的设计方法把若干独立模块组装成所要求的程序3.以下叙述中正确的是(分数:2.00)A.在 C语言程序设计中,所有函数必须保存在一个源文件中B.在算法设计时,可以把复杂任务分解成一些简单的子任务C.只要包含了三种基本结构的算法就是结构化程序D.结构化程序必须包含所有的三种基本结构,缺一不可4.以下叙述中正确的是(分数:2.00)A.可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行B.C语言程序将从源程序中第一个函数开始执行C.main的各种大小写拼写形式都可以作为主函数名,如:MAIN,Main 等D.C语言规定必须用 main作为主函数名,程序将从
3、此开始执行5.以下叙述中正确的是(分数:2.00)A.程序的主函数名除 main外,也可以使用 Main或 mainB.在 C程序中,模块化主要是通过函数来实现的C.程序可以包含多个主函数,但总是从第一个主函数处开始执行D.书写源程序时,必须注意缩进格式,否则程序会有编译错误6.以下叙述中正确的是(分数:2.00)A.C程序中的每一行只能写一条语句B.简单 C语句必须以分号结束C.C语言程序中的注释必须与语句写在同一行D.C语句必须在一行内写完7.以下选项中不属于 C语言程序运算符的是(分数:2.00)A.sizeofB.()C.D.&8.以下不能定义为用户标识符是(分数:2.00)A.Mai
4、nB._0C._intD.sizeof9.关于 C语言中数的表示,以下叙述正确的是(分数:2.00)A.只要允许范围内整型数和实型数都能精确的表示B.只有整型数在允许范围内能精确无误的表示,实型数会有误差C.只有实型数在允许范围内能精确无误的表示,整型数会有误差D.只有用八进制表示的数才不会有误差10.按照 C语言规定的用户标识符命名规则,不能出现在标识符中的是(分数:2.00)A.连接符B.大写字母C.数字字符D.下划线11.以下关于 C语言数据类型使用的叙述中错误的是(分数:2.00)A.若要保存带有多位小数的数据,可使用双精度类型B.若要处理如“人员信息、”等含有不同类型的相关数据,应自
5、定义结构体类型C.若只处理“真”和“假”两种逻辑值,应使用逻辑类型D.整数类型表示的自然数是准确无误差的12.关于 C语言的变量,以下叙述中错误的是(分数:2.00)A.所谓变量是指在程序运行过程中其值可以被改变的量B.变量所占的存储单元地址可以随时改变C.程序中用到的所有变量都必须先定义后才能使用D.由三条下划线构成的符号名是合法的变量名13.以下叙述中错误的是(分数:2.00)A.常量可以用一个符号名来代表B.数值型常量有正值和负值的区分C.常量是在程序运行过程中值不能被改变的量D.定义符号常量必须用类型名来设定常量的类型14.以下选项中合法的常量是(分数:2.00)A.27eB.9 9
6、9C.123E02D.0Xab15.若有以下程序段 double x=516894;printf(“fn“,(int)(x*1000+05)(double)1000):则程序段的输出结果是(分数:2.00)A.5175000B.5169000C.5170000D.516800016.以下选项中,值为 1的表达式是(分数:2.00)A.1 -0B.1-0C.1-0D.0-017.设变量已正确定义,以下不能统计出一行中输入字符个数(不包含回车符)0 的程序段是(分数:2.00)A.n=0;while(ch=getchar()!=n)n+;B.n=0;while(getchar()1=n)n+;C.
7、for(n=0;getchar()i=n;n+);D.n=0;for(ch=getchar0;ch!=ha;n+);18.以下不能输出字符 A的语句是(注:字符 A的 ASCII码值为 65,字符 a的 ASCII码值为 97)(分数:2.00)A.printf(“cn“,a-32);B.printf(“dn“,A);C.printf(“cn“,65);D.printf(“cn“,B-1);19.以下选项中非法的 C语言字符常量是(分数:2.00)A.bB.007C.aaD.xaa20.以下叙述中正确的是(分数:2.00)A.字符常量在内存中占 2个字节B.转义字符要用双引号括起来,以便与普通
8、的字符常量区分开C.字符常量需要用单引号括起来D.字符常量是不能进行关系运算的21.有以下程序,程序运行后的输出结果是 main()char a=H;a=(a=A&a=Z)?(a+321):a;printf(“cn“,a);(分数:2.00)A.HB.AC.hD.a22.表达式:(int)(double)92)-92 的值是(分数:2.00)A.0B.4C.3D.523.不能正确表示数学式的 (分数:2.00)A.a*bcB.ac*bC.ab*cD.a*(bc)24.若有定义:double a=22;int i=0,k=18;则不符合 C语言规定的赋值语句是(分数:2.00)A.i=(a+k)
9、=(i+k);B.a:a+,i+;C.i=a11;D.i=!a;25.若有定义语句:int a=3,b=2,c=1;以下选项中错误的赋值表达式是(分数:2.00)A.a=b=c+1;B.a=(b=4)=3;C.a=(b=4)+c;D.a=1+(b=c=4);26.若有定义和语句:int a,b;scanf(“d,d,“,&a,&b):以下选项中的输入数据,不能把值 3赋给变量 a、5 赋给变量 b的是(分数:2.00)A.3,5B.3,5,C.3,5D.3,5,427.若变量 x、y 己正确定义并贼值,以下符合 C语言语法的表达式是(分数:2.00)A.+x,y=x-B.x+1=yC.x=x+
10、10=x+yD.double(x)1028.若有定义“int x,y;”并已正确给变量赋值,则以下选项中与表达式“(x-y)?(x+):(y+)”中的条件表达式(x-y)等价的是(分数:2.00)A.(x-y0)B.(x-y0)C.(x-y0|x-y0)D.(x-y=0)29.若 a是数值类型,则逻辑表达式(a=1)|(a!=1)的值是(分数:2.00)A.0B.2C.1D.不知道 a的值,不能确定30.与数学表达式 xyz 对应的 C语言表达式是(分数:2.00)A.(x=y=z)B.(x=y)&(y=z)C.(x=y)!(y=z)D.(x=y)|(y=x)国家二级 C语言(C 语言基础知识
11、)机试-试卷 1答案解析(总分:60.00,做题时间:90 分钟)一、选择题(总题数:30,分数:60.00)1.计算机高级语言程序的运行方法有编译执行和解释执行两种,以下叙述中正确的是(分数:2.00)A.C语言程序仅可以编译执行 B.C语言程序仅可以解释执行C.C语言程序既可以编译执行又可以解释执行D.以上说法都不对解析:解析:C 语言是编译型语言,只在编译链接后才能执行。2.以下选项中关于程序模块化的叙述错误的是(分数:2.00)A.把程序分成若干相对独立、功能单一的模块,可便于重复使用这些模块B.可采用自底向上、逐步细化的设计方法把若干独立模块组装成所要求的程序 C.把程序分成若干相对
12、独立的模块,可便于编码和调试D.可采用自顶向下、逐步细化的设计方法把若干独立模块组装成所要求的程序解析:解析:如果应用结构化程序设计方法设计程序,那么可采用自顶向下,逐步细化的设计方法把若干独立模块组装成所要求的程序,3.以下叙述中正确的是(分数:2.00)A.在 C语言程序设计中,所有函数必须保存在一个源文件中B.在算法设计时,可以把复杂任务分解成一些简单的子任务 C.只要包含了三种基本结构的算法就是结构化程序D.结构化程序必须包含所有的三种基本结构,缺一不可解析:解析:模块化设计思想,就是把复杂的任务分成简单的子任务,用函数或者过程描述子任务,C 语言中一个程序可以包括多个源文件,每个源文
13、件可以有若干个函数,结构化的程序由顺序结构、循环结构和选择结构三种基本结构组成,不一定全要包括这三种结构,而算法不等于程序。4.以下叙述中正确的是(分数:2.00)A.可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行B.C语言程序将从源程序中第一个函数开始执行C.main的各种大小写拼写形式都可以作为主函数名,如:MAIN,Main 等D.C语言规定必须用 main作为主函数名,程序将从此开始执行 解析:解析:C 语言规定必须以 main作为主函数名。程序中的 main()是主函数的起始行,也是 C程序执行的起始行。每一个可执行的 C程序都必须有一个且只能有一个主函数。一个 C
14、程序中可以包含任意多个不同的函数,但只能有一个主函数。程序要从 main()函数开始执行,最后在 main()函数中结束。5.以下叙述中正确的是(分数:2.00)A.程序的主函数名除 main外,也可以使用 Main或 mainB.在 C程序中,模块化主要是通过函数来实现的 C.程序可以包含多个主函数,但总是从第一个主函数处开始执行D.书写源程序时,必须注意缩进格式,否则程序会有编译错误解析:解析:C 语言中任何一个有效的程序都有且只能有一个 main()函数,不能写成其他形式,一个 C程序总是从主函数开始执行,到 main函数体执行完后结束,而不论 main函数在整个程序中的位置如何。而为了
15、代码清晰容易看懂,最好加上注释,这是程序书写风格,与编译无关。6.以下叙述中正确的是(分数:2.00)A.C程序中的每一行只能写一条语句B.简单 C语句必须以分号结束 C.C语言程序中的注释必须与语句写在同一行D.C语句必须在一行内写完解析:解析:C 语言的书写格式自由,一行可写多条语句,一条语句也可写在不同行上。C 语言注释是比较自由的,可以写在一行或者多行。C 语言规定每条语句和数据定义的最后必须有一个分号,分号是 c语句的必要组成部分。7.以下选项中不属于 C语言程序运算符的是(分数:2.00)A.sizeofB.()C. D.&解析:解析:sizeof 为测试内存的运算符,()为算*运
16、算符,&为逻辑运算符。而不是 C语言的运算符,C 语言中!=表示不等于。8.以下不能定义为用户标识符是(分数:2.00)A.MainB._0C._intD.sizeof 解析:解析:本题考查用户标识符。C 语言中用户标识符只能由字母和数字组成,且必须以字母开头,不能和 C语言的关键字相同。选项 A)、B)和 C)都符合要求,选项 D)中的 sizeof是 C语言关键字,不能作为用户标识符。9.关于 C语言中数的表示,以下叙述正确的是(分数:2.00)A.只要允许范围内整型数和实型数都能精确的表示B.只有整型数在允许范围内能精确无误的表示,实型数会有误差C.只有实型数在允许范围内能精确无误的表示
17、,整型数会有误差 D.只有用八进制表示的数才不会有误差解析:解析:本题考查 C语言基本数据类型,整型数是有范围的,只在允许的范围内才能精确无误的表示,实型数由于存储长度限制存在误差。10.按照 C语言规定的用户标识符命名规则,不能出现在标识符中的是(分数:2.00)A.连接符 B.大写字母C.数字字符D.下划线解析:解析:在 C语言中,合法标识符的命令规则是:标识符可以由字母、数字或下划线组成,并且第一个字符必须为字母或下划线。在 C语言的标识符中,大写字母和小写字母被认为是两个不同的字符。选项A)是连字符,不在 C语言规定的命名变量标识符的范围内。11.以下关于 C语言数据类型使用的叙述中错
18、误的是(分数:2.00)A.若要保存带有多位小数的数据,可使用双精度类型B.若要处理如“人员信息、”等含有不同类型的相关数据,应自定义结构体类型C.若只处理“真”和“假”两种逻辑值,应使用逻辑类型 D.整数类型表示的自然数是准确无误差的解析:解析:在 C语言中没有定义逻辑类型,而是用 0代表假,用非零代表真。12.关于 C语言的变量,以下叙述中错误的是(分数:2.00)A.所谓变量是指在程序运行过程中其值可以被改变的量B.变量所占的存储单元地址可以随时改变 C.程序中用到的所有变量都必须先定义后才能使用D.由三条下划线构成的符号名是合法的变量名解析:解析:变量是指在程序运行过程中其值可以改变的
19、值,一个变量实质上是代表了内存中的某个存储单元。在程序中对某个变量的操作实际上就是对这个存储单元的操作,程序运行期间,这个分配的存储单元不会改变,但是其值可以变化。变量命名要符合标示符的规定,其中下划线是标识的组成字符。程序中所有变量都必须先定义后使用。13.以下叙述中错误的是(分数:2.00)A.常量可以用一个符号名来代表B.数值型常量有正值和负值的区分C.常量是在程序运行过程中值不能被改变的量D.定义符号常量必须用类型名来设定常量的类型 解析:解析:C 语言中,常常用一个标识符来代表一个常量。称为符号常量。符号常量在使用之前要先定义,定义格式:#define符号常量名(常量)其中,符号常量
20、名)用标识符,习惯上用大写字母常量可以是数字常量,也可以是字符。14.以下选项中合法的常量是(分数:2.00)A.27eB.9 9 9C.123E02D.0Xab 解析:解析:0xab 是十六进制表示的常量。15.若有以下程序段 double x=516894;printf(“fn“,(int)(x*1000+05)(double)1000):则程序段的输出结果是(分数:2.00)A.5175000B.5169000 C.5170000D.5168000解析:解析:(int)(x*1000+05)(double)1000 表达式功能,保存数据 x的后三位小数,把第四位四舍五入。16.以下选项中
21、,值为 1的表达式是(分数:2.00)A.1 -0B.1-0C.1-0 D.0-0解析:解析:在 C程序中,字符量可参与任何整数运算。字符参与运算时,首先要将字符转换为其对应的ASCII码值再参与整数运算。字符“1”对应的 ASCII码值是 49,字符0对应的 ASCII码值是 48,字符“0”是字符串结束标识符 NuLL,其对应的 ASCII码值是 0。17.设变量已正确定义,以下不能统计出一行中输入字符个数(不包含回车符)0 的程序段是(分数:2.00)A.n=0;while(ch=getchar()!=n)n+;B.n=0;while(getchar()1=n)n+;C.for(n=0;
22、getchar()i=n;n+);D.n=0;for(ch=getchar0;ch!=ha;n+); 解析:解析:本题主要考查循环的使用。选项 A)中,首先把输入的字符放到 ch变量中,然后判断 ch是否为回车符,如果不是则 n增加,循环结束条件是输入的是回车符;选项 B)中,直接判断 getchar函数的返回值是否是回车符,如果不是则 n增加,输入回车符循环结束:选项 C)使用 for循环,n 的初值为0,每次循环 n增加 1,循环的结束条件是输入回车符;选项 D)中 for循环的初始条件 ch值为输入的字符,只有一次输入,不能统计输入的字符数。如果第一次输入的不是回车符循环不能结束。18.
23、以下不能输出字符 A的语句是(注:字符 A的 ASCII码值为 65,字符 a的 ASCII码值为 97)(分数:2.00)A.printf(“cn“,a-32);B.printf(“dn“,A); C.printf(“cn“,65);D.printf(“cn“,B-1);解析:解析:在选项 B)的输出函数中,大写字符A以整型数据的形式输出。19.以下选项中非法的 C语言字符常量是(分数:2.00)A.bB.007C.aa D.xaa解析:解析:一个宁符常量代表 ASCII字符集中的一个字符,在程序中用单引号把一个字符括起来作为字符常量。20.以下叙述中正确的是(分数:2.00)A.字符常量在
24、内存中占 2个字节B.转义字符要用双引号括起来,以便与普通的字符常量区分开C.字符常量需要用单引号括起来 D.字符常量是不能进行关系运算的解析:解析:在程序中用单引号把一个字符括起来作为字符常量。转义字符又称反斜线字符,这些字符常量总是以一个反斜线开头后跟一个特定的字符,用来代表某一个特定的 AscIl字符,这些字符常量也必须括在一对单引号内,和整型常量一样,字符常量也可以进行关系运算的。21.有以下程序,程序运行后的输出结果是 main()char a=H;a=(a=A&a=Z)?(a+321):a;printf(“cn“,a);(分数:2.00)A.HB.AC.h D.a解析:解析:表达式
25、 a=(a=A&aZ)?(a+32):a,为条件表达式,如果 a是大写字符,则转换为小写字符存放到 a中,否则不变。22.表达式:(int)(double)92)-92 的值是(分数:2.00)A.0B.4C.3 D.5解析:解析:这个表达式的计算过程为,首先求出 9除以 2的商等于 4,再把其强制转化为实型数据为40,然后再强制转 4,减去 9对 2求余数 1,得到其结果等于 3。23.不能正确表示数学式的 (分数:2.00)A.a*bcB.ac*bC.ab*c D.a*(bc)解析:解析:表达式的含义为 a乘以 b除以 c,选项 C)正好曲解了这一个含义。24.若有定义:double a=
26、22;int i=0,k=18;则不符合 C语言规定的赋值语句是(分数:2.00)A.i=(a+k)=(i+k);B.a:a+,i+;C.i=a11; D.i=!a;解析:解析:在 C语言中,求余运算符的运算对象只能是整型,在题目中,变量 a是一个双精型实型变量。25.若有定义语句:int a=3,b=2,c=1;以下选项中错误的赋值表达式是(分数:2.00)A.a=b=c+1;B.a=(b=4)=3; C.a=(b=4)+c;D.a=1+(b=c=4);解析:解析:本题主要考查赋值表达式,对于赋值表达式来说,赋值号“=”的左边一定为变量名,右边为一个 C语言合法的表达式。26.若有定义和语句
27、:int a,b;scanf(“d,d,“,&a,&b):以下选项中的输入数据,不能把值 3赋给变量 a、5 赋给变量 b的是(分数:2.00)A.3,5B.3,5,C.3,5 D.3,5,4解析:解析:在格式控制字符串中插入其他字符。则在输入的时候应该据实加入到输入流中,不能随意加入空格等。否则无法得到正确的输入结果。27.若变量 x、y 己正确定义并贼值,以下符合 C语言语法的表达式是(分数:2.00)A.+x,y=x- B.x+1=yC.x=x+10=x+yD.double(x)10解析:解析:用逗号将表达式连接起来的式子称为逗号表达式。其表达式的一般形式为:表达式 1,表达式 2,表达
28、式 n。最后一个表达式的值就是此逗号表达式的值。所以选项 A)为 C语言中的逗号表达式。赋值表达式的左侧只能是变量,不能是常量或表达式。强制类型转换表达式的形式为:(类型名)(表达式),其中(类型名)称为强制类型转换运算符,数据类型两边的圆括号不能省略。28.若有定义“int x,y;”并已正确给变量赋值,则以下选项中与表达式“(x-y)?(x+):(y+)”中的条件表达式(x-y)等价的是(分数:2.00)A.(x-y0)B.(x-y0)C.(x-y0|x-y0)D.(x-y=0) 解析:解析:条传表达式的形式如下:表达式 1?表达式 2:表达式 3。其含义为当“表达式 1”的值为非零时,求
29、出“表达式 2”的值,此时“表达式 2”的值就是整个条件表达式的值;当“表达式 1”的值为零时,则求“表达式 3”的值,这时“表达式 3”的值就是整个表达式的值。本题条件表达式的执行顺序是先求解表达式“x-y”的值,若其值为非 0(可以是正数,也可以是负数),则再求表达式“x+”的值,其值就是条件表达式的值:若表达式“x-y”的值为 0,则再求表达式“y+”的值,其值就是条件表达式的值。29.若 a是数值类型,则逻辑表达式(a=1)|(a!=1)的值是(分数:2.00)A.0B.2C.1 D.不知道 a的值,不能确定解析:解析:在逻辑表达式中,a|b,只有在 a跟 b都为 0时,表达式的结果才为 0。在题中所给的表达式中 a要么等于 1,要么不等于 1,肯定会有一方的值不为真,表达式值为 1。30.与数学表达式 xyz 对应的 C语言表达式是(分数:2.00)A.(x=y=z)B.(x=y)&(y=z) C.(x=y)!(y=z)D.(x=y)|(y=x)解析:解析:若要表示 x大于等于 y,同时 y大于等于 z,需要用逻辑与表达式连接。