http://blog.csdn.net/tanqiuwei/article/details/7409241
C语言基础
选择题:
1、下列选项中,合法的C语言关键字是 D
A.VAR B. cher C. integer D. default
2、若a为int类型,且其值为3,则执行完表达式a+=a-=a*a后,a的值是 C
A.-3 B.9 C.-12 D.6
3、以下程序的输入结果是 A
main( )
{ int i=010,j=10,k=x10;
printf("%d,%d,%d ",i,j,k);
}
A.8,10,16 B.8,10,10 C.10,10,10 D.10,10,16
4、设有以下定义:
int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};
int (*prt)[3]=a, * p=a[0];
则下列能够正确表示数组元素a[1][2]的表达式是 D
A.*((*prt+1)[2]) B.*(*(p+5)) C.(*prt+1)+2 D.*(*(a+1)+2)
数组指针解法:
((*(prt+1))[2])
*(*(prt+1)+2)
其实二维数组名a的类型就是int (*)[3];
所以prt和a是等价的。
5、以下对C语言函数的有关描述中,正确的是 A
A. 在C中,调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参
B. C函数既可以嵌套定义又可以递归调用
C .函数必须有返回值,否则不能使用函数
D.C程序中有调用关系的所有函数必须放在同一个源程序文件中
6、在以下一组运算中,优先级最高的运算符是? C
A. <= B.= C.% D.&&
7、若有定义:int a[3][4];不能表示数组元素a[1][1]的是 C
A.*(a[1]+1) B.*(&a[1][1]) C.(*(a+1))[1] D.*(a+5)
8、程序中定义以下宏 #define S(a,b) a*b A
若定义 int area; 且令area=S(3+1,3+4),则变量area的值为:
A.10 B.12 C.21 D.28
9、以下关于typedef的叙述中错误的是: A
A. 用typedef可以增加新的类型
B. 用typedef可以定义各种类型名,但不能用来定义变量
C. 用typedef只是将已有的类型用新的标识符来代表
D. 使用typedef有利于程序的通用和移植
10、以下关于宏替换的叙述不正确的是: D
A.宏替换只是字符替换 B.宏名无类型
C.宏替换不占用运行时间 D.宏替换不占用编译时间
11、以下所列的各函数首部中,正确的是 C
A.void play(var :Integer,var b:Integer) B.void play(int a,b)
C.void play(int a,int b) D.Sub play(a as integer,b as integer)
12、为表示关系x大于等于y大于等于z,应使用C语言表达式 A
A.(x>=Y)&&(Y>=z) B.(x>=Y)AND(y>=z)
C.(x>=Y>=z) D.(x>=Y)&(Y>=z)
13、下列对C语言字符数组的描述中错误的是 D
A.字符数组可以存放字符串
B.字符数组中的字符串可以整体输入、输出
C.可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值
D.不可以用关系运算符对字符数组中的字符串进行比较
14、若有以下说明和语句,则输出结果是? C
char str[]="\"c:\\abc.dat\"";
printf("%s",str);
A.字符串中有非法字符 B.\"c:\\abc.dat\" C."c:\abc.dat" D."c:\\abc.dat"
15、若有以下定义和语句:
int w[2][3],(*pw)[3];pw=w;
则对w数组元素的非法引用是 C
A.*(w[0]+2) B.*(pw+1)[2] C.pw[0][0] D.*(pw[1]+2)
16、若有以下定义和语句: B
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
则不能表示a数组元素的表达式是
A.*p B.a[10] C.*a D.a[p-a]
17、若有以下定义和语句:
char c1='b',c2='e';
printf("%d,%c\n",c2-c1,c2-'a'+'A');
则输出结果是 B
A.2,M B.3,E C.2,E D.输出项与对应的格式控制不一致,输出结果不确定
18、正确的标识符是: D
A.?a B.a=2 C.a.3 D.a_3
19、若执行完成下列语句:
int a=3,b=6,c;
c=a∧b<<2;
则变量c的二进制值为:D
A.00011100 B.00010100 C.0001000 D.00011011
20、若执行以下程序时从键盘上输入9,
Main()
{ int n;
scanf("%d",&n);
if(n++<10) printf("%d\n",n);
else printf("%d\n",n--);
}
则输出结果是: B
A.11 B.10 C.9 D.8
21、设有以下定义或语句,则输出的结果是? A
(用small模式编译,指针变量占2个字节)
struct date
{long *cat;
struct date *next;
double dog;
}too;
printf("%d",sizeof(too));
A.20 B.16 C.14 D.12
22、以下程序的输出结果是 C
fun(int x, int y, int z)
{ z=x*x+y*y; }
main()
{ int a=31;
fun(5,2,a);
printf("%d",a);
}
A.0 B.29 C.31 D.无定值
23、设x、y、t均为int型变量,则执行语句:x=y=3;t=++x||++y;后,y的值为 A
A.不定值 B.4 C.3 D.1
24、若x=4,则x*=x+2的值为:B
A.36 B.24 C.18 D.20
25、执行下列语句中,sum变量的值是:D
int sum=0
for(int i=0;i<10;i++,sum+=i);
A.45 B.55 C.0 D.编译错误
问答题
1、 请给出下列代码的输出结果
union
{
unsigned char a;
struct
{
unsigned i:3;
unsigned j:2;
unsigned k:3;
}b;
}u_ab;
void main(void)
{
u_ab.a = 45;
printf(“u_ab.b.k = %d\n”, u_ab.b.k);
}
输出结果:
答:如果是小端模式则为 1,如果为大端模式则为:6