1. C语言中,逻辑"真"等价于( )
题目分析:
"逻辑真"在C语言中通常指的是非零数。
- A. 大于零的数
- B. 大于零的整数
- C. 非零的数 (正确答案)
- D. 非零的整数
正确答案:C
2. 若定义了数组 int a[3][4];
,则对a数组元素的非法引用是( )
题目分析:
题目考查的是二维数组的访问,定义的时候a[3][4]
表示有3行4列, 但是使用的时候是从数组坐标0开始的a[0][0]
到 a[2][3]
。任何超出这个范围的引用都是非法的。
- A.
a[0][2*1]
- B.
a[1][3]
- C.
a[4-2][0]
- D.
a[0][4]
(正确答案)
正确答案:D
3. 执行C语言语句 "for(i=1; i++<4; );" 后,变量i的值是( )
题目分析:
这个for循环从 i=1
开始,条件是 i++<4
,i先比较再自增,直到i变为5时,循环终止。
- A. 2
- B. 3
- C. 4
- D. 5 (正确答案)
正确答案:D
4. 执行下面的一段C程序后,变量x的值为( )。
c
char x = 200;
int a = 300;
BOOL flag;
int value1, value2;
value1 = 200;
value2 = 300;
if (flag && ((value1 = value2) == 200)) {
x = x + a;
}
题目分析:
-
x
是char类型,初始值为200; -
分解这个表达式:(flag && ((value1 = value2) == 200))
-
((value1 = value2) == 200)中,value1先被value2赋值为300,然后value再与200进行对比,如果等于为true(1),不等于为false(0).这里表达式结果为flase(0)
-
然后
flag
未被赋值,默认为0,flag与导致if
条件不成立,不执行x = x + a;
; -
所以
x
保持初始值。 -
A. 0
-
B. 200 (正确答案)
-
C. 300
-
D. 500
正确答案:B
5. 执行下列程序时从键盘上输入5,则输出结果是( )
c
#include <stdio.h>
main()
{
int x;
scanf("%d",&x);
if(x++>=5) printf("%d\n", x);
else printf("%d\n", x--);
}
题目分析:
输入为5时,x++
先进行比较再自增,因此条件 x++ >= 5
为真,执行 printf("%d\n", x);
,x--先输出6后自减。
- A. 7
- B. 6 (正确答案)
- C. 5
- D. 4
正确答案:B
6. 以下C语言程序的输出结果是( )。
c
struct s
{
int x,y;
} data[2] = {10,100,20,200};
main()
{
struct s *p=data;
p++;
printf("%d\n",++(p->x));
}
- A. 10
- B. 11
- C. 20
- D. 21 (正确答案)
题目分析:
-
初始化:
data[0]
初始化为{10, 100}
data[1]
初始化为{20, 200}
-
指针
p
初始状态:-
p -> data[0] (10, 100)
:+--------------------+
data data[0] +---+---+ +---+---+ -------------------- data[1] +---+---+ +---+---+ +--------------------+
-
-
指针自增 :
-
p++
,现在p
指向data[1](20, 200)
:+--------------------+
data data[0] +---+---+ +---+---+ -------------------- data[1] +---+---+ +---+---+ +--------------------+
-
-
访问和自增
++(p->x)
,访问 p->x(data[1].x)并进行自增操作:-
p
指向data[1]
后,p->x
的值为20; -
++(p->x)
使其值变为21,最终输出21。+--------------------+
data data[0] +---+---+ +---+---+ -------------------- data[1] +---+---+ +---+---+ +--------------------+
-
正确答案:D
7. 阅读下面程序,该程序运行后的输出结果是( )。
c
#include <stdio.h>
int a;
int f(int);
main()
{
int a=0;
printf("%d\n",f(5));
printf("%d\n",f(10));
}
int f(int m)
{
static int a=0;
int b=0;
a+=m;
b+=5;
return b;
}
题目分析:
-
函数
f
中的静态变量a
的值累加,函数结束不会被清零; -
b
是局部变量,每次调用后都被初始化为0,最终返回5; -
输出为两次
5
。 -
A. 5, 15
-
B. 5, 10 (正确答案)
-
C. 0, 0
-
D. 0, 10
正确答案:B
第8题
阅读以下程序,并选择符合要求的输出结果。
c
char [] = " ";
* = ;
= ;
() = _____
() = _____
() = _____
选项:
- (),,
- (),,
- (),,
根据题目描述,无法确定具体的输出结果,因为缺少关键信息。请提供完整的程序或更多的上下文信息以便准确回答。
第9题
阅读以下程序片段,并选择符合要求的输出结果。
c
void foo(void)
{
unsigned int a = 6;
int b = -20;
(a+b > 6)? puts("> 6"): puts("<= 6");
}
选项:
- (A) >6
- (B) <=6
- © 不确定
解答:
unsigned int a = 6;
定义了a
为无符号整数,值为 6。int b = -20;
定义了b
为有符号整数,值为 -20。- 计算
a + b
得到-14
。 - 因为
a + b
是负数,所以a + b < 6
。 - 输出
"<= 6"
。
答案:(B) <=6
第10题
下面的程序(a)和程序(b)运行后,y 和 c 的值分别是。
程序(a):
c
#define f(x) x*x
main()
{
int x=2; float y;
y=x/f(x);
}
程序(b):
c
#define f(x) x/x
main()
{
int x=2; float y;
y=x/f(x);
}
解答:
-
程序(a):
#define f(x) x*x
y = x / f(x)
展开宏替换后为y = 2 / (2*2)
,即y = 2 / 4
,结果为0.5
。
-
程序(b):
#define f(x) x/x
y = x / f(x)
展开宏替换后为y = 2 / (2/2)
,即y = 2 / 1
,结果为2
。
答案:
- 程序(a)运行后,y 的值为
0.5
。 - 程序(b)运行后,y 的值为
2
。
请确认是否正确理解了题目内容,如有不同意见或补充,请告知。
好的,我来解答一下这张试卷上的题目。
选择题部分
- seldom
- by themselves
- alone
简答题部分
- 请问
#include <filename.h>
和#include "filename.h"
有什么区别?
#include <filename.h>
: 表示只在标准库里面去查找这个头文件。#include "filename.h"
: 表示先在用户所在的目录路径去查找,找不到的话再去标准库里面去查找。
- 请写出 char *p 与 "零值" 比较的 if 语句。
c
if (*p == '\0') {
// do something
}
- 写一个"标准"宏 MIN,这个宏输入两个参数并返回较小的一个。
c
#define MIN(X,Y) ((X)<(Y)?(X):(Y))
- 请简述以下两个 for 循环的优点和缺点。
-
第一个 for 循环:
- 优点:当 condition 条件改变时,会改变 DoSomething 进行 DoOtherThing。
- 缺点:需要额外的条件判断,代码可能更复杂。
-
第二个 for 循环:
- 优点:不需要额外的条件判断,代码简洁。
- 缺点:如果 condition 改变,可能会导致 DoSomething 和 DoOtherThing 都被执行,效率较低。
希望这些解答对您有帮助!如果有其他问题,请随时告诉我。
好的,我来解答一下这张试卷上的题目。
第20题
请说明 Heap 与 stack 的区别。(5分)
- Heap: 属于堆空间,需要通过手动申请和释放,如使用 malloc 或 calloc 分配一块空间后,没有释放,那么这块空间可以用动态存储结束。
- Stack: 属于栈空间,用来存放局部变量、函数调用时所需的临时空间,它是由编译器自动分配和释放。
第21题
编写 strcpy 函数(15分)
已知 strcpy 函数的原型是 char *strcpy(char *strDest, const char *strSrc);
其中 strDest 是目的字符串,strSrc 是源字符串。
c
int def_copy(char *strDest, const char *strSrc)
{
while(*strSrc != '\0')
{
*strDest = *strSrc;
strDest++;
strSrc++;
}
return 0;
}
第22题
请用 C 语言实现:将二维数组行列元素互换,存到另一个数组中。(15分)
数据结构,函数原型可自行定义。
c
void swap(int arr[][N], int line, int tmp[][N])
{
for (int i = 0; i < line; i++)
{
for (int j = 0; j < N; j++)
{
tmp[i][j] = arr[j][i];
}
}
}
第23题
请编写一个 C 函数,该函数给出一个字节中(输入参数)被置 1 的位的个数。(15分)
函数原型是 unsigned short BitNum(const unsigned char input)
c
unsigned short BitNum(const unsigned char input)
{
int cnt = 0;
for (int i = 0; i < 8; i++)
{
if (input & 1)
cnt++;
input >>= 1;
}
return cnt;
}
希望这些解答对你有所帮助!如果有任何疑问,请随时提问。