吐血整理 一起加油❤
1.函数是构成c语言程序的基本单位。
2.c语言程序从程序中的main函数开始执行。
3.c语言区分大小写。
4.c语言程序的工作过程是编辑、编译、连接、运行。
5.c语言程序的三种基本结构是顺序、选择、循环。
6.标识符的命名规则是:[1]只能由数字、字母、下划线构成。
[2]数字不能作为标识符的开头。
[3]关键字不能作为标识符。
练习:【1】下列正确的标识符是(C )。 A.-a1 B.a[i] C.a2_i D.int t 选项 A 中的“-” ,选项 B 中“[”与“]”不满足(1);选项 D 中的 int 为关键字,不满足(3)
【2】下列 C 语言用户标识符中合法的是( B )。 A)3ax B)x C)case D)-e2 E)union
选项
A
中的标识符以数字开头不满足(2);选项
C
,
E
均为为关键字,不满足(3);选 项 D
的
“-”
不满足(
1
);
【3】下列四组选项中,正确的
C
语言标识符是(
C
)。
A
)
%x B
)
a+b C
)
a123 D
)
123
选项
A
中的
“%”
,选项
B
中
“+”
不满足(
1
);选项
D
中的标识符以数字开头不满足(2)
【4】下列四组字符串中都可以用作
C
语言程序中的标识符的是(
A
)。
A
、
print _3d db8 aBc B
、
I\am one_half start$it 3pai
C
、
str_1 Cpp pow while D
、
Pxq My->book line# His.age
选项
B
中的
“\”
,
”$”
,选项
D
中
“>”
,
”#”
,
”.”
,
”-”
不满足(
1
);选项
C
中的
while
为关键字,不满足(3)
7.C
语言中的简单数据类型包括
整型、实型、字符型
。
8.在
C
语言程序中,表达式
5%2
的结果是
C
。
A)2.5 B)2 C)1 D)3
%
为求余运算符,该运算符只能对整型数据进行运算。且符号与被模数相同。
5%2=1
;
5%
(
-2
)
=1
;(
-5
)
%2=-1
;(
-5
)
%
(
-2
)
=-1
;
/
为求商运算符,该运算符能够对整型、字符、浮点等类型的数据进行运算,
5/2=2
9.【1】如果
int a=3,b=4
;则条件表达式
"a<b? a:b"
的值是
__
A
__
。
A) 3 B) 4 C) 0 D) 1
表达式
1
?表达式
2
:表达式
3
先计算表达式
1
,
若表达式
1
成立,
则选择计算表达式
2
,并表达式
2
的值作为整个大表达式的值;
若表达式
1
不成立,则选择计算表达式
3
,并将表达式
3
的值作为整个大表达式的值
此题中的
a<b
相当于表达式
1
,
a
相当于表达式
2
,
b
相当于表达式
3.
a
为
3
,
b
为
4
。
a<b
表达式
1
成立,因此计算表达式
2
,并将表达式
2
的值即
a
中的值,并
作为整个表达式的值,因此整个表达式的值为
3
【2】若
int x=2,y=3,z=4
则表达式
x<z?y:z
的结果是
(
B
).
A)4 B)3 C)2 D)0 E)1
10.
C
语言中,关系表达式和逻辑表达式的值是(
B
)
。
A) 0 B) 0
或
1 C) 1 D) ‘T’
或
’F’
11.【1】
下面
(
D
)
表达式的值为
4.
A) 11/3 B) 11.0/3
C) (float)11/3 D) (int)(11.0/3+0.5)
1
)相同数据类型的元素进行数学运算(+、
-
、
*
、
/
)得到结果还保持原数据类型。
2
)不同数据类型的元素进行数学运算,先要统一数据类型,统一的标准是低精度类型转
换为高精度的数据类型。
选项
A
,
11
与
3
为两个整数,
11/3
结果的数据类型也应为整数,因此将
3.666666
的小数部
分全部舍掉,仅保留整数,因此
11/3=3.
选项
B
,
11.0
为实数,
3
为整数,因此首先要统一数据类型,将整型数据
3
转换为
3.0
,转
换后数据类型统一为实型数据,选项
B
变为
11.0/3.0,
结果的数据类型也应为实型数据,因此
选项
B 11.0 /3=3.666666
选项
C
,先将整数
11
强制类型转换,转换为实型
11.0
,因此选项
C
变为
11.0/3
,其后计算
过程、结果与选项
B
同
选项
D
,首先计算
11.0/3
,其计算过程、结果与选项
B
同,得到
3.666666
;再计算
3.666666+0.5=4.166666
,最后将
4.166666
强制类型转换为整型,即将其小数部分全部舍掉,
结果为
4。
【2】设整型变量 a=2,则执行下列语句后,浮点型变量 b 的值不为 0.5 的是(
B )
A.b=1.0/a B.b=(float)(1/a)
C.b=1/(float)a D.b=1/(a*1.0)
【3】
若
“int n; float f=13.8;”,
则执行
“n=(int)f%3”
后,
n
的值是(
A
)
A.1 B.4 C.4.333333 D.4.6
“(int)f“
表示将
f
中的值强制类型转换为整型,即将
13.8
的小数部分舍掉,转换为
13
;然
后计算
13%3
,结果为
1
,再将结果赋给变量
n
,因此
n
的值为
1
17.
以下对一维数组
a
的正确说明是:
D
A) char a
(
10
);
B) int a[]
;
C)int k
=
5
,
a[k]
;
D
)
char a[3]={‘a’,’b’,’c’};
一维数组的定义、初始化:
类型符 数组名
[
常量表达式
]
类型符是指数组中数组元素的类型;数组名要符合标识符命名规则;常量表达式是指数组的
长度(数组中包含元素的个数),其值只能是整数,不可以是变量,而且从
1
开始计数。
选项
A
,常量表达式只能放在中括号
[ ]
中
选项
B
,只有在对数组初始化(即赋值)的时候才可以省略数组的长度,
B
中并未对
a
进行
初始化。
选项
C
,常量表达式不能为变量。
12.【1】
以下能对一维数组
a
进行初始化的语句是
: (
C
)
A. int a[5]=(0,1,2,3,4,) B. int a(5)={}
C. int a[3]={0,1,2} D. int a{5}={10*1}
详见教材
P145
,一维数组的定义、初始化
选项
B,D
,常量表达式只能放在中括号
[ ]
中
选项
A
,数组可以看做是若干个相同数据类型元素的有序集合,因此以集合的形式对其初
始化,使用
{ }
对其初始化,选项
A
用了()
.
【2】在
C
语言中对一维整型数组的正确定义为
D
。
A)int a(10); B)int n=10,a[n];
C)int n;a[n]; D)#define N 10,int a[N];
13.【1】已知:
int a[10];
则对
a
数组元素的正确引用是(
D
)。
A
、
a[10] B
、
a[3.5] C
、
a(5) D
、
a[0]
数组名
[
下标
]
引用数组元素时,
[ ]
中的下标为逻辑地址下标,只能为整数,可以为变量,且从
0
开始计数
int a[10]
表示定义了一个包含
10
个整型数据的数组
a
,数组元素的逻辑地址下标范围为
0~9
,即
a[0]
表示组中第
1
个元素
; a[1]
表示组中第
2
个元素
; a[2]
表示组中第
3
个元
素
; ......;a[9]
表示组中第
10
个元素
.
选项
A
,超过了数组
a
的逻辑地址下标范围;
选项
B
,逻辑地址下标只能为整数
选项
C
,逻辑地址下标只能放在
[ ]
中
【2】若有以下数组说明,则
i=10;a[a[i]]
元素数值是(
C
)。
int a[12]={1,4,7,10,2,5,8,11,3,6,9,12};
A.10 B.9 C.6 D.5
先算
a[a[i]]
内层的
a[i]
,由于
i=10,
因此
a[i]
即
a[10].
a[10]
对应下面数组中的元素为
9.
因此
a[a[i]]
即为
a[9]
a[9]
对应下面数组中的元素为
6.
因此
a[9]
即为
6
【3】若有说明:
int a[][3]={{1,2,3},{4,5},{6,7}};
则数组
a
的第一维的大小为
: (
B
)
A. 2 B. 3 C. 4 D.
无确定值
二维数组的一维大小,即指二维数组的行数,在本题中,按行对二维数组赋值,因此内层有
几个大括号,数组就有几行
14.
对二维数组的正确定义是(
C
)
A.int a[ ] [ ]={1,2,3,4,5,6}; B.int a[2] [ ]={1,2,3,4,5,6};
C.int a[ ] [3]={1,2,3,4,5,6}; D.int a[2,3]={1,2,3,4,5,6};
二维数组的定义、初始化
类型符 数组名
[
常量表达式
][
常量表达式
]
二维数组可以看做是矩阵
类型符是指数组中数组元素的类型;数组名要符合标识符命名规则;第一个常量表达式是指
数组的行数;第二个常量表达式是指数组的列数;常量表达式的值只能是整数,不可以是变
量,而且从
1
开始计数。
一维数组初始化时可以省略数组长度
二维数组初始化时可以省略行数,但不能省略列数
选项
A,B
,都省略了列数
选项
D
,不符合二维数组定义的一般形式,行、列常量表达式应该放在不同的
[]
中
15.已知
int a[3][4];
则对数组元素引用正确的是
__
C
___
A)a[2][4] B)a[1,3] C)a[2][0] D)a(2)(1)
数组元素的引用
数组名
[
下标
] [
下标
]
引用数组元素时,
[ ]
中的下标为逻辑地址下标,只能为整数,可以为变量,且从
0
开始计数
第一个
[
下标
]
表示行逻辑地址下标,第二个
[
下标
]
表示列逻辑地址下标。
因此
a
的行逻辑地址范围
0~2
;
a
的列逻辑地址范围
0~3
;
选项
A
,列逻辑地址下标超过范围
选项
B,D
,的引用形式不正确。
16.C
语言中函数返回值的类型是由
A
决定的
.
A)
函数定义时指定的类型
B) return
语句中的表达式类型
C)
调用该函数时的实参的数据类型
D)
形参的数据类型
17.
在
C
语言中,函数的数据类型是指
(
A
)
A
函数返回值的数据类型
B.
函数形参的数据类型
C
调用该函数时的实参的数据类型
D.
任意指定的数据类型
5
18.
在函数调用时,以下说法正确的是(
B
)
A.
函数调用后必须带回返回值
C.
函数间的数据传递不可以使用全局变量
B.
实际参数和形式参数可以同名
D.
主调函数和被调函数总是在同一个文件里
19.
在
C
语言中,表示静态存储类别的关键字是
:
(
C
)
A) auto B) register C) static D) extern
20.未指定存储类别的变量,其隐含的存储类别为(
A
)。
A)auto B)static C)extern D)register
21.【1】
若有以下说明语句:
struct student
{ int num;
char name[ ];
float score;
}stu;
则下面的叙述不正确的是
: (
D
)
A. struct
是结构体类型的关键字
B. struct student
是用户定义的结构体类型
C. num, score
都是结构体成员名
D. stu
是用户定义的结构体类型名
【2】若有以下说明语句:
struct date
{ int year;
int month;
int day;
}brithday;
则下面的叙述不正确的是
__
C
___.
A) struct
是声明结构体类型时用的关键字
B) struct date
是用户定义的结构体类型名
C) brithday
是用户定义的结构体类型名
D) year,day
都是结构体成员名
22.
以下对结构变量
stul
中成员
age
的非法引用是
B
struct student
{ int age
;
int num
;
}stu1,*p
;
p=&stu1
;
A) stu1.age B) student.age C) p->age D) (*p).age
23.
设有如下定义:
struck sk
{ int a;
float b;
}data;
int *p;
若要使
P
指向
data
中的
a
域,正确的赋值语句是
C
A) p=&a; B) p=data.a; C) p=&data.a; D)*p=data.a;
24.
设有以下说明语句:
typedef struct stu
{ int a;
float b;
} stutype;
则下面叙述中错误的是(
D
)。
A、
struct
是结构类型的关键字
B
、
struct stu
是用户定义的结构类型
C
、
a
和
b
都是结构成员名
D
、
stutype
是用户定义的结构体变量名
25
. 语句
int *p;
说明了
C
。
A)p
是指向一维数组的指针
B)p
是指向函数的指针
,
该函数返回一
int
型数据
C)p
是指向
int
型数据的指针
D)p
是函数名
,
该函数返回一指向
int
型数据的指针
26
.下列不正确的定义是(
A
)。
A. int *p=&i,i; B.int *p,i;
C
.
int i,*p=&i; D.int i,*p;
选项
A
先定义一个整型指针变量
p
,然后将变量
i
的地址赋给
p
。然而此时还未定义变
量
i
因此编译器无法获得变量
i
的地址。
(A
与
C
对比,选项
C
先定义变量
i
,则在内存中为
i
分配空间,因此
i
在内存空间的地址就可以确定了;然后再定义
p
,此时可以为
p
赋
i
的地
址,
C
正确
)
27.
若有说明:
int n=2,*p=&n,*q=p,
则以下非法的赋值语句是
:
(
D
)
A
)
p=q B
)
*p=*q C
)
n=*q D
)
p=n
p,q
同为整型指针变量,二者里面仅能存放整型变量的地址。
选项
A
,
q
中为地址,因此可将此地址赋给
p
选项
B
,
*p
表示
p
所指向对象
n
的内容,即一个整数;
*q
表示
q
所指向对象的内容,由于
在定义
q
时为其初始化,将
p
中
n
的地址给
q
,因此
p
中存放
n
的地址,
*q
表示
q
所指向对
象
n
的内容
.
因此
*p=*q
相当于
n=n;
选项
C
,
n=*q
等价于
n=n;
选项
D
,
p
中只能存放地址,不能将
n
中的整数值赋给
p
28
.有语句:
int a[10],;
则
B
是对指针变量
p
的正确定义和初始化。
A)int p=*a; B)int *p=a; C)int p=&a; D)int *p=&a;
选项
A
,
a
是数组名,不是指针变量名,因此不可用
*
标注数组名
a
选项
C
,
a
是数组名,数组名就是地址,无需再用地址符号。而且在定义指针变量
p
时,应
在变量名前加
*
,标明
p
是指针变量
选项
D
,
a
是数组名,数组名就是地址,无需再用地址符号。
29.
若有说明语句
“int a[5],*p=a;”,
则对数组元素的正确引用是
(
C
)
。
A.a[p] B.p[a] C.*(p+2) D.p+2
首先定义一个整型数组
a
,
a
的长度为
5
,然后定义一个指针变量
p
,并同时对
p
进行初
始化,将数组
a
的地址赋给
p
。因此此时
p
中存放的数组
a
的首地址,即数组中第一个元素
a[0]
的地址。
对于数组元素下标的引用
(
详见
p144),
一般形式 数组名
[
下标
]
其中下标为逻辑地址下
7
标,从
0
开始计数,方括号中的下标可以是变量,可以是表达式,但结果一定要是整数。
选项
A
,
p
中存放的是地址,不是整数,不能做数组元素的下标
选项
B
,
a
是数组名,数组名就是地址,不是整数,不能做数组元素的下标
选项
C
,
p+2
表示指向同一数组中的下两个元素的地址,当
前
p
指向
a[0]
,则
p+2
表示
a[2]
的地址,因此
*(p+2)
表示
a[2]
的内容
30.
有如下程序
int a[10]={1,2,3,4,5,6,7,8,9,10},*P=a;
则数值为
9
的表达式是
B
A) *P+9 B) *(P+8) C) *P+=9 D) P+8
(
重点!!!详见
p231~234)
首先定义一个整型数组
a
,
a
的长度为
5
,然后定义一个指针变量
P
,并同时对
P
进行初
始化,将数组
a
的地址赋给
P
。因此此时
P
中存放的数组
a
的首地址,即数组中第一个元素
a[0]
的地址。
数组中
9
对应的是
a[8],
选项
B
,
P+8
表示数组中后
8
个元素的地址,即
a[8]
的地址。
*(P+8)
则表示该地址内所存放的内容,即
a[8]
的值。
选项
A
,
*P
表示
P
所指向对象的内容,此时
P
指向
a[0], *P
即
a[0]
的值
1. *P+9=1+9=10
选项
C
,
*P
表示
P
所指向对象的内容,此时
P
指向
a[0], *P
即
a[0]
的值。因此
*P+=9
即
*P =*P+9,
等价于
a[0]=a[0]+9.
选项
D
,
P+8
表示数组中后
8
个元素的地址,即
a[8]
的地址,而非
a[8]
中的值。
31.
在
C
语言中,以
D
作为字符串结束标志
A)’\n’ B)’ ’ C) ’0’ D)’\0’
32.
下列数据中属于
“
字符串常量
”
的是(
A
)。
A.“a” B.{ABC} C.‘abc\0’ D.‘a’
若干个字符构成字符串
在
C
语言中,用单引号标识字符;用双引号标识字符串
选项
B
,
C
,分别用
{}
和
’’
标识字符串
选项
D
,标识字符。
33.
已知
char x[]="hello", y[]={'h','e','a','b','e'};,
则关于两个数组长度的正确描述是
B
.
A)
相同
B)x
大于
y C)x
小于
y D)
以上答案都不对
C
语言中,字符串后面需要一个结束标志位
'\0'
,通常系统会自动添加。
对一维数组初始化时可采用字符串的形式(例如本题数组
x
),也可采用字符集合的形式(例
如本题数组
y
)。在以字符串形式初始化时,数组
x
不尽要存储字符串中的字符,还要存储
字符串后的结束标志位,因此数组
x
的长度为
6
;在以字符集合形式初始化时,数组
y
,仅
存储集合中的元素,因此数组
y
长度为
5