二级C语言笔试-344
(总分:111.00,做题时间:90分钟)
一、选择题(总题数:50,分数:71.00)
1.能正确表示“当x的取值在[1,10]和[100,110]范围内为真,否则为假”的表达式是 ( )
A) (x>=1)&&(x<=10)&&(x>=100)&&(x<=110)
B) (x>=1‖(x<=10)‖(x>=100)‖x<=110)
C) (x>=1)&&(x<=10)‖(x>=100)&&(x<=110)
D) (x>=1)‖x<=10)&&(x>=100)‖x<=110)


(分数:1.00)
 A.
 B.
 C. 
 D.
解析:[解析] 本题考查逻辑与(&&)和逻辑或(‖)运算符的使用。x>=1和x<=10是逻辑与的关系,因此 C语言表达式应写成"(x>=1)&&(x<=10)",x>:100和x<=110也是逻辑-与的关系,因此C语言表达式应写成“(x>=100)&&(x<=110)”;[1'10]和[100,110]是逻辑或的关系,因此只要将前两个表达式用逻辑或运算符连接起来即可,所以最后的表达式:(x>=1)&&(x<=10)‖(x>=100)&&(x<=110)。
2.在“文件包含”预处理语句的使用形式中,当#include后面的文件名用<>(尖括号)括起时,寻被包含文件的方式是( )。
A) 仅仅搜索当前目录
B) 仅仅搜索源程序所在目录
C) 在标准目录下查指定的文件
D) 先在源程序所在目录搜索,如查不到,再按系统指定的标准目录查



(分数:2.00)
 A.
 B.
 C. 
 D.
解析:[解析] 本题考查文件包含的知识点:格式1:#include<文件名>,预处理程序在标准目录下查指定的文件:格式2:#include“文件名”,预处理程序首先在引用被包含文件的源文件所在的目录中寻指定的文件,如查不到,再按系统指定的标准目录查。
3.在长度为64的有序线性表中进行顺序查,最坏情况下需要比较的次数为
A) 63 B) 64 C) 6 D) 7



printf输出格式16(分数:2.00)
 A.
 B. 
 C.
 D.
解析:[解析] 在长度为64的有序线性表中,其中的64个数据元素是按照从大到小或从小到大的顺序有序排列的。在这样的线性表中进行顺序查,最坏的情况就是查的数据元素不在线性表中或位于线性表的最后。按照线性表的顺序查算法,首先用被查的数据和线性表的第一个数据元素进行比较,若相等,则查成功;否则,继续进行比较,即和线性表的第二个数据元素进行比较。同样,若相等,则查成功;否则,继续进行比较。以此类推,直到在线性表中查到该数据或查到线性表的最后一个元素,算法才结束。因此,在长度为64的有序线性表中进行顺序查,最坏的情况下需要比较64次。
4.有以下程序:
main ()
int i, s=0;
for(i=1;i<10;i+=2) s+=i+1;
printf("%d/n", s);

程序执行后的输出结果是( )。
A) 自然数1~9的累加和 B) 自然数1~10的累加和
C) 自然数1~9中奇数之和 D) 自然数1~10中偶数之和


(分数:1.00)
 A.
 B.
 C.
 D. 
解析:[解析] 本题中,i赋初值为1,并对其每次进行加2操作,即i每次均为1~10之间的奇数, s+=i+ l,即s=s+i+1,相当于s等于原来的s每次加上1~10之间的偶数,直到i<10不成立。当i=1时,s=0+1+1+=2;当i=3时,s=2+3+1=2+4;当i=5时,s=2+4+5+1=2+4+6;当i=7时,s=2+4+6+7+1=2+4+6+8:当i=9时,s=2+4+6+8+9+1=2+4+6+8+10; 当i=11时,i<10不成立,结束循环。所以,4个选项中选项 D符合题意。
5.设有如下程序段:
char s[20]="Bejing",*P;
p=s;
则执行p=s;语句后,以下叙述正确的是______。
A) 可以用*P表示s[0] B) s数组中元素的个数和p所指字符串长度相等
C) s和p都是指针变量 D) 数组s中的内容和指针变量p中的内容相等



(分数:2.00)
 A. 
 B.
 C.
 D.
解析:[解析] 在变量的定义中可以看到,p是指向字符的指针,执行p=s;后,指针p的值为数组a的首地址,*p=s[0],因此选项A是正确的;P所指向的字符串为“Beijing”,长度为7,而数组a中元素的个数为20,因此选项B是错误的;s为数组名,也可以看作是数组s的首地址,不是指针变量,因此选项C是错误的;数组s中的内容为字符串,指针变量p中的内容为数组s的首地址,因此选项D是错误的。
6.字符串"///"ABCDEF/"//"的长度是( )。
A) 15 B) 10 C) 7 D) 8


(分数:2.00)
 A.
 B. 
 C.
 D.
