1.能正确表示a和b同时为正或同时为负的逻辑表达式是( D )。
A.(a>=0||b>=0)&&(a<0||b<0) B.(a>=0&&b>=0)&&(a<0&&b<0)
C.(a+b>0)&&(a+b<=0) D.a*b>0
解析:0是非正非负数
2.在C语言中,if语句后的一对圆括号中,用以决定分支流程的表达式( D )。
A.只能用逻辑表达式 B.只能用逻辑表达式或关系表达式
C.只能用关系表达式 D.可用任意表达式
3.有如下程序段
float x=2.0,y;
if(x<0.0) y=0.0;
else if(x<5.0)y=1.0/x;
else y=1.0;
printf("%f\n",y);
该程序段的输出结果是( C )。
A.0.000000 B.0.250000
C.0.500000 D.1.000000
解释:y是float类型,且除数是浮点数形式
4.求解以下值:
(1)0&&1||0 (2)0&&1||1 (3)1&&0||0&&1||1 (4)1||1&&0
解释(1):等价于((0&&1)||0)》0||0》0
解释(2):等价于((0&&1)||1)》0||1》1
解释(3):等价于((((1&&0)||0)&&1)||1)》(((0||0)&&1)||1)》((0&&1)||1)》(0||1)》1
解释(4):等价于(1||(1&&0))》(1||0)》1
总结:&&优先级大于||;&&于||结合性为做到右
5.若int k, m = 1; 则 k = -m–;语句后,k的值为多少?
解析:优先级相同时,由结合性判断。负号与自减优先级相同,且它们的结合性为右到左,因此k = -m-- 等价于k = -(m–),由于自减在变量右侧,因此得到 k = -m = -1
6.以下数值中,不正确的八进制数或十六进制数是©.
A:0x16
B:16
C:-16
D:0xaaaa
解析:八进制和十六进制数前面是不可带负号
7 14159 中,用宏名 PI 代替一个字符串
解析:对宏的具体定义是: #define 标识符 字符串
宏替换只是字符替换。
8.以下程序输出结果是?
#include <stdio.h>
main()
{
char c[2][5]={"6934","8254"},*p[2];
int i,j,s=0;
for(i=0;i<2;i++)
p[i]=c[i];
for(i=0;i<2;i++)
for(j=0;p[i][j]>0&&p[i]j]<=9;j+=2)
s=s*10+p[i][j]-‘0’;
printf("%d\n",s);
}
本题的意图在于将c中两个字符串的偶数位置的数字组成一个新数,找到的四个数字分别是6,3,8,5,所以输出的结果就是6385,需注意程序中的p[i][j]-‘0’,这个在c语言中的作用是把char型数字转化为int型。所以可以直接用6,3,8,5运算,若将p[i][j]-'0’去掉,其输出的结果就是ASC码值。
9.以下程序段中的变量已正确定义
for(i=0;i<4;i++,i++)
for(k=1;k<3;k++);printf(“*”);
程序段的输出结果是()
A********B****
C**D*
解析:注意第二个for后执行语句为空,故答案为D。
10.若变量已正确定义,有以下程序段
Int a=3,b=5,c=7;
If(a>b)a=b;c=a;
If(c!=a)c=b;
printf(“%d,%d,%d\n”,a,b,c);
其输出结果是()
A程序语段有语法错误B3,5,3
C3,5,5D3,5,7
解析:注意第一个If语句之后的分号,c=a是不属于If语句的,故答案为B。
11.有如下程序段
#include<stdio.h>
#define PT5.5
#define S(x)PTxx
main()
{int a=1,b=2;
printf(“%4.1f\n”,S(a+b));
}
该程序的输出结果是()
A49.9B9.5C22.0D45.0
解析:函数调用时是先求出实参表达式的值,然后代入形参,但是使用带参数的宏只是进行简单的字符替换,故答案为B
12.下列符号中,不属于转义字符的是()
①\ ②\x00 ③\ ④\09
【分析】只要是以“\”开头的、后跟指定单个字符的都是“转义字符”。
13.下列符号串中,属于C语言合法标识符的是()
①else ②a-2 ③_00 ④00
【分析】标识符必须是“字母”或者“下划线”开头的,由字母、数字、下划线组成的一串符号,并且不能是保留字。
【答案】③
14.下列说法中,正确的是()
①主函数名是由程序设计人员按照“标识符”的规则选取的
②分号和回车符号都可以作为一个语句的结束符号
③在程序清单的任何地方都可以插入一个或多个空格符号
④程序的执行,总是从源程序清单的第1行开始
【分析】主函数名规定为“main”,不是程序设计人员自由选取的;分号是表示语句结束的唯一符号;程序的执行总是由主函数的第1条语句开始执行的。
【答案】③
15.下面程序的输出是_________。
main()
{ int k=11;
printf(”k=%d,k=%o,k=%x\n”,k,k,k);
}
A)k=l1,k=12,k=l1 B)k=ll,k=13,k=13
C)k=l1,k=013,k=0xb D)k=l1,k=13,k=B
答案:D
评析:在C语言格式字符的输出中,“%d”是以带符号的十进制形式输出整数;“%0”是以8进制无符号形式输出整数(不输出前导符O);“O/ox”是以16进制无符号形式输出整数(不输出前导符0x)。
16.下面程序段中c的二进制值是__________。
char a=3,b=6,c;
c=a^b<<1:
A)00001011 B)00001111 C)00011110 D)00011100
答案:B
评析:c语言提供六种位运算符,按优先级由高到低的顺序分别为:取反(~)、左移((>)、按位与(&)、按位异或(八)、按位或(I)。所以表达式c=aAb<<l先运算b<<l得二进制值为00001 100,再运算aA00001 100,最后得二进制值00001ll1。B
17.以下叙述中正确的是__________。
A)C语言比其他语言高级
B)C语言可以不用编译就能被计算机识别执行
C)C语言以接近英语国家的自然语言和数学语言作为语言的表达形式
D)C语言出现的最晚,具有其他语言的一切优点
答案:C
评析:计算机语言分为低级语言、汇编语言和高级语言,c语言属于高级语言,但并不是说c语言比其他语言高级,所以选项A错误;除了低级语言外,其他各种语言都必须编译成能被计算机识别的二进制数才能执行,选项B错误;C语言出现从1972年到1973年间,并不是出现最晚的语言,所以选项D也是错误的。
18.列可用于C语言用户标识符的一组是__________。
A)void define WORD B)a3_b3 _123 Car
C)For -abc IFCase D)2aDO sizeof
答案:B
评析:c语言规定标识符只能由字母、数字和下划线3种字符组成,且第一个字符必须为字母或下划线,所以排除c和D。c语言还规定标识符不能为c语言的关键字,从而选项A(void是关键字)是错误的。
19.fgetc函数的作用是从指定文件读入一个字符,该文件的打开方式必须是________。
A)只读 B)追加 C)读或读写 D)以上均正确
答案:D
评析:fgetc函数是指从指定的文件读入一个字符,该文件必须是以读或读写方式打开的。电etc”函数的调用形式为:ch=fgetc(fp);。
20.请选出正确的程序段_________。
A)intp B)ints,k;
Scanf(“”%d””,p); *s=100;
…… ……
C)ints,k; D)ints,k;
Char *p,c; char *p,e;
s=&k: s=&k
p=&c; p=&c;
*p=’a’; s=p;
…… *s=l;
……
答案:C
评析:本题的A和B犯了一个同样的错误,即指针变量p定义后并没有指向具体的变量,因此不能进行赋值操作。另外,在选项D中,s是int指针变量,p是char型指针变量,所指向的内存单元所占用的字节数是不同的,因而不能将字符指针变量p的值赋给整型指针变量s。
21.下面程序的输出是_________。
main()
{ int x=3,y=6,a=0;
while(x++!=(y-=1))
{ a+=1;
if(y<x)break;
}
primf(”x=%d,y=%d,a=%d\n”,x,y,a);
}
A)x=4,y=4,a=1 B)X=5,y=5,a=1
C)x=5,y=4,a=3 D)x=5,y=4,a=l
答案:D
评析:注意的是x++中x值的引用时,这里应当是先引用,后自加,具体执行过程如下:
第一次while循环:条件为真,执行a=a+l=l;此时,x的值已为4,判断y<x不成立,继续执行循环;
第二次while循环:条件为假,此时x的值已为5,退出while循环,执行printf。
22.若有程序:
fun(int a,int b)
{
static int c=O:
c+:a+b:
return C;
}
main()
{
int x=5,y=3,z=7,r;
r=fun((y,x+y),z);
r=fun(x,y);
printf(”%d\n”,r);
}
上面程序的输出结果是__________。
A)23 B)15 C)19 D)18
答案:A
评析:stoic声明的外部变量只限于被本文件引用,而不能被其他文件引用。用static来声明一个变量的作用有:①对局部变量用static声明,则为该变量分配的空间在整个程序执行期间始终存在;②全部变量用static声明,则该变量的作用域只限于本文件模块(即被声明的文件中)。调用第一个fun,其两个实参的值为(3,5+3)与7即8与7,在函数fun执行结束返回15。第二次调用fun时,由于stat~为静态类型,其值保留,执行fun(5,3)后,其返回值为23,故选A。
23.面程序的输出是________。
main()
{char*s=”12134211”;
int vl=0,v2=0,v3=0,v4=0,k;
for(k=0;s[k];k++)
switch(s[k])
{ default:v4++;
case’l’:vl++;
case’3′:v3++;
case’2′:v2++;
}
printf(”v1=%d,v2=%d,v3=%d,v4=%d\n”,v1,v2,v3,v4);
}
A)vl=4,v2=2,v3=l,v4=l B)vl=4,v2=9,v3=3,v4=l
C)vl=5,v2=8,v3=6,v4=l D)vl=8,v2=8,v3=8,v4=8
答案:C
评析:当switch后面括弧内的表达式的值与某一个case后面的常量的表达式的值相等时,就执行此caSe后面的语句,若所有的case中的常量表达式的值都没有与表达式的值匹配的,就执行default后面的语句。
24.下面程序
main()
{
int x=32:
printf(”%d\n”,x=x<<1);
}
的输出是________。
A)100 B)160 C)120 D)64
答案:D
评析:<<是c语言中规定的左移运算符,例如,a=a<<2,这个语句即是将a的二进制数左移两位,左移一位相当于该数乘于2,左移两位相当于该数乘以2的2次方。所以,x<<1=32.2=64。
25.下面程序
main()
{ int x=100,a=10,b=20,okl=5,ok2=0;
if(a<b)
if(b!=15)
if(10k1) x=l;
else i“oL2)x。10;
X=-1;
Printf(%d\n”,x);
}
的输出是________。
A)-1 B)0 C)1 D)不确定的值
答案:A
评析:第一个判断值为真,过渡到下一个判断,第二个判断为真,过渡到第三个判断……如此循环,在打印输出语句的前一行,程序给变量x赋了值,为.1,所以,无论前期如何变化,最后的x值依然为-1。
26.以下对枚举类型名的定义中正确的是________。
A)enum a={one,two,three}; B)enum a{one=9,two=-1,three};
C)enum a={“one”,”two”,”three”}; D)enum a{“one”,”two”,”three”};
答案:B
评析:声明枚举类型用enum开头。例如:enum weekday(sun,mon,tue,wed,thu,fri,sat);
说明:1、在c编译中,对枚举元素按常量处理,同时可以改变他们的值。2、枚举值可以用来做判断比较。3、一个整数不能直接赋给一个枚举变量。