请在40分钟内完成以下20道C语言基础题。在没有任何提示的情况下,如果能得满分,那么你可以扔掉本书了,你的水平已经大大超过了作者;如果能的80分以上,说明你的C语言基础还不错,学习本书可能会比较轻松;如果得分在50分以下,也不要气馁,努力学习就行了;如果不小心得了10分以下,你就得给自己悄悄警钟了;如果不幸得了0分,那实在是不应该,因为毕竟很多题是很简单的。
C语言基础题(每题5分)。
1. 下面的代码输出时什么?为什么?
C++ Code
|
|
void foo(
void)
{
unsigned
int a =
;
int b = -
;
(a + b >
) ? puts(
">6") : puts(
"<=6");
}
|
2. 下面的代码有什么问题?为什么?
C++ Code
1
2
3
4
5
6
7
8
9
10
11
12
13
|
|
void foo(
void) {
char string[
], str1[
];
int i;
for(i =
; i <
; ++i)
{
str1[i] =
'a';
}
strcpy(string, str1);
printf(
"%s\n", string);
}
|
3. 下面的代码,i和j的值分别是什么?为什么?
C++ Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
|
static
int j;
int k =
;
void fun1(
void)
{
static
int i =
;
i++;
}
void fun2(
void)
{
j =
;
j++;
}
int main(
void)
{
for(
int k =
; k <
; ++k)
{
fun1();
fun2();
}
return
;
}
|
4. 下面代码里,假设在32位系统下,个sizeof计算的结果分别是多少?
int *p = NULL;
sizeof(p) =
sizeof(*p) =
int a[100];
sizeof(a) =
sizeof(a[100]) =
sizeof(&a) =
sizeof(&a[0]) =
int b[100];
void fun(int b[100])
{
sizeof(b) =
}
5. 下面代码的结果是多少?为什么?
C++ Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
|
#include
"stdio.h"
#include
"string.h"
int main(
void)
{
signed
char a[
];
int i;
for(i =
; i <
; ++i)
{
a[i] = -i -
;
}
printf(
"%d\n", strlen(a));
return
;
}
|
6. 下面的代码里,哪些内容可被改写,哪些不可被改写?
(1)const int *p;
(2)int const *p;
(3)int * const p;
(4)const int *const p;
7.下面的两端代码又什么区别?什么时候需要使用代码(2)?
代码(1):
int i = 10;
int j = i;
int k = i;
代码(2):
volatile int i = 10;
int j = i;
int k = i;
8. 在32位的x86系统下,输出的值为多少?
C++ Code
1
2
3
4
5
6
7
8
9
10
11
12
13
|
|
#include
"stdio.h"
int main(
void)
{
int a[
] = {
,
,
,
,
};
int *ptr1 = (
int*)(&a +
);
int *ptr2 = (
int*)((
int)a +
);
printf(
"%x, %x\n", ptr1[-
],*ptr2);
return
;
}
|
9. 0x01 <<2+3的值为多少?为什么?
10. 定义一个函数宏,求x的平方
11. 下面的两段代码有什么区别?
代码(1):
struct TestStruct1
{
char c1;
short s;
char c2;
int i;
};
代码(2):
struct TestStruct2
{
char c1;
char c2;
short s;
int i;
};
12. 写代码向内存0x12ff7c地址存入一个整形术0x100.
13. 下面代码的值是多少?
C++ Code
1
2
3
4
5
6
7
8
9
10
11
12
|
|
#include
"stdio.h"
int main(
void)
{
int a[
] = {
,
,
,
,
};
int *ptr = (
int*)(&a +
);
printf(
"%d, %d\n", *(a +
),*(ptr -
));
return
;
}
|
14. 假设p的值为0x10000,如下表达式的值分别为多少?
struct Test
{
int Num;
char * pcName;
short dDate;
char cha[2];
short sBa[4];
}* p;
p + 0x1 = 0x ?
(unsigned long)p + 0x1 = 0x ?
(unsigned int *)p + 0x1 = 0x ?
15. 下面代码输出的结果是多少?
C++ Code
1
2
3
4
5
6
7
8
9
10
11
12
|
|
#include
"stdio.h"
int main(
void)
{
int a[
][
] = {(
,
),(
,
),(
,
)};
int *p;
p = a[
];
printf(
"%d\n", p[
]);
return
;
}
|
16. 下面的代码有什么问题?为什么?
C++ Code
1
2
3
4
5
6
7
8
9
10
11
12
|
|
void fun(
char a[
]) {
char c = a[
]; }
int main(
void)
{
char b[
] =
"abcdefg";
fun(b[
]);
return
;
}
|
17. 下面的代码有什么问题?为什么?
C++ Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
|
#include
"stdlib.h"
#include
"string.h"
struct student
{
char *name;
int score;
} stu, *pstu;
int main(
void)
{
pstu = (
struct student *)malloc(
sizeof(
struct student));
strcpy(pstu->name,
"Jimy");
pstu->score =
;
free(pstu);
return
;
}
|
18. 下面的代码输出结果是多少?
C++ Code
1
2
3
4
5
6
7
8
9
10
11
12
13
|
|
#include
"stdio.h"
void fun(
int i)
{
if(i >
)
fun(i/
);
printf(
"%d\n", i);
}
int main(
void)
{
fun(
);
return
;
}
|
19. 下面的代码有什么问题?为什么?
char c;
c = getchar();
if(EOF == c)
{
...
}
20. 请写一个C函数,若当前系统是Big_endian的,则返回0;若是Little_endian的,则返回1。
PS:答案回复可见。

O(∩_∩)O~