解析:[解析] 本题涉及字符串最基本的两个概念:①字符串的长度是指字符串中字符的个数,但不包括字符串结束符;②以反斜杠“/”开头的特殊字符序列,意思是把反斜杠后面的字符序列转换成特定的含义,而不是原来的含义,不包含在字符串长度之内,“/”连同后面的字符为一个长度。
7.以下不合法的字符常量是
A) '/"' B) '/018' C) '/xcc' D) '//'


(分数:1.00)
 A.
 B. 
 C.
 D.
解析:[解析] 在C语言中,用单引号扩起来的一个字符表示字符常量,转义字符由反斜杠“/”+特定字符组成。选项B)表示是八进制数码,出现8属于非法字符,所以正确答案是选项B)。
8.下面程序段的运行结果是
char a[]="lanuage",*p;
p=a;
while(*p!='u')printf("%c",*p-32);p++;
A) LANGUAGE B) language C) LAN D) langUAGE


(分数:2.00)
 A.
 B.
 C. 
 D.
解析:[解析] 本段程序的作用是输出字符串"lanu-age”中字母u之前的字符,并将其转化为大
写字母。
注意:如果一个字符数组用来作为字符串使用,那么在定义该字符数组时,数组的大小就应该比它将要实际存放的最长字符多一个元素,以存放'/0'。
9.经过下面的语句定义后:
int i,a[10],*p;
下列语句中,合法的是______。
A.p=100; B.p=a[5]; C.p=a[2]+2; D.p=a+2;


(分数:2.00)
 A.
 B.
 C.
 D. 
解析:
10.下面程序的输出结果是______。
main()

char str[10],c='a';
int i=0;
for(;i<5;i++)
Str[i]=c++;
printf("%s",str);

A) abcde B) a C) 不确定 D) bcdef


(分数:2.00)
 A.
 B.
 C. 
 D.
解析:[解析] 字符串少一个结束标志,所以输出的结果不确定。
11.若有以下说明和定义
union dt
int a;char b;double c;data;
以下叙述中错误的是
A) data的每个成员起始地址都相同
B) 变量data所占的内存字节数与成员c所占字节数相等
C) 程序段:data.a=5;printf("%f/n",data.c);输出结果为5.000000
D) data可以作为函数的实参



(分数:1.00)
 A.
 B.
 C.
 D. 
解析:[解析] 选项A共用体的每个成员的起始地址都相同;选项B共用体变量所占的内存长度等于最长的成员的长度;选项C因为每个成员的起始地址相同,所以整型数 5以浮点型输出时为5.000000;选项D,C语言规定,不能把共用体变量作为函数的参数。
12.有以下程序
#include <stdio.h>
#define N 5
#define M N+1
#define f(x) (x*M)
main()
int i1,i2;
i1=f(2);
i2=f(1+1);
printf("%d%d/n",i1,i2);

程序的运行结果是
A) 12 12 B) 11 7 C) 11 11 D) 12 7


(分数:2.00)
 A.
 B. 
 C.
 D.
解析:[解析] 根据宏替换的替换规则,我们可知,f(2)=2*N+1=2,5+1=11,f(1+1)=1+1*N+1=1+1*5+ 1=7。
13.以下程序的功能是: 给r输入数据后计算半径r圆面积s。程序在编译时出错。
main ()
/* Beginning */

int r; float s;
scanf ( "%d", &r);
s=*π*r*r;
printf ("s=%f/n", s);
出错的原因是
A) 注释语句书写位置错误 B) 存放圆半径的变量r 不应该定义为整型
C) 输出语句中格式描述符非法 D) 计算圆面积的赋值语句中使用了非法变量


(分数:1.00)
 A.
 B.
 C.
 D. 
解析:[解析] 在C语言源程序中了注释部分、字符串常量部分可以使用任意字符外,其余部分只能由52个大小写:字母、10个阿拉伯数字以及+-*/=,._:;?/"'~|!#%&()[]^<>“空格”30个特殊符号组成。所以在计算圆面积的赋值语句中出现的π是非法字符,将引起编译出错.应
该选择D。
14.请读程序片段(字符串内没有空格字符):
printf("%d/n",strlen("ATS/n012/1//"));上面程序片段的输出结果是_______。
A) 11 B) 10 C) 9 D) 8



(分数:1.00)
 A.
 B.
 C. 
 D.
解析:[解析] 这个语句的目的是输出“ATS/n012/1//”这个串的长度,在串中“//”代表一个“/”,而“/1”代表数字1,也占一个字符,“/n”是回车换行符,也占一个字符,加上A、T、S、0、1、2,共g个字符。
15.有以下程序(说明:字母A的ASCII码值是65)
#include<stdio.h>
void fun(char *s)
while(*s)
if(*s%2) printf ("%c", *s);
s++;


main()
char a[]="BYTE";
fun(a); printf("/n");

程序运行后的输出结果是______。
A) BY B) BT C) YT D) YE


(分数:1.00)
 A.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。