专升本C语言联大复习题答案.docx
《专升本C语言联大复习题答案.docx》由会员分享,可在线阅读,更多相关《专升本C语言联大复习题答案.docx(35页珍藏版)》请在冰点文库上搜索。
专升本C语言联大复习题答案
2021年C语言升本复习题〔重要〕
1.以下四个选项中哪个不是关键字〔C〕
A)whileB)switchC)ReturnD)goto
2.以下四个选项中哪个是关键字〔D〕
A)_whileB)switch1C)ReturnD)goto
3.以下四个选项中哪个是正确的标识符〔C〕
A)whileB)switchC)ReturnD)goto
4.以下四个选项中哪个不是正确的标识符〔A〕
A)1whileB)_switchC)ReturnD)_2goto
5.以下四组选项中,均不是C语言关键字的是:
〔A〕
A)defineB)getcC)includeD)while
IFcharscanfgo
typeprintfcasepow
6.下面四组选项中,均是不合法的用户标识符的选项是:
(都不是合法的标识符)〔C〕
A)AB)floatC)b-aD)_123
P_01a0gototemp
do_AintINT
7.以下说法正确的选项是:
〔D〕
A)C程序由define和主函数组成
B)C程序由include和主函数组成
C)C程序只由主函数组成
D)C程序由主函数和其他函数组成
8.以下说法错误的选项是:
〔B〕
A)C程序可以包含多个函数。
B)C程序由include命令和主函数组成。
C)任何C程序都有一个主函数。
D)C程序由主函数和其他函数组成。
9.C源程序的根本单位是【函数】。
10.一个C源程序至少包含一个【主函数】。
11.C源程序的注释由【/**/】和【//】构成。
12.构造化程序设计主要由【顺序语句】、【分支语句】和【循环语句】语句构造构成。
13.下面不正确的字符串常量是〔A〕
A)’abc’B)〞12’12〞C)"0〞D)"〞
14.下面四组选项中,均是正确的八进制或十六进制数的选项是:
〔C〕
A)-10B)0abcdC)0010D)0a12
0x8f-017-0x11-0x123
-0110xc0xf1-0xa
15.下面四组选项中,均是合法转义字符的选项是:
〔A〕
A)‘\’’B)‘\’C)‘\018’D)‘\\0’
‘\\’‘\017’‘\f’‘\101’
‘\n’‘\"’‘xab’‘x1f’
16.下面四组选项中,均是合法整型常量的选项是:
〔A〕
A)160B)-0xcdfC)-01D)-0x48a
-0xffff01a986,0122e5
0110xe06680x
17.在C语言中,根本数据类型除了单精度和双精度类型外,还有【int】【long】【char】。
18.在C语言中,float型变量在内存占【4】字节,double型变量在内存占【8】字节。
19.假设有代数式
那么不正确的表达式是:
〔C〕
A)a/b/c*e*3B)3*a*e/b/c
C)3*a*e/b*cD)a*e/c/b*3
20.以下符合C语言语法的赋值表达式是:
〔B〕
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语言中,要求运算数必须是整型的运算符是:
〔D〕
A)/B)>C)!
=D)%
22.假设有代数式
,那么正确的表达式是:
(A)
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的表达式是:
(D)
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的类型是:
(D)
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列开场输入数据时,正确的输入方式是_______.(注意:
表示回车,└┘表示空格)
inta1,a2;charc1,c2;
scanf("%d%c%d%c〞,&a1,&c1,&a2,&c2);〔C〕
A)10A└┘20BB)10└┘A└┘20└┘B
C)10A20BD)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
main()
{inta=252;
printf("a=%oa=%#o\n",a,a);
printf("a=%xa=%#x\n",a,a);
}
答案:
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%5==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]为真,否那么为假〞的表达式为:
〔C〕
A)(x>=1)&&(x<=10)&&(x>=200)&&(x<=210)
B)(x>=1)||(x<=10)||(x>=200)||(x<=210)
C)(x>=1)&&(x<=10)||(x>=200)&&(x<=210)
D)(x>=1)||(x<=10)&&(x>=200)||(x<=210)
42.判断字符型变量ch是否大写字母的正确表达式是:
(C)
A)‘A’<=ch<=‘Z’B)(ch>=‘A’)&(ch<=‘Z’)
C)(ch>=‘A’)&&(ch<=‘Z’)D)(ch>=‘A’)AND(ch<=‘Z’)
43.x=43,ch=‘A’,y=0;那么表达式(x>=y&&ch<‘B’&&!
y)的值是:
(C)
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(x45.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,那么条件表达式wyz的值是;〔D〕
A)4B)3C)2D)1
47.A=7.5,B=2,C=3.6,表达式A>B&&C>A||A
C>B的值是【0】。
48.条件"22&&x<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〞
main()
{
charch;
ch=getchar();
if(ch>=‘a’&&ch<=‘u’)【ch+=5】;
elseif(ch>=‘v’&&ch<=‘z’)【ch=‘a’+ch-’v’】;
putchar(ch);
}
51.假设程序运行时输入35/<回车>,那么以下程序运行结果是【0.60000】。
main()
{
floatx,y;
charch;
doubler;
scanf("%f%f%c〞,&x,&y,&ch);
switch(ch)
{
case‘+’:
r=x+y;break;
case‘-’:
r=x-y;break;
case‘*’:
r=x*y;break;
case‘/’:
r=x/y;break;
}
printf("%f\n〞,r);
}
52.设有以下程序段,那么:
〔B〕
intx=0,s=0;
while(!
x!
=0)s+=++x;
printf("%d〞,s);
A)运行程序段后输出0B)运行程序段后输出1
C)程序段中的控制表达式是非法的D)程序段执行无限次
53.下面程序段的运行结果是:
〔D〕
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的程序段是:
〔C〕
A)do{i=1;s=1;
s=s*i;i++;
}while(i<=10);
B)do{i=1;s=0;
s=s*i;i++;
}while(i<=10);
C)i=1;s=1;
do{
s=s*i;i++;
}while(i<=10);
D)i=1;s=0;
do{
s=s*i;i++;
}while(i<=10);
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.以下是死循环的程序段是:
〔C〕
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++;
c=getchar();
}
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];
printf("%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元素的正确引用是:
〔D〕
A)aa[10]B)aa[3,5]C)aa(5)D)a[10-10]
64.以下能对一维数组a进展初始化的语句是:
〔D〕
A)inta[10]=(0,0,0,0);B)inta[10]={};
C)inta[]={0};D)inta[10]={10*1};
65.以下对二维数组正确的定义是:
〔C〕
A)inta[3][];B)floata(3,4);
C)doublea[1][4];D)floata(3)(4);
66.假设有定义:
inta[3][4];,那么对数组元素正确的引用是:
〔C〕
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
main()
{inta[N],i;
for(i=0;ifor(i=0;i{if(【i%4==0】)【printf("\n〞);】
printf("%3d〞,a[i]);}
}
71.以下程序运行后的输出结果是(C)
main()
{
intx[3][3]={{1,2,3},{11,12,13},{21,22,23}};
inti,j;
for(i=0,j=3;i<3;i++,j--)
printf("%d",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.以下程序的运行结果是〔〕。
main()
{inta=2,i;
for(i=0;i<3;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;returnc;}
下面求xy的pow函数中的空应当如何填?
intpow(intx,inty)
{intj;
for(【j=1】;【y>0】;【y--】)j=j*x;
returnj;}
81.执行以下程序后,a的值为【①C】,b的值为【②C】。
main()
{inta,b,k=4,m=6,*p1=&k,*p2=&m;
a=p1==&m;
b=(-*p1)/(*p2)+7;
printf("a=%d\n",a);
printf("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)charstr