程序设计与数据结构练习题 附答案Word文档格式.docx
《程序设计与数据结构练习题 附答案Word文档格式.docx》由会员分享,可在线阅读,更多相关《程序设计与数据结构练习题 附答案Word文档格式.docx(56页珍藏版)》请在冰点文库上搜索。
![程序设计与数据结构练习题 附答案Word文档格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/3/a34be66d-c2dc-4b14-a26d-8237c23eecd9/a34be66d-c2dc-4b14-a26d-8237c23eecd91.gif)
11.设有inti=010,j=10;
则printf(“%d,%d\n”,++i,j--);
的输出是(B)。
A.11,10B.9,10C.010,9D.10,9
12.已知w=1,x=2,y=3,z=3,a=4,b=2;
则执行语句(a=w>
x)&
(b=y>
z);
后,a,b的值为(D)。
A.1和1B.0和0C.4和2D.0和2&
前一条件为假,无论后面什么情况结果都为假
13.定义如下变量关系,则下面语句的输出结果是(D)。
inti;
intx[3][3]={1,2,3,4,5,6,7,8,9};
for(i=0;
i++)printf("
%d"
x[0][2-i]);
A.159B.123C.357D.321
14.已知数组floatb[3][2];
该数组行下标的范围是(D)。
A.1—3B.0—3C.1—2D.0—2
15.下列语句中,正确的是(D)。
A.#definePI=3.14159B.include“stdio.h”C.defineM3D.#definePI3.14159
16.有如下程序,该程序段的输出结果是(B)。
voidmain(void)
{intn=5;
while(n>
2){n--;
printf(“%d”,n);
}
}
A.543B.432C.4321D.5432
17.下列四种数组定义,合法的数组定义是(A)。
A.chara[]="
hello"
;
B.inta[4]={4,3,2,1,0};
C.chara="
;
D.chara[4]="
18.设p1和p2均为指向int型的指针变量,k为int型变量,下列不正确的赋值语句是(C)。
A.k=*p1+*p2;
B.k=*p1*(*p2)C.p2=kD.p1=p2
19.有如下程序,该程序的输出结果是(C)。
{chars[]=“ABCD”,*p;
for(p=s+1;
p<
=s+3;
p++)
printf(“%c\n”,*p);
A.ABCB.AC.BD.BCD
BCBCCD
CCDD
20.对于C程序的函数,下列叙述中正确的是(A)。
A.函数的定义不能嵌套,但函数调用可以嵌套B.函数的定义可以嵌套,但函数调用不能嵌套
C.函数的定义和调用均可以嵌套D.函数的定义和调用均不能嵌套
21.设x为整型变量,p是指向整型的指针变量,则下列赋值表达式正确的是(A)。
A.p=&
xB.p=xC.*p=&
xD.*p=*x
22.函数定义时,形参是整型变量,则函数调用时,实参不可以是(C)。
A.整型常量B.字符型常量C.数组名D.整型表达式
23.以下程序的输出结果是(B)。
{inta[10]={1,2,3,4,5,6,7,8,9,10},*p=&
a[3],*q=p+2;
printf(“%d\n”,*p+*q);
A.16B.10C.8D.6
24.设有如下定义,若有p=&
ab;
则对ab中成员项的正确引用是(B)。
structss
{inta;
floatb;
}ab,*p;
A.(*p).ab.aB.p->
aC.p->
ab.aD.p.ab.a
25.若要对E盘上的一个非空文件“w1.dat”进行修改,正确的打开语句是(D)。
A.fp=fopen(“w1.dat”,“r+”);
B.fp=fopen(“w1.dat”,“w+”);
C.fp=fopen(“E:
\\w1.dat”,“r+”);
D.fp=fopen(“E:
\\w1.dat”,“w+”);
26.C语言程序的三种基本结构是(A)。
A.顺序结构,分支结构,循环结构B.递归结构,循环结构,转移结构
C.嵌套结构,循环结构,顺序结构 D.递归结构,分支结构,顺序结构
27.能正确表达逻辑关系“0<
a<
1或0<
b<
1”的c语言表达式是(A)。
A.(0<
a)&
(a<
1)||(0<
b)&
(b<
1)B.((0<
a)||(a<
1))&
((0<
b)||(b<
1))
C.(0<
1)&
(0<
1)D.(0<
1)
28.设x和y为浮点型变量,则以下(C)语句是正确的赋值语句。
A. x=&
yB.x*x=yC.x=x+10*yD.*x=y+2
29.设inta=3;
下列哪一个表达式的值等于0(D)。
A.aB.!
a||aC.a>
=aD.a%=a
30.定义如下变量和数组,则下面程序段落的输出结果是(A)。
inti;
intx[3][3]={0,1,2,3,4,5,6,7,8};
for(i=0;
printf(“%d”,x[i][2-i]);
A.246 B.036 C.048 D.258
31.以下叙述错误的是(D)。
A.一个C源程序可由一个或多个函数组成B.一个C源程序必须包含一个main函数
C.C程序的基本组成单位是函数D.在C程序中,注释说明只能位于一条语句的后面
32.C语言中运算对象必须是整型的运算符是(A)。
A.%=B./C.=D.〈=
33.有如下程序,程序运行后的输出结果是(B)。
{unsignedintx=0xffff;
printf(“%u\n”,x);
A.-1B.65535C.32767D.0xFFFF
34.若有代数式
(其中e仅代表自然对数的底数,不是变量),则以下能够正确代表该代数式的C语言表达式是(C)。
A.sqrt(abs(n^x+e^x)B.sqrt(fabs(pow(n,x)+pow(x,e)))
C.sqrt(fabs(pow(n,x)+exp(x)))D.sqrt(fabs(pow(x,n)+exp(x)))
35.字符串“\t12\x42\\abcd”的长度是(B)。
A.14B.9C.15D.20
36.以下叙述中错误的是(D)。
A.计算机不能直接执行用C语言编写的源程序
B.C语言经C编译程序编译后,生成后缀为.obj的文件是二进制文件
C.后缀为.obj的文件,经连接后生成后缀为.exe的文件是二进制文件
D.后缀为.obj和.exe的二进制文件都可以直接运行
37.以下选项中,与k=x++;
完全等价的表达式是(B)。
A.x=x+1;
k=x;
B.k=x;
x=x+1;
C.k=x+1;
D.k+=x+1;
38.以下叙述中正确的是(C)。
A.break语句只能用于switch语句中
B.continue语句的作用是:
使程序的执行流程跳出包含它的所有循环
C.break语句只能用在循环体内和switch语句体内
D.在循环体内使用break语句和continue语句的作用相同
39.判断字符型变量ch是否为大写英文字母的表达式为(B)。
A.‘A’<
=ch<
=‘Z’B.ch>
=‘A’&
ch<
=‘Z’C.ch>
‘a’&
=‘z’D.ch>
=‘A’||ch<
=‘Z’
40.若表达式(m)?
a++:
a--,则表达式m和(B)等价。
A.m==0B.m!
=0C.m=0D.m=1
41.在c语言中,运算对象的逻辑值“真”用(B)表示。
A.falseB.非0C.0D.负数
42.已知函数原型声明为:
char*www(chara,charb);
该函数的类型为(A)。
A.指向字符型的指针B.字符型C.整型D.指向整型的指针
43.设int类型的数据长度为2字节,则该类型数据的取值范围是(D)。
A.0至65536B.0至65535C.-32767至32768D.-32768至32767
44.inta,*p,**w;
p=&
a,w=&
p;
取a的值的表达式为(D)。
A.&aB.&*pC.**pD.**w
45.C语言程序的基本单位是(A)。
A.函数B.标识符C.表达式D.语句
46.判断字符型变量ch的值是否为大写英文字母的表达式为(B)。
A.‘A’<
=’Z’B.ch>
=’A’&
=’Z’C.ch>
’a’&
=’z’D.ch>
=’A’||ch<
=’Z’
47.已知w=3,x=2,y=3,z=3,a=4,b=2;
x)||(b=y>
z);
后,a,b的值为(C)。
A.1和1B.0和0C.1和2D.4和2
48.若有定义语句inta[]={1,2,3,4,5,6,7,8,9,10},*p=a;
值为8的数组元素的正确表示为(D):
A.a[8]B.a+7C.p+7D.*(p+7)
49.下列程序运行结果是(A)。
#defineA2
#defineAAA+A/2
voidmain(void)
{
printf(“%d,”,AA);
printf(“%d\n”,5*AA);
A.3,11B.3,15C.2,10D.8,40
50.若有如下定义,则对ex中的a成员的正确引用是(B)。
structsk{inta;
}ex,*p=&
ex;
A.(*p).ex.aB.p->
aC.p->
ex..aD.p.ex.a
二、填空题
1.在内存中存储一个字符‘a’占用___1___个字节,
而存储字符串”abcdef”则占用___7___个字节。
2.表达式4/5的值为__0__。
3.设x=4.5,a=7,y=3.4,表达式x+a%3*(int)(x+y)%2/4的值为_4._。
4.设a=14,执行a+=a-=a*=a后,a=__0_。
5.设x=y=z=6,执行x=(y>
z)?
x+2:
x-2;
后,x=__4__。
。
6.getchar()函数用于输入_字符_,而gets()函数则用于输入_字符串__。
7.设有定义语句:
charww[20]=”\t\\wab\n”;
则表达式:
strlen(ww)的值是_6。
8.设有定义语句:
charstr[7]=”abcdef”,则数组元素str[2]中的字符是__c__,数组元素str[6]中的字符是_\0___。
9.函数中的形参和调用时的实参都是变量时,传递方式为_值传递__;
都是数组名时,传递方式为__地址传递__。
10.设有char*p=”12345”,则printf(“%s”,p)的输出是_12345__;
而printf(“%c”,*p)的输出则是__1__。
11.若s是int型变量,且s=7,则表达式:
s/2+(s+1)%2的值为__3_。
12.C语言中,以0x_打头的int常数是十六进制。
13.有说明语句chars=‘\102’;
S包含了__1___个字符。
14.有数学表达式sinx+
-6x,
写出其对应的C语言的表达式___sin(x)+sqrt(x)-6*x__。
15.有定义语句:
inta[][3]={{0},{1},{2}};
则数组元素a[1][2]的值是0。
16.若程序中使用了函数strlen(),则必须包含的头文件名为__string.h__。
17.有如下程序,该程序的输出结果是a=2,b=1。
voidmain(void)
intx=1,a=0,b=0;
switch(x)
{case0:
b++;
case1:
a++;
case2:
a++,b++;
printf("
a=%d,b=%d\n"
a,b);
18.若a函数中调用了b函数,而b函数又调用了a函数,
这种调用称为_递归___调用。
19.函数调用时,若形参和实参均为数组名时,传递方式为_地址传递_。
20.若有以下定义语句,则输出的结果是__4__。
chars1[]=“abcdef”,*s2=“1234”;
printf(“%d\n”,strlen(strcpy(s1,s2)));
21.若宏定义为:
#definey(x)2+x
则表达式a=4+3*y
(2)的值为12。
22.设有以下语句:
staticinta[4][2]={1,2,3,4,5,6,7,8};
int(*p)[2];
p=a;
则*(*(p+2)+1)的值为6。
23.在turboC中,int型数据占2字节,则定义
structnode
{
charx[10];
inty;
union{floata;
longb;
}ab;
}t;
后,sizeof(t)=16。
24.设有一个名为“ww1.c”的C程序,
其主函数为main(intargc,char*argv[]),如果在执行时,输入的命令行为:
ww1aabbcc↙
则形式参数argc的值是__4__。
25.执行下列程序段后,(**q-1)的值为__99__。
inta,*p,**q;
a=100;
p=&
a;
q=&
26.C语言源程序中主函数名由系统规定为__main___,程序员是不能改变的。
27.有数学表达式:
-3,其C语言表达式为___sqrt(x)-3____。
28.已知函数定义为:
intstat(inta,float*p){......}
则此函数的两个参数类型分别是整型、指向浮点型指针。
29.设有数组a[10];
则首地址可以写成___a或&
a[0]_
数组元素a[3]的地址可以写成__&
a[3]或a+3_。
30.要使以下程序段中的函数调用语句printf(“***”);
执行10次,应在①处填入整数__19或20__。
for(i=1;
=___①___;
i+=2)printf(“***”);
31.用只读方式打开e:
\目录下的名为“aa.dat”的文件,正确的打开
语句为FILE*fp;
fp=_fopen(“e:
\\aa.dat”,”r”)___。
32.判断两个浮点型变量x和y是否相等一般用:
if(fabs(x–y)<
1e-6)…。
33.已知赋值语句zhang.year=1985;
可判断zhang是结构体类型的变量。
三、程序分析题
1.下面程序的运行结果为5,6,5,0
#include<
stdio.h>
voidmain()
{inta,b,c,d;
a=4;
b=6;
c=++a;
d=(c<
a&
c<
b);
printf("
%d,%d,%d,%d"
a,b,c,d);
2.下面程序的运行结果为c=1\d=0.
voidfun(intx,inty)
inta,b;
floatd;
a=x+14;
b=y-4;
d=(float)(b/a);
printf("
d=%f\n"
d);
intb=9,a=6,c;
c=b/a;
c=%d\n"
c);
fun(a,b);
3.设从键盘上输入HelloWorld!
下面程序的运行结果为helloworld!
voidmain(void)
{charss[20];
gets(ss);
for(i=0;
ss[i]!
='
\0'
i++)
if(ss[i]>
A'
&
ss[i]<
Z'
)
ss[i]=ss[i]+32;
puts(ss);
4.下面程序的运行结果为b=-10\i=33,b=0\i=75,b=33\
inti=1;
voidother(void);
{intb=-10;
b=%d\n"
b);
other();
i=i+10;
voidother()
{staticintb;
i=i+32;
i=%d,b=%d\n"
i,b);
b=i;
5.下面程序的运行结果为6,45\2,98\
{inta[10]={78,89,98,66,54,76,45,82,62,95};
intka,ki,j;
ka=ki=0;
for(j=1;
j<
10;
j++)
{if(a[ki]>
a[j])ki=j;
if(a[ka]<
a[j])ka=j;
printf(“%d,%d\n%d,%d\n”,ki,a[ki],ka,a[ka]);
6.运行时假定键盘输入数据为:
12345678910下面程序的运行结果为13579
voidmain(void)
{inti,a[10];
int*p;
p=a;
for(i=0;
i<
10;
i++)
scanf(“%d”,p++);
for(p=a;
p<
a+10;
p++)
if(*p%2)printf(“%3d”,*p);
7.下面程序的运行结果为10,10\101\11(要求注明输出格式!
inta=10,b=11;
intc=0,d=0;
%5d,%5d\n"
a++,--b);
%5d"
a&
!
a);
%d\n"
c);
d+=a);
8.下面程序的运行结果为1+1=21+2=31+3=4\2+2=42+3=5\3+3=6
inti,j;
for(i=1;
i++)
for(j=i;
j<
j++)
printf(“%d+%d=%d”,i,j,i+j);
printf(“\n”);
9.下面程序的运行结果为a=1,b=-5,c=0\a=2,b=2,c=10\a=3,b=-5,c=2
#include<
inta=1,b;
voidfun(void);
{staticintc;
intb=-5;
a=%d,b=%d,c=%d\n"
a,b,c);
fun();
a+=1;
c+=2;
voidfun()
{intc=10;
b+=2;
10.下面程序的运行结果为ABCD\BCD\CD\D
#include<
charstr[5],*p;
inti;
for(i=0;
4;
str[i]=’A’+i;
str[i]='
;
p=str;
while(p<
str+4)
{printf("
%s\n"
p);
p++;
}