专升本C语言联大复习题答案Word下载.docx
《专升本C语言联大复习题答案Word下载.docx》由会员分享,可在线阅读,更多相关《专升本C语言联大复习题答案Word下载.docx(29页珍藏版)》请在冰豆网上搜索。
20.以下符合C语言语法的赋值表达式是:
A)d=9+e+f=d+9B)d=9+e,f=d+9
C)d=9+e,e++,d+9D)d=9+e++=d+7
21.在C语言中,要求运算数必须是整型的运算符是:
A)/B)>
C)!
=D)%
22.若有代数式
,则正确的表达式是:
A)sqrt(fabs(pow(y,x)+log(y)))
B)sqrt(abs(pow(y,x)+log(y)))
C)sqrt(fabs(pow(x,y)+log(y)))
D)sqrt(abs(pow(x,y)+log(y)))
解释:
ABS是绝对值函数的输入参数类型为整型,fabs函数的输入参数类型为浮点型。
23.若有定义:
inta=7;
floatx=2.5,y=4.7;
则表达式(A)
x+a%3*(int)(x+y)%2/4的值是:
A)2.500000B)2.75000C)3.500000D)0.000000
24.若有定义:
intk=7,x=12;
则值为3的表达式是:
A)x%=(k%=5)B)x%=(k-k%5)
C)x%=k-k%5D)(x%=k)-(k%=5)
25.若有定义:
charw;
intx;
floatydoublez;
,则表达式w*x+z-y的类型是:
A)charB)intC)floatD)double
26.printf(“%d,%d,%d”,a,b,c);
与printf(“%d,%d,%d”,(a,b,c),b,c);
的区别。
27.解析:
前面打印a,b,c后面打印c,b,c。
逗号表达式,值为最后一项的值。
28.若intx=5,n=5;
,则计算表达式x+=n++后,x、n的值分别为【10】和【6】。
29.若inta=6;
,则计算表达式a+=a-=a*a后,a的值是【-60】。
30.若inta;
则表达式(a=4*5,a*2),a+6的值是【26】。
31.已有如下定义,若要求给a1、a2、c1、c2输入的值为10,20,A和B,当从第1列开始输入数据时,正确的输入方式是_______.(注意:
<
CR>
表示回车,└┘表示空格)
inta1,a2;
charc1,c2;
scanf(“%d%c%d%c”,&
a1,&
c1,&
a2,&
c2);
A)10A└┘20B<
B)10└┘A└┘20└┘B<
C)10A20B<
D)10A20└┘B<
32.以下程序输出的结果是:
__(D)____。
(注意:
└┘表示空格)
main()
{printf(“\n*s1=%15s*”,”ChinaBeijing”);
printf(“\n*s2=%-5s*”,”chi”);
}
A)*s1=ChinaBeijing└┘└┘└┘*B)*s1=ChinaBeijing└┘└┘└┘*
*s2=**chi**s2=chi└┘└┘
C)*s1=*└┘└┘ChinaBeijing*D)*s1=└┘└┘└┘ChinaBeijing*
*s2=└┘└┘chi**s2=chi└┘└┘*
33.以下程序的输出结果是:
____。
#include<
stdio.h>
main()
{inta=252;
printf("
a=%oa=%#o\n"
a,a);
a=%xa=%#x\n"
答案:
a=374a=0374
a=fca=0xfc
34.判断字符变量ch中是否为字母’y’和’n’。
【分析】对这个判断应当明确是否也包含大写字母。
一般情况下应当包含,因此,只要ch中存储的是字母’Y’、’y’、’N’和’n’之一,命题都成立,显然,这是一种逻辑“或”的关系。
【结论】对应的逻辑表达式为:
ch==’Y’||ch==’y’||ch==’N’||ch==’n’
35.判断数据x是否在区间[0,60]内。
包含[]不包含边界()
【分析】x在区间[0,60]内,既要满足x>
=0,又要满足x<
=60,这是一种逻辑“与”的关系。
这里的“既……又要……”实际表达了同时成立的意图。
x>
=0&
&
x<
=60
思考:
为什么不能写成:
0<
=x<
=60?
36.x和y都等于100
【分析】若使命题成立,既要满足x是100,又要满足y是100。
x==100&
y==100
37.判断a是否为3、5、7的公倍数。
【分析】a为3、5、7的公倍数的条件是,a能被3整除且a能被5整除且a能被7整除,这里的“且”实际是同时成立的意思,因此是逻辑“与”的关系。
a%3==0&
a%5==0&
a%7==0
a%(3,5,7)==0?
38.判断a是否能被3、5、7中的任意一个数除尽。
【分析】a能被3、5、7中任一个数整除,则条件成立,也就是a能被3整除或a能被5整除或a能被7整除。
这里应该使用逻辑“或”。
a%3==0||a%5==0||a%7==0
a%(3||5||7)==0或者a%3==0&
a%7==0?
39.判断变量year表示的年份是否闰年。
【分析】闰年的规律是:
年份能被4整除,但不能被100整除;
或者年份能被400整除。
这个规律已经表明了逻辑关系。
“年份能被4整除,但不能被100整除”可以用year%4==0&
year%100!
=0表示;
而“年份能被400整除”可以用year%400==0表示。
【结论】判断年份year是闰年的完整的逻辑表达式为:
(year%4==0)&
(year%100!
=0)||(year%400==0)
40.在C语言中,表示逻辑“真”用【!
0】。
41.能表示“当x取值在[1,10]和[200,210]为真,否则为假”的表达式为:
A)(x>
=1)&
(x<
=10)&
(x>
=200)&
=210)
B)(x>
=1)||(x<
=10)||(x>
=200)||(x<
C)(x>
D)(x>
42.判断字符型变量ch是否大写字母的正确表达式是:
A)‘A’<
=ch<
=‘Z’B)(ch>
=‘A’)&
(ch<
=‘Z’)
C)(ch>
=‘Z’)D)(ch>
=‘A’)AND(ch<
43.已知x=43,ch=‘A’,y=0;
则表达式(x>
=y&
ch<
‘B’&
!
y)的值是:
A)0B)语法错C)1D)“假”
44.以下不正确的if语句形式是(C)
A)if(x>
y&
x!
=y);
B)if(x==y)x+=y;
C)if(x!
=y)scanf(“%d”,&
x)elsescanf(“%d”,&
y);
D)if(x<
y){x++;
y++;
}
45.已知intx=10,y=20,z=30;
以下语句执行后x,y,z的值是(B)
if(x>
y)
z=x;
x=y;
y=z;
A)x=10,y=20,z=30B)x=20,y=30,z=30
C)x=20,y=30,z=10D)x=20,y=30,z=20
46.若w=1,x=2,y=3,z=4,则条件表达式w<
x?
w:
y<
z?
y:
z的值是;
A)4B)3C)2D)1
47.已知A=7.5,B=2,C=3.6,表达式A>
B&
C>
A||A<
B的值是【0】。
48.条件“2<
x<
5或x<
-10”的C语言表达式为【x>
2&
5||x<
-10】。
49.已知inta=3.b=4,c=5;
则表达式!
(a+b)+c-1&
b+c/2的值是【1】。
50.以下程序如果输入一个小写字母,则将其循环变为其后的第5个字母输出,如a变为f输出,z变为e输出。
#include”stdio.h”
{
charch;
ch=getchar();
if(ch>
=‘a’&
=‘u’)【ch+=5】;
elseif(ch>
=‘v’&
=‘z’)【ch=‘a’+ch-’v’】;
putchar(ch);
51.若程序运行时输入35/<
回车>
,则以下程序运行结果是【0.60000】。
floatx,y;
doubler;
scanf(“%f%f%c”,&
x,&
y,&
ch);
switch(ch)
{
case‘+’:
r=x+y;
break;
case‘-’:
r=x-y;
case‘*’:
r=x*y;
case‘/’:
r=x/y;
printf(“%f\n”,r);
52.设有以下程序段,则:
intx=0,s=0;
while(!
x!
=0)s+=++x;
printf(“%d”,s);
A)运行程序段后输出0B)运行程序段后输出1
C)程序段中的控制表达式是非法的D)程序段执行无限次
53.下面程序段的运行结果是:
x=y=0;
while(x<
15)y++,x+=++y;
printf(“%d,%d”,y,x);
A)20,7B)6,12C)20,8D)8,20
解析:
x=0y=1y=2x=2
X=2y=3y=4x=6
X=6y=4y=6x=12
X=12y=7y=8x=20
54.以下程序段能计算1×
2×
3×
…×
10的程序段是:
A)do{i=1;
s=1;
s=s*i;
i++;
}while(i<
=10);
B)do{i=1;
s=0;
C)i=1;
do{
D)i=1;
do{
55.以下不是无限循环的语句是(A)
A)for(y=0,x=1;
x>
++y;
x=i++)i=x;
B)for(;
;
x=i++);
C)while
(1){x++;
D)for(i=0;
i--)sum+=i;
56.以下是死循环的程序段是:
A)for(i=0;
)
{if(++i%2==0)continue;
if(++i%3==0)break;
B)i=32767;
do{if(i<
0)break;
}while(++i);
C)for(i=1;
)if(++i<
10)continue;
D)i=1;
while(i--);
57.下面程序段是从键盘输入的字符中统计数字字符的个数,用换行符结束输入,请填空。
intn=0,c;
c=getchar();
while(【c!
=‘\n’】)
{if(【c>
=‘0’&
c<
=‘9’】)n++;
58.下面的程序段中循环体运行的次数是【3】
a=10;
b=0;
do{b+=2;
a-=b+2;
}while(a>
=0);
59.下面程序段的运行结果是【**】
x=2;
do{printf(“*”);
x--;
}while(!
x==0);
60.以下程序运行后的输出结果是(B)
main()
{intx[3]={2,3,5},i,s=0;
for(i=1;
i<
=3;
i++)
{s+=x[(i+5)%3];
%d"
s);
A)2615B)2510
C)61510D)63060
61.有如下定义和语句,执行完后,变量p和i的值分别为(C)
inti,p;
for(i=7,p=1;
i>
0;
i-=3)
p=p*i;
A)18,0B)2,-1
C)28,-2D)15,随机
62.以下函数的功能是(C)
intfindmax(inta,intb)
intc;
for(c=a;
c--)
if(a%c==0&
b%c==0)break;
returnc;
}
分析:
for循环里没有结束条件,只有break可以结束循环。
If为真才能够执行break语句。
两侧都必须为真才可以IF为真。
也就是ab除c都可以整除才能值为0,0==0,为1.
c为最大公约数。
想一想这个求的是什么
for(c=a;
c++)
if(c%a==0&
a%b==0)break;
最小公倍数。
A)求a,b较大者
B)求a,b较小者
C)求a,b的最大公约数
D)求a,b的最小公倍数
63.若有定义intaa[10];
则对数组aa元素的正确引用是:
A)aa[10]B)aa[3,5]C)aa(5)D)a[10-10]
64.以下能对一维数组a进行初始化的语句是:
A)inta[10]=(0,0,0,0);
B)inta[10]={};
C)inta[]={0};
D)inta[10]={10*1};
65.以下对二维数组正确的定义是:
A)inta[3][];
B)floata(3,4);
C)doublea[1][4];
D)floata(3)(4);
66.若有定义:
inta[3][4];
则对数组元素正确的引用是:
A)a[2][4]B)a[1,3]C)a[1+1][0]D)a
(2)
(1)
67.以下能对二维数组初始化的语句是:
(BD)
A)inta[2][]={{1,0,1},{5,2,3}};
B)inta[][3]={{1,2,3},{5,2,3}};
C)inta[2][4]={{1,2,3},{4,5},{6}};
D)inta[][3]={{1,0,1},{},{5,2,3}};
68.若有定义:
doublex[3][5];
则x数组中,行下标的下界是【0】,列下标的上界是【4】。
69.若有定义:
inta[3][4]={{1,2},{0},{4,6,8,10}};
则a[1][2]的值是【0】,a[2][1]的值是【6】。
70.以下程序以每行4个数据的形式输出a数组元素,请填空。
#defineN20
{inta[N],i;
for(i=0;
i<
N;
i++)scanf(“%d”,【&
a[i]】);
i++)
{if(【i%4==0】)【printf(“\n”);
】
printf(“%3d”,a[i]);
71.以下程序运行后的输出结果是(C)
{
intx[3][3]={{1,2,3},{11,12,13},{21,22,23}};
inti,j;
for(i=0,j=3;
3;
i++,j--)
x[2-i][j-1]);
A)11121B)31323
C)23122D)11223
72.设有定义语句:
chara[【】]=”ABCD”;
,如果程序中有语句
strcat(a,”edfg”);
那么,在【】中所填写的数字应当是(B)
A)大于等于11B)至少12C)11D)可以不填数字
strcat把后面字符串添加到前面字符串的结尾处(覆盖前面字符串结尾处的'
\0'
)
73.凡是函数中为指明存储类别的局部变量,其隐含的存储类别都是(A)。
A)自动(auto)B)静态(static)
C)外部(extern)D)寄存器(register)
74.以下不正确的说法是(D)。
A)不同函数中可以使用相同名称的变量
B)形式参数是局部变量
C)在函数内定义的变量值在本函数范围内有效
D)在函数内的复合语句中定义的变量在函数内有效
75.若用一维数组名作为函数的实参,则以下正确的说法是(C)。
A)必须在主函数中说明此数组的大小
B)实参的数组类型与形参数组类型可以不匹配
C)在被调函数中,不需要考虑形参数组的大小
D)实参数组名必须与形参数组名一致。
76.若用数组名作为函数调用的实参,传给形参的是(A)。
A)数组的首地址B)数组第1个元素的值
C)数组中全部元素的值D)数组元素的个数
77.以下程序的运行结果是()。
{inta=2,i;
i++)printf(“%4d”,f(a));
f(inta)
{intb=0;
staticintc=3;
b++;
c++;
returna+b+c;
A)777B)71013
B)7911D)789
78.在C语言中,一般函数由两部分组成,它们是【函数头】和【函数体】。
79.下面add函数的功能是返回两个数的和,函数中错误的部分是【void】,改正后应为【float】。
80.voidadd(floata,floatb)
{floatc;
c=a+b;
下面求xy的pow函数中的空应当如何填?
intpow(intx,inty)
{intj;
for(【j=1】;
【y>
0】;
【y--】)j=j*x;
returnj;
81.执行以下程序后,a的值为【①C】,b的值为【②C】。
{inta,b,k=4,m=6,*p1=&
k,*p2=&
m;
a=p1==&
b=(-*p1)/(*p2)+7;
a=%d\n"
a);
b=%d\n"
b);
【①】A)-1B)1C)0D)4
【②】A)5B)6C)7D)10
82.已有定义:
intk=2;
int*ptr1,*ptr2;
,且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是(B)。
A)k*ptr1+*ptr2B)ptr2=k;
C)ptr1=ptr2;
D)k=*ptr2*(*ptr1);
83.设char*s=“\ta\018bc”;
,则指针s指向的字符串所占的字节数是(D)。
A)9B)5C)6D)7
如果char*s=“\ta\017bc”就是6
84.以下正确的程序段是(C)。
A)charstr[20];
B)char*p;
scanf(“%s”,&
str);
scanf(“%s”,p);
C)charstr[20];
D)charst