1、? 以下不正确的定义语句是( ) ????????A: double x[5] = {2.0, 4.0, 6.0, 8.0, 10.0}; ????????B: char c2[] = {'\x10', '\xa', '\8'}; ????????C: char c1[] = {'1','2','3','4','5'}; ????????D: int y[5+3]={0, 1, 3, 5, 7, 9};
????????解析: ????????本题B选项考查转义字符,有如下格式: ????????????????\ddd ddd表示1到3个八进制数 如:\130 转义为 字符X ????????????????\xhh hh表示1到2位十六进制数 如:\x30 转义为 字符0
????????但八进制数字是0-7,没有8,故B选项中'\8'是错误的
????????正确答案:B
?
2、? test.c 文件中包括如下语句,文件中定义的四个变量中,是指针类型的变量为【多选】? ?
#define INT_PTR int*
typedef int* int_ptr;
INT_PTR a, b;
int_ptr c, d;
????????A: a B: b C: c D: d????????
????????解析: ????????因为#define是宏定义,仅仅是直接替换,INT_PTR a, b; 进行宏替换后代码是这样的:
????????int *a, b;这里的int *是a的类型,b的类型是int,故此次b只是int类型。而typedef是把该? ? ? ? ? ? 类型定义一个别名,别名是一个独立的类型了,使用这个类型创建的变量都是这个类型? ? ? ? ? 的。所以 a,c,d才是指针类型
????????正确答案:ACD
?
3、? 以下程序段的输出结果是( )
#include<stdio.h>
int main()
{
char s[] = "\\123456\123456\t";
printf("%d\n", strlen(s));
return 0;
}
????????A: 12 B: 13 C: 16 D: 以上都不对
????????解析: ????????这里考查转义字符,注意:\\ 表示字符'\',\123表示字符'{',\t表示制表符,这些都是一? ? ? ? ? 个字符
????????正确答案:A
?
4、? 以下程序的输出结果为( ) ? ? ? ?
#include <stdio.h>
int i;
void prt()
{
for (i = 5; i < 8; i++)
printf("%c", '*');
printf("\t");
}
int main()
{
for (i = 5; i <= 8; i++)
prt();
return 0;
}
????????A: *** B: *** *** *** *** C: *** *** D: * * *
????????解析: ????????全局变量i,在main()中修改为5,第一次在prt()中执行循环输出三次'*',i被修改为8,回? ? ? ? ? 到main()中第二次调用prt()时,i<8为假,循环结束没输出,执行一次print("\t"),再次回? ? ? ? ? 到主函数后i++变为9,i<=8为假,循环结束;
????????正确答案:A
?
5、? 对于代码段,下面描述正确的是( )
t=0;
while(printf("*"))
{
t++;
if (t<3)
break;
}
????????A: 其中循环控制表达式与0等价 B: 其中循环控制表达式与'0'等价 ????????C: 其中循环控制表达式是不合法的 D: 以上说法都不对
????????解析: ????????因print(“*”)函数调用的返回值是字符串中字符的个数,即为1。所以while后面的条件恒? ? ? ? ? ? 为真,所以循环控制表达式与'0'是等价的(字符'0'不是0)
????????正确答案:B
6、? 我们知道C语言的 break 语句只能跳出离它最近的一层循环,可是有时候我们需要跳出? ? ? ? ? 多层循环,下列跳出多层循环的做法正确的是【多选】( ) ????????A: 将程序写成函数用return结束函数,便可跳出循环 ????????B: 修改外层循环条件例如
for( int i = 0 ; i < MAX1 ; i ++ )
{
for( int j = 0 ; j < MAX2 ; j ++ )
{
if( condition )
{
i = MAX1;
break;
}
}
}
????????C: 在外层循环设置判断条件例如
for( ; symbol != 1 && condition2 ; )
{
for( ; symbol != 1 && condition3 ; )
{
if( condition1 )
symbol = 1 ;
}
}
????????D: 在外层循环后面加入break例如
for( ; condition2 ; )
{
for( ; condition3 ; )
{
if( condition1 )
symbol = 1 ;
}
if(symbol == 1 )
break ;
}
????????正确答案:ABCD
?
7、??设函数 fun 和实参数组的说明是如下形式,则对函数的调用语句中,正确的是( )
void fun(char ch, float x[]);
float a[10];
????????A: fun("asd" , a[]); B: fun('x' , A); C: fun('68' , 2.8); D: fun(32 , a);
????????解析: ????????A选项数组传参只需要写数组名就行,a[]时错误的;
????????B选项第二个参数写成了大写,错了;
????????C选项第二个参数是浮点数,但是fun函数的第二参数是数组不匹配,fun函数参数x需要? ? ? ? ? ? ?传一个数组或者float *指针;
????????D选项的形式是正确的。
????????正确答案:D
?
8、? 在C语言中,以下正确的说法是( ) ????????A: 实参和与其对应的形参各占用独立的存储单元 ????????B: 实参和与其对应的形参共占用一个存储单元 ????????C: 只有当实参和与其对应的形参同名时才共占用存储单元 ????????D: 形参是虚拟的,不占用存储单元
????????解析: ????????在调用函数的时候,真实传递给函数的是实参,函数定义部分函数名后的参数是形参。? ? ? ? ? 形参和实参的名字是可以相同的,在函数调用的时候,形参是实参的一份临时拷贝,分? ? ? ? ? 别占用不同的内存空间,所以A正确,B错误,及时形参和实参的名字相同,也是占用不
? ? ? ? 同的内存空间,所以B错误;函数如果不被调用时,函数的形参是形式上存在的,但是? ? ? ? ? 函数在被调用的时候,形参是要分配内存空间的,所以D错误。
????????正确答案:A
?
9、? 下列定义数组的语句中正确的是【多选】( ) ????????A:
#define size 10
char str1[size], str2[size+2];
????????B: char str[];
????????C: int num['10'];
????????D: int n=5; int a[n][n+2];
????????解析: ????????A选项:宏替换,没问题;
????????B选项:非法定义,一维数组必须定义数组元素个数;
????????C选项:字符'0',转换成十进制为48,所以该选项最终为int num[48];
????????D选项:错误,数组定义下角标不能为变量,注:C99标准中支持了使用变量,这里不? ? ? ? ? ? ? ? ? ? ? ? ? 做特殊考虑。
????????正确答案:AC
?
10、?以下哪个选项可以正确描述 sizeof(double) ( ) ????????A: 一个整型表达式
????????B: 一个双精度型表达式
????????C: 一个不合法的表达式
????????D: 一种函数调用
????????解析: ????????sizeof是C语言中的一个操作符,不是函数调用,简单的说其作用就是返回一个对象或者
? ? ? ? 类型所占的内存字节数,结果是无符号整数,因此可以把它看作是整型表达式。
????????正确答案:A
|