C语言

1.设有如下定义:
struct sk
{int a; float b;} data, *p;##
若有p=&data,则对data中的成员a的正确引用是( )。
A: (*p).data.a 
B: (*p).a 
C: p->data.a 
D: p.data.a
正确答案:B
解析:指针方面的知识,首先p是一个指针,(*p)则表示指向地址p的对象,用对象访问域就如此表示:(*p).a。

2.变量a所占内存字节数是( )。
union U
{char st[4];
int i;
long l;
};
struct A
{int c;
union U u;
}a;
A: 4
B: 5
C: 6
D: 8
正确答案:D
解析:共用体表示几个变量共用一个内存位置,在不同的时间保存不同的数据类型和不同长度的变量。在union中,所有的共用体成员共用一个空间,并且同一时间只能储存其中一个成员变量的值。 当一个共用体被声明时, 编译程序自动地产生一个变量, 其长度为联合中最大的变量长度的整数倍。 int c 4个字节 加上 union U u 4个字节 union U { char st[4]; int i;long 1;}; 中 三个都是4个字节 所以共同占用4个字节

3.设有以下说明语句 struct ex { int x ; float y; char z ;} example; 则下面的叙述中不正确的是
A. struct结构体类型的关键字
B. example是结构体类型名
C. x,y,z都是结构体成员名
D. struct ex是结构体类型名
正确答案:B
解析:example是 stuct ex的一个实例,也就是说examples是一个变量

4.能正确表示a和b同时为正或同时为负的逻辑表达式是()。
A.(a>=0||b>=0)&&(a<0||b<0) B.(a>=0&&b>=0)&&(a<0&&b<0)
C.(a+b>0)&&(a+b<=0) D.a*b>0
正确答案:D
解析:0是非正非负数

5:给出下面程序的代码:
byte[ ] array1, array2[ ];
byte array3[ ][ ];
byter[ ][ ] array4;
下列数组操作语句中不正确的是( )。
A.array2=array1
B.array2=array3;
C.array2=array4
D.array3=array4
答案:A
解析: 此题考查二维数组的定义,其中array1为一维数组,其余的为二维数组,选项A中,将一维数组的值赋给二维数组,出现错误。

6.单击命令按钮时,下列程序的运行结果为( )。  Private Sub Command1_Click()    Print MyFund(20,18)  End Sub  Public Function MyFund(m As Integer,n As Integer)As Integer   Do While m<>n    Do While m>n:m=m-n:Loop    Do While m<n:n=n-m:Loop   Loop MyFund=m  End Function
A. int a[2][ ]={ {1,0,1},{5,2,3};
B. int a[ ][3]={ {1,2,3},{4,5,6};
C. int a[2][4]={ {l,2,3},{4,5},{6} };
D. int a[ ][3]={ {1,0,1},{ },{l,1} };
答案;B
解析:本题考查对二维数组初始化知识点的掌握。在初始化语句时,需要注意下面几点:①所赋初值个数与数组元素的个数相同;②每行所赋初值个数与数组元素的个数不同时,系统将自动给该行其余的元素补初值0;③所赋初值行数少于数组行数时,系统将自动给后面各行的元素补初值0;④赋初值时省略行花括号对。在给二维数组赋初值时可以不用行花括号对。注意:选项A)中省略了第二维的大小,所以是错误的;选项C)超出了数组的定义范围,所以是错误的;选项D)在初始化赋值的时候出现了错误。

7.算法的时间复杂度是指_______。:
A)执行算法程序所需要的时间
B)算法程序的长度
C)算法执行过程中所需要的基本运算次数
D)算法程序中的指令条数
答案:C
评析:所谓算法的时间复杂度,是指执行算法所需要的计算工作量。

8.结构化程序设计主要强调的是_________。
A)程序的规模 B)程序的易读性
C)程序的执行效率 D)程序的可移植性
答案:B
评析:结构化程序设计主要强调的是结构化程序清晰易读,可理解性好,程序员能够进行逐步求精、程序证明和测试,以保证程序的正确性。

9.若要用下面的程序片段使指针变量p指向一个存储整型变量的动态存储单元
int *p;
p=_malloc(sizeof(im));
则应填入

A)int B)int C)(int) D)(int)
答案:D
评析:不论p是指向什么类型的指针变量,都可以通过强制类型转换的方法使之类型一致,强制类型转换的格式为(数据类型+)。

10.下面程序输出的结果是__________。
main()
{
int i=5,J=9,x;
x=(I == j?i:(j=7));
printf(”\n%d,%d”,I,J);
}
A)5,7 B)5,5 C)语法错误 D)7,5
答案:A
评析:条件表达式的一般形式为:表达式I?表达式2:表达式3;先求解表达式1,若为真则求解表达式2;若表达式l的值为假,则求解表达式3。本题中先判断i==j,不等,执行j=7;然后执行x=7。故本题为A。

