第一部分 选择填空题
数据类型,表达式,输入输出
1. 可用作 C 标示符的一组字符为: D
a.b, sum, i, _go
yan, Class, go_1, 3weeks
A)
B)
C) 5$, month, stu, zhao
D) D555, r_1_2, _st_1, DAY
2. 以下正确的叙述是: D
A)在 C 程序中,每行中只能写-条语句
B)若 a 是实型变量,C 程序中允许赋值 a=10,因此实型变量中允许存放整型数
C)在 C 程序中,无论是整数还是实数,都能被准确无误地表示
D)在 C 程序中,%是只能用于整数运算的运算符
3. 以下程序打印出: B
int x = 2,y =4;
float z = (float)(x/y);
printf(“%4.2f”,z);
int main()
{
}
A) 0
B)
0.00
C) 0.50
D) 0.5
4. 以下不正确的叙述是: D
A)在 C 程序中,逗号运算符的优先级最低
B)在 C 程序中,APH 和 aph 是两个不同的变量
C)若 a 和 b 类型相同,在执行了赋值表达式 a=b 后 b 中的值将放人 a 中,
而 b 中的值不变。
D)当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型
变量只能输入实型数值。
5. 若有说明语句:char c='\72'则变量 c: A
A)包含 1 个字符 B)包含 2 个字符
C)包含 3 个字符 D)说明不合法,c 的值不确定
6. 阅读以下程序,当输入数据的形式为 25,13,10正确的输出结果为: D
main()
{int x,y,z
1
scanf("%d%d%d",&x,&y,&z );
printf("x+y+z=%d\n ,x+y+z);
}
A)x+y+z=48
C)x+z=35
B)x+y+z=35
D)不确定值
7. 以下叙述正确的是: C
A)在 C 程序中,main 函数必须位于程序的最前面
B)C 程序的每行中只能写-条语句
C)C 语言本身没有输入输出语句
D)在对一个 C 程序进行编译的过程中,可发现注释中的拼写错误
8. 以下不正确的 C 语言关键字是: C
(A)break
(B)if
(C)printf
(D)sizeof
9. 以下程序的输出结果是: D
main()
{ int a=12,b=12;
printf("%d %d\n",--a,++b);
}
(A)10 10
(B)12 12
(C)11 10
(D)11 13
10. c 语言的简单数据类型包括: B
(A)整型、实型、逻辑型
(C)整型、字符型、逻辑型
(B)整型、实型、字符型
(D)整型、实型、逻辑型、字符型
11. 在 C 语言中,字符型数据在内存中以(D)形式存放
(D)ASCII 码
(A)原码 (B)BCD 码
(C)反码
12. 在C语言中,逻辑值"真"用(D)表示
(A)true
(B)大于0的数
(C)非零整数
(D)非零的数
13. 若 int x;且有下面的程序片断,则输出结果为: D
for (x=3; x<6; x++)
{
printf((x%2) ? "**%d" : "##%d\n", x);
}
A)
**3
##4
**5
B)
##3
**4
##5
C) ##3
**4##5
D) **3##4
**5
14. 用 8 位无符号二进制数能表示的最大十进制数为 C
A) 127
B) 128
C) 255
D)256
2
15. 若变量 i、j 已正确定义,以下不合法的语句是( D )。
A.j==1
B.++i
C.j=5
D.j=int(i)
16. 以下选项中,与 k=n++完全等价的表达式是( A )。
A.k=n,n=n+1
B.n=n+1,k=n
C.k=++n
D.k+=n+1
17. 计算机可以直接识别的语言是( D )。
C.汇编语言
B.BASIC
A.C
D.机器语言
18. 下列关于程序调试的说法,错误的是:B
A. 可以一条语句一条语句地执行
B. 调试过程中如果修改了源代码,不需要重新编译就能继续运行
C. 可以随时查看变量值
D. 可以跟踪进入自己编写的函数内部
19. 设整型变量 n=10,i=4,则赋值运算 n%=i+1 执行后,n 的值是( A )。
A. 0
B. 1
C. 2
D. 3
20. 下列叙述中正确的是:D
A) C 语言中既有逻辑类型也有集合类型
B) C 语言中没有逻辑类型但有集合类型
C) C 语言中有逻辑类型但没有集合类型
D) C 语言中既没有逻辑类型也没有集合类型
21. 不能进行++和--运算的数据类型是: B
D. long
A. 指针 B. double C.
int
控制结构
1. 以下正确的描述是:B
A)continue 语句的作用是结束整个循环的执行
B)只能在循环体内和 switch 语句体内使用 break 语句
C)在循环体内使用 break 语句或 continue 语句的作用相同
D)从多层循环嵌套中退出时, 只能使用 goto 语句
2. 设有程序段: C
int k=10;
while
则下面描述中正确的是:
k= k-1;
(k=0)
A) while 循环执行 10 次
C) 循环体语句一次也不执行 D)循环体语句执行一次
B)循环是无限循环
3. 在 C 语言中,下列叙述正确的是( D )。
A.不能使用 do-while 语句构成循环
3
B.do-while 语句构成的循环,必须用 break 语句才能退出
C.do-while 语句构成的循环,当 while 语句中的表达式值为非零时循环结束
D.do-while 语句构成的循环,当 while 语句中的表达式值为零时结束循环
4. 结构化程序设计一般可以用( D )三种基本结构组合而成。
A.循环、选择、递归
C.循环、递归、分支
B.顺序、循环、嵌套
D.顺序、选择、循环
5. 以下不是死循环的语句为: D
A. for(; ; x+=k);
C. for(k=10; ;k--)sum+=k;
B. while(1){x++};
D. for(;(c=getchar())!=’\n’;)printf(“%c”,c);
6. 为了避免嵌套的 if-else 语句的二义性,C 语言规定 else 总是与__C__组成配
对关
(A)缩排位置相同的 if
(C)在其之前未配对的最近的 if
(B)在其之前未配对的 if
(D)同一行上的 if
7. 以下程序段 C
x= -1;
do
{
x=x*x;
}while(!x);
A)是死循环
C)循环执行一次
B)循环执行二次
D)有语法错误
8. 下面有关 for 循环的正确描述是: D
A) for 循环只能用于循环次数已经确定的情况
B) for 循环是先执行循环体语句,后判断表达式
C) 在 for 循环中,不能用 break 语句跳出循环体
D) for 循环的循环体语句中, 可以包含多条语句,
但必须用花括号括起来
函数
1. 凡是函数中未指定存储类别的局部变量,其隐含的存储类别为 A
A)自动(auto)
C)外部(extern)
B)静态(static)
D)寄存器(register)
2. 以下错误的描述是 D
函数调用可以
A)出现在执行语句中
B)出现在一个表达式中
C)做为一个函数的实参
D)做为一个函数的形参
4
3. 以下不正确的说法为 D
A)在不同函数中可以使用相同名字的变量
B)形式参数是局部变量
C)在函数内定义的变量只在本函数范围内有效
D)在函数内的语句块中定义的变量在本函数范围内有效
4. 若使用一维数组名作函数实参,则以下正确的说法是 A
A)必须在主调函数中说明此数组的大小
B)实参数组类型与形参数组类型可以不匹配
C)在被调函数中,不需要考虑形参数组的大小
D)实参数组名与形参数组名必须一致
5. 以下正确的描述是: B
在 C 语言程序中
A)函数的定义可以嵌套,但函数的调用不可以嵌套
B)函数的定义不可以嵌套,但函数的调用可以嵌套
C)函数的定义和函数的调用均不可以嵌套
D)函数的定义和函数的调用均可以嵌套
6. 以下正确的说法是 C
A)定义函数时,形参的类型说明可以放在函数体内
B)
C)如果函数值的类型与返回值类型不一致,以函数值类型为准
D)如果形参与实参的类型不一致,以实参类型为准
return 后边的值不能为表达式
7. C 语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是 B
A)地址传递
B)单向值传递
C)由实参传给形参,再由形参传回给实参
D)由用户指定传递方式
8. 以下正确的说法是 A
在 C 语言中
A)实参和与其对应的形参各占用独立的存储单元
B)实参和与其对应的形参共占用一个存储单元
C)只有当实参和与其对应的形参同名时才共占用存储单元
D)形参是虚拟的,不占用存储单元
9. 一个 C 语言程序是由 B
A) 一个主程序和若干子程序组成
C)若干过程组成
B)函数组成
D)若干子程序组成
10. 一个 C 程序的执行是从: A
5
A)本程序的 main 函数开始,到 main 函数结束
B)本程序文件的第-个函数开始,到本程序文件的最后-个函数结束
C)本程序的 main 函数开始,到本程序文件的最后-个函数结束
D)本程序文件的第-个函数开始,到本程序 main 函数结束
11. 在 C 语言中,若对函数类型未加显式说明,则函数的隐含类型是(C)
(A)void
(B)double
(C)int
(D)char
12. 有如下的函数调用语句:Fun(rec1,rec2+rec3,(rec4,rec5));
该函数调用语句中,函数实参个数是( A )。
A.3
C.5
B.4
D.有语法错误
13. 定义 int *swap()指的是 B
swap
(A)指一个返回整型值的函数 swap
(B)指一个返回指向整型值指针的函数
(C)指一个指向函数 swap()的指针,函数返回一个整型值 (D)以上说法
均错
14. C 语言中规定函数的返回值的类型是由(B )。
return 语句中的表达式类型所决定
A.
B. 在定义该函数时所指定的函数类型所决定
C. 调用该函数时系统临时决定
D. 调用该函数时的主调用函数类型所决定
15. 若用数组名作为函数调用时实参,则实际上传递给形参的是( A )。
A.数组首地址
C.数组中全部元素的值 D. 数组元素的个数
B. 数组的第一个元素值
16. 关于 return 语句,下列正确的说法是 C
A.只能出现在 main 函数中
C.可以在同一个函数中出现多次 D. 只能在除主函数以外的函数中出现
一次
B. 必须在每个函数中出现
数组
a[]={ 2,4,6,8,10,12,14,16,18,20,22,24},q[4],k;
(k=0;k<4;k++)
1. 若有定义:int
则下面程序段的输出是: C
for
q[k]=a[k*3];
printf("%d\n",q[3]);
A)8
C)20
B)16
D)输出项不合法,结果不确定
2. 若有定义:int a[4][6];则能正确表示 a 数组中任一元素 a[i][j]
6
(此处 0<=i<4,0<=j<6)地址的表达式是: A
A)&a[0][0]+6*i+j
C)&a[0][0]+4*i+j
B)&a[0][0]+4*j+i
D)&a[0][0]+6*i+i
3. 以下正确的说明语句是 B
A)int
B)int
c)int
*b[]={1,3,5,7,9}
a[5],*num[5]={&a[0],&a[1],&a[2],&a[3],&a[4]};
a[]={1,3,5,7,9};
int *num[5]={a[0],a[1],a[2],a[3],a[4]};
D)int
a[3][4],(*num)[4]; num[1]=&a[1][3];
4. 以下对二维数组 a 进行正确初始化的是(B)
(A)int a[2][3]={{1,2},{3,4},{5,6}};
(C)int a[2][ ]={1,2,3,4,5,6};
(B)int a[ ][3]={1,2,3,4,5,6};
(D)int a[2][ ]={{1,2},{3,4}};
5. 要说明一个有 10 个 int 元素的数组,应当选择语句: A
(A)int a[10];
(B) int a[2,5];
(C)
int a[];
(D)
int *a[10];
6. 为了判断两个字符串 s1 和 s2 是否相等,应当使用(
D )。
A.
C.
if(s1 == s2)
if(strcpy(s1,s2))
B. if(s1 = s2)
D.if(strcmp(s1,s2)==0)
7. 下列数组声明中,正确的是 A
A.
C.
#define size 10
int num['10'];
char str[size+2];
D. int n = 5; int a[n];
B. char str[];
指针
1. 若有以下定义, int
A)元素 a[5]的地址 B)元素 a[5]的值
C)元素 a[6]的地址 D)元素 a[6]的值
a[10],*p=a ;则*(p+5)表示: B
int *ptr1,*ptr2;且 ptrl 和 Ptr2 均已指向变量 k,下
2. 已有定义 int k=2;
面不能正确执行的赋值语句是: B
A)k=*ptrl+*ptr2;
C)ptrl=ptr2;
B)ptr2=k
D)k=*ptrl*(*ptr2);
3. 以下程序中调用 scanf 函数给变量 a 输入数值的方法是错误的,
其错误原因是 B
main()
7
{ int *p,*q,a,b;
p=&a;
printf("input
scanf("%d",*p);
a:");
}
A) *p 表示的是变量 p 的地址
B) *p 表示的是变量 a 的值,不是变量 a 的地址
C) *p 表示的是指针变量 p 的值
D) *p 只能用来说明 p 是一个指针变量
4. 下面程序应能对两个整型变量的值进行交换。以下正确的说法是: D
main(
{
)
int a=10,b=20;
printf("(1)a=%d,b=%d\n",a,b);
swap(&a,&b);
prinif("(2)a=%d,b=%d\n",a,b);
}
swap(int
{ int
q)
p,int
t; t=p;p=q;q=t; }
A)该程序完全正确
B)该程序有错,只要将语句 swap(&a,&b);中的参数改为 a,b 即可
C)该程序有错,只要将 swap()函数中的形参 p 和 q 以及 t 均定义为指针
(执行语句不变)即可
D)以上说法都不正确
5. 已知: int **p;则变量 p 是__B__.
(A)指向 int 的指针 (B)指向指针的指针 (C)int 型变量 (D)以上三种说法
均是错误的
6. 定义 int *p,i;以下含义正确的语句是( C)
(A)p=10;
(B)i=p;
(C)i=*p;
(D)p=2*p+1;
7. 对于指向类型相同的两个指针变量,不能进行(A)运算
(A)+
(B)-
(C)=
(D)==
8. 下列说法不正确的是( D )
A.指针是一个变量
C.指针可以进行加、减等算术运算
B.指针中存放的是地址值
D.指针变量不占用存储空间
9. 若要说明 x 是整型变量,p 为指向 x 的整型指针变量,下列说明语句中正确
的是( A )。
A.int x,*p=&x ;
C.int *p=&x,x ;
B.int x,p=&x ;
D.int x,*p=*x ;
8