11.若执行下面程序时从键盘上输入5,
main()
{
int x:
scanf(”%d”,&x);
if(x++>5)printf(”%d\n”,x);
else printf(”%d\n”,x–);
}
则输出是________。
A)7 B)6 C)5 D)4
答案:B
评析:根据c语言的语法,x++是在使用x之后,再将x的值加1,在if语句中,x的值为5,条件不成立,执行else后面的语句,因为x的值已经加1,为6,所以打印结果为6。

12…若有以下定义和语句:
int a[]={l,2,3,4,5,6,7,8,9,10},p=a;
则值为3的表达式是_________。
A)p+=2,
(p++) B)p+=2,*++p
C)p+=3,p++ D)p+=2,++p
答案:A
评析:引用一个数组元素,可以用:(1)下标法,如a[i]形式;(2)指针法,如
(a+i)或
(p+i)。数组的下标从0开始,值为3的数组元素是a[2]。B、c的内容为a[3],D将a[2]前自加,结果为4。

13.设a、b和c都是int型变量,且a=3、b=4、c=5,则下面的表达式中,值为0的表
达式是___________。
A)’a’&&’b’ B)a<=b C)a‖+c&&b-c D)!((a<b)&&!c‖1)
答案:D
评析z选项A:‘a’&&‘b’是字符a与b的相与,不为0;选项B:a<=b,由题中变量赋值可知,结果为1。选项c:a‖+c&&b-c,结果为1;选项D:!((a<b)&&!c‖1),运算结果为O。

14.以下程序运行后,输出结果是_________。
main()
{
char*d[]。{“ab”,”cde”};
printf(”%x”,d[1]);
}
A)cde B)字符c的ASCII码值
C)字符c的地址 D)出错
答案:C
评析:指针数组中的每一个元素都相当于一个指针变量。一维指针数组的定义形式为:类型名+数组名[数组长度],在本题main函数中定义指针数组d,它有两个元素,其初值分别是“ab”、“cde”的首地址。dB]的值为”cde”的首地址。%x是指以十六进制数形式输出整数。

15.设有如下程序
#include
main()
{
int**k,*j,i=100;
j=&i; k=&j;
printf(”%d\n”,**k);
}
上述程序的输出结果是________。
A)运行错误 B)100 C)i的地址 D)j的地址
答案:B
评析:j=&i,j的值就是i的地址,j=100,将j的地址赋给k,这时k=j,那么,k=*j,而1=100,所以k=100,最后的打印结果应当为100。

16.以下程序运行后,输出结果为________。
main()
{
int a[2][3]={1,3,5,7,9,1 1},*s[2],**pp,p;
s[0]=a[0],s[1]=a[1];
pp=s;
p=(int
)malloc(sizeof(int));
**pp=s[1][1];
p=*PP;
printf(”%d\n”,*p);
}
A)l B)7 C)9 D)1l
答案:C
评析:s是一个含有两个元素的指针数组,pp是一个指向指针变量的指针,s[O]是指向二维数组a行下标为0的元素的首地址,即a[0儿0]的地址,s[1]为a[1][0]的地址。pp的值为s[O]的地址。**pp=s[1][l]后,a[0][0]的值将被赋值为all][l]的值,执行p=*pp;后,p中将是s[0]的值,最后的输出语句将输出地址s[0]所指向的数据,即a[0][O]。

17.若有下面的说明和定义,则sizeof(struct aa)的值是__________。
struct aa
{
int rl;double r2;float r3:
union uu{char u1[5];long u2[2]}ua;
}mya;
A)30 B)29 C)24 D)22
答案:D
评析:结构体变量所占内存长度是各成员占的内存长度之和,每个成员分别占有自己的内存单元;共用体变量所占的内存长度等于最长的成员的长度。结构体变量aa中,成员r1占2个字节,r2占8个字节,r3古4个字节,共用体ua占8个字节,所以共占用2+8+4+8=22个字节。

18.下面程序的输出是 ( ) 。
main()
{int arr[10],i,k=O:
for(i=0;i<10;i++)
arr[i]=i;
for(I=1;i<4;i++)
k+=arr[I]+i;
printf(”%d\n”,k);}
答案:12
评析:本题通过第一个for循环将数组arr[O]-arr[9]分别赋值为0-9,通过第二个for循环的三次循环累加,求出结果为12,具体分析如下:
i=l:k=0+arr[1]+l即k=2:
i=2:k=2+arr[2]+2即k=6:
i=3:k=6+arr[3]+3即k=12;

19.若a=10,b=20,则表达式!(a ( ) 。
答案:0
评析:已知a=10,b=20,所以逻辑表达式a<b的值为true,即为1,在这个表达式前面有一个逻辑运算符!,表示反操作,所以整个语句的值应当为false,即为0。

20.有以下程序:
int fa(int x){return xx;}
int fb(int x){return x
x*x;}
int f(int(*f1)(),int(*f2)(),int x)
{return f2(X)-n(x);}
main()
{int i;i=f(fa,fb,2);printf(”%d\n”,i);}
程序运行后,输出结果是 ( ) 。
答案:4
评析:在主函数中调用函数f,函数f有三个参数,形参f1与f2分别是两个指向函数的指针。在f中执行r2(x)-f1(x),实际上是执行了fb(2).fa(2),故执行i=(fa,fb,2)后i的值为23-22=4。

21.下面程序的输出是 ( ) 。
main()
{enum em{eml=3,em2=1,em3};
char*aa[]={“AA”,”BB”,”CC”,”DD”};
primf(”%s%s%s\n”,aa[eml],aa[em2],aa[em3]);
}
答案:DDBBCC
评析:c语言对枚举的定义规定:在枚举中声明的各个枚举元素,如果没有明确指出某个枚举元素的值,它的上一个元素存在并有明确值的情况下,这个枚举元素的值为其上一个元素的值+1。
在本题中,没有明确说明枚举元素em3的值,则em3=em2+l=1+l=2,进而可知,在printf()打印函数中,要打印的数组元素是aa[3]、aa[1]、aa[2],因此最后的打印结果应当为“DDBBCC”。

22.若想通过以下输入语句使a=5.0,b=4,c=3,则输入数据的形式应该是 ( ) 。
int b,c;float a;
scanf(”%£%d,c=%d”,&a,&b,&C)
答案:5.0,4,c=3
评析:scanf(格式控制,地址表列),如果在“格式控制”字符串中除了格式说明以外还有其它字符,则在输入数据时应输入与这些字符相同的字符。所以此题中输入数据的形式是5.0;4,c=3。

23.下列程序的输出结果是 ( ) 。
int t(int x,int y,int cp,int dp)
{ cp=xx+yy;
dp=xx-yy;
}
main()
{ int a=4,b=3,c=5,d=6;
t(a,b,c,d);
printf(”%d%d\n”,c,d);
}
答案:5 6
评析:本题中a,b,c,d是实参,x,多,cp,dp是形参。c语言规定,实参变量对形参变量的数据传递是“值传递”,即单向传递,只由实参传给形参,而不能由形参传回来给实参。在内存中,实参单元与形参单元是不同的单元。在调用函数时,给形参分配存储单元,并将实参对应的值传递给形参,调用结束后,形参单元被释放,实参单元仍保留并维持原值。因此,程序的输出结果是5 6。

24.下面程序的输出结果是 ( ) 。
char b[]=”ABCD”;
main()
{
char b[30];
strcpy(&b[0],”GH”);
strcpy(&b[1],”GH”);
strcpy(&b[2],”GH”);
printf(”%s\n”,b);
}
答案:GGGH
评析:由于在函数main中定义了数组变量b,其将屏蔽全局变量b。对于一维数组变量,其值为一常数,等于数组首元素地址。strcpy(&b[0],“GH”),是将字符串。“GH”复制到数组b中从首元数开始的空间中,此是b中的字符串为“GH”;strcpy(&b[1],“GH”),是将字符串。“GH”复制到数组b中从第二个元素开始的空间中,此是b中的字符串为“GH”。执行第三次strcpy函数后,b中的字符串为”GGGH”。

25.以下对枚举类型名的定义中正确的是________。
A)enum a={one,two,three}; B)enum a{one=9,two=-1,three};
C)enum a={“one”,”two”,”three”}; D)enum a{“one”,”two”,”three”};
答案:B
评析:声明枚举类型用enum开头。例如:enum weekday(sun,mon,tue,wed,thu,fri,sat);
说明:1、在c编译中,对枚举元素按常量处理,同时可以改变他们的值。2、枚举值可以用来做判断比较。3、一个整数不能直接赋给一个枚举变量。

26.以下程序段给数组所有的元素输入数据,请选择正确答案填入:
#include
main()
{
int a[10],i=O;
while(i<l0)scanf(”%d”,________);
}
A)a+(i++) B)&a[i+l] C)a+i D)&a[++I]
答案:A
评析:a就是数组a的首地址,而a+x是数组中第x个元素的地址,。所以在四个选项中,选项B和c只能输入一个数据,选项D不能给a[O]输入数据,只有A可以完成给数组所有的元素输入数据的任务。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值