C语言系列复习题含答案 2修改汇总.docx
- 文档编号:14284477
- 上传时间:2023-06-22
- 格式:DOCX
- 页数:112
- 大小:78.32KB
C语言系列复习题含答案 2修改汇总.docx
《C语言系列复习题含答案 2修改汇总.docx》由会员分享,可在线阅读,更多相关《C语言系列复习题含答案 2修改汇总.docx(112页珍藏版)》请在冰点文库上搜索。
C语言系列复习题含答案2修改汇总
第一部分C语言基础题(选择与程序分析)
1.常量与变量
1.1常量
1.(2001_1)以下四个选项中,均为非法常量的是C
A.–0x18,01177,0xfB.‘\\’,’\01’,12,456C.‘as’,-0fff,’\0xa’D.0xabc,’\0’,”a”
2.(2000_2)以下常量中正确的是D
A.‘abc’B.’\x123’C.3.14e-1.2D.”a”
3、(1996_7)以下程序的输出是A。
#include
main()
{
printf(“%d”,NULL);
}
A.0B.‘\0’C.1D.无定义
4.(2002_2_3)包含二目运算符的表达式可一般表示为(x)op(y),其中op代表运算符,x,y代表操作数。
若op是“+”运算符,且x和y均为常量时,不能同时为字符串常量。
1.2变量
1.(1999_2_2)设有说明:
inty;floatx;则执行语句x=y=4.8;后x的值为4
2.(2003_8)若有声明:
intk,a,b;
unsignedlongy=5;
doublex=1.23;
则表达式中正确的是D
A.x%(-5)B.x=y[6]C.k=(a=1,b=2,&a+&b)D.a+=a-=(b=2)*(a=3)
3.(2003_2_1)在声明变量时,类型修饰符unsigned一般用于修饰基本类型中的int和char、long;
4.(1998_6)在C语言中,下面符号串中,能用作变量名的标识符为B
A.autoB.putsC.–1*numD.2-and
5.(2002_2_5)在函数内部声明局部变量时缺省了存储类型,该变量的存储类型为auto;
6.(2002_5)已知在某C语言编译系统中表达式sizeof(int)的值为2,如果希望将常量-70000正确的保存在一个变量a中,则该变量声明语句应当是B
A.inta;B.longinta;C.unsignedinta;D.unsignedlonginta;
7.(2003_2_3)已有声明:
floatx;doubley;inta;longb;charc;,则表达式x+y*a/x+b/y+c值的类型为double
8.(1993_4)在C的表达式中,可以将某一类型的变量a强制转换成具有类型b的值,可以为A
A.(b)aB.a(b)C.b(a)D.(a)b
1.3变量作用域
1.(1997_10)变量的有效范围与其定义位置有关,B,其作用域在整个源程序文件中都有效。
A.在第一个函数中定义的变量B.在定义第一个函数之前所定义的变量
C.在主函数中定义的变量D.在函数中定义的静态变量
2.(1993_3)外部变量对程序中的任一函数而言,它们是A
A.存在的B.可直接存取的C.不可见的D.不可直接存取的
3.(1994_5)对于extern型变量和static型变量的初始化A
A.在编译时进行
B.在程序开始运行时进行
C.在程序运行过程中使用到它们时进行72
D.不能确定在何时进行
4.(2000_10)以下叙述中不正确的是C
A.一个变量的作用域完全取决于变量说明的位置
B.外部变量可以在函数以外的任何位置定义
C.内部变量的生存期只限于本次函数调用,无法将内部变量的值保存至函数的下一次调用
D.用static说明一个外部变量是为了限制其它编译单位引用
5.(2003_2)某程序段如下:
floatp=1.5;
#definep2.5
main()
{
printf(“%f”,p);
}
则main函数中标识符p代表的操作数是D
A.float类型变量B.double类型变量C.float类型常量D.double类型常量
6.执行以下程序的结果为。
5-3-7
589.9
888
889.9
8-3-7
main()
{
inta=5,b=-3,c=-7;
printf("\n%d,%d,%d",a,b,c);
{
intb=8;
floatc=9.9;
printf("\n%d%d%lf",a,b,c);
a=b;
{
intc;
c=b;
printf("\n%d%d%d",a,b,c);
}
printf("\n%d%d%lf",a,b,c);
}
printf("\n%d%d%d",a,b,c);
}
7.(2002_2_8)执行以下程序后,输出x的值为0,y的值为2;
intx;
intf(intx)
{
if(x==3)
{
intx=2;
returnx;
}
else
returnx;
}
voidmain(void)
{
inty,k;
y=f(3);
printf("%d\n%d",x,y);
}
8.(2000_2_3)下列程序的运行结果为3235
voidmain(void)
{
externintx;
printf("%d",x+=2);
fun1
(2);
}
intx=1;
fun1(intx)
{
printf("%d",x++);
fun2
(2);
}
fun2(void)
{
printf("%d",x);
{
intx=5;
printf("%d",x);
}
}
1.4static变量
1.(1994_2_3)运行该程序,第一行的输出是sum=4;第三行的输出是sum=57;将程序中标有/*change*/的注释行改为:
inta2=1;则第五行的输出是sum=20。
intf()
{
staticinta1=0;
staticinta2=1;/*change*/
a1=a2;
return(a2+=2*a1+1);
}
main()
{
inti,sum,f();
for(i=sum=0;i<5;i++)
printf("\nsum=%d",sum+=f());
}
2.(1996_2_9)以下程序输出的第一行是10;输出的第二行是21.
abc()
{
staticinti;
i+=10;
return(i++);
}
main()
{
printf("%d\n",abc());
printf("%d\n",abc());
}
3.(1997_2_6)程序输出的第一行、第二行和最后行分别是C=0,C=-1,C=-2
#include
intc=-2;
voidfun(inta,intb)
{
staticintc=2;
c=a+b+++c;
printf("c=%d\n",c);
}
main()
{
inti;
for(i=0;i<=1;i++)
fun(i,c);
printf("c=%d\n",c);
}
4.(1998_2_2)执行以下程序后,第一行的输出是5,第三行的输出是9
intfac(inta)
{
intb=0;
staticintc=3;
b++;
c++;
returna+b+c;
}
main()
{
inta=3,j;
for(j=0;j<3;j++)
printf("%d\n",fac(j));
}
5.(2001_2_7)以下程序的运行结果为6,720
intfun(intm)
{
staticintk=1;
while(m)
k*=m--;
return(k);
}
voidmain(void)
{
inti,j;
i=fun(3);
j=fun(5);
printf("%d,%d\n",i,j);
}
2.宏定义、宏包含
1.(1994_1)用#include命令包含的文件是C
A.目标文件B.可执行文件C.源程序文件D.二进制文件
2.(1996_6)预处理命令可能具有如下特点:
1.均以”#”开头2.必在程序开头3.后面不加分号4.在真正编译前处理
正确的说法是,预处理命令具有以下哪几条特点:
B
A.1,2B.1,3,4C.1,3D.1,2,3,4
3.(1997_2)若有宏定义和变量说明如下:
#defineX5
#defineYX+1
#defineZY*X/2
inta;a=Y;
则执行以下printf语句后输出的结果是A。
printf(”%d%d\n”,Z,--a);
A.75B.126C.125D.76
4.(2000_2_4)
#defineN2
#defineY(n)((N+1)*n)则执行z=2*(N+Y(N+2))后,z的值为20
5.(2002_2_7)设有以下宏定义:
#defineN3
#defineY(n)((N+1)*n)
则执行语句z=2*(N+Y(5+1))后,z的值为48;
6.(2001_2)
#include"stdio.h"
#definePI3.14
#defineF(y)((y)*(y))
#defineP(a)printf(%d",a)
voidmain(void)
{
intx=PI;
P(F(1+2)*x);
}
27
7.(1998_2_6)程序是否正确(是或否)是;若程序错,则原因是(或程序正确,则输出结果是):
x=69
#defineA3
main()
{
inta;
#defineB(a)((A+1)*a)
a=3*(A+B(5));
printf("x=%d\n",a);
}
8.(2003_2_6)以下程序的运行结果是8.0;
#definePT3.14
#defineS(x)PT*x*x
voidmain(void)
{
inta=2;
printf("%4.1f",6.28/S(a));
}
9.(1993_2_6)执行以下程序的结果为。
-2
2
-2
1
#include"stdio.h"
#defineLOW(-2)
#defineHIGH(LOW+5)
#definePR(arg)printf("%d\n",(arg))
#defineFOR(arg)for(;(arg);(arg)--)
main()
{
inti=LOW,j=HIGH;
FOR(j)
switch(j)
{
case1:
PR(i++);
case2:
PR(j);break;
default:
PR(i);
}
}
3.转义字符
1.(1999_1)char*str="\t\'c\\Language\n";
printf("\n%d",strlen(str));的值为13
2.(1998_2_4)执行以下程序后,程序输出为5
#include"string.h"
main()
{
printf("%d\n",strlen("ab\034\\\x89"));
}
3.(1999_2_4)如下程序的输出结果是3
printf("%d\n",strlen("abc\0defg"));
4.(1997_1)执行语句printf(”字串为:
isc:
\\too1s\’book.txt”);后的输出是D
A.字串为:
isc:
tools’book.txtB.字串为:
isc:
\too1sbook.txt
C.字串为:
isc:
\\tools\’book.txtD.字串为:
isc:
\too1s’book.txt
4.运算符
1.(1999_2_3)在C语言中,任一语句必定以字符;结束
2.(1996_2_5)运算符“&”有二种含义:
一种是取地址,另一种是:
位运算
3.(2002_2_2)&既可以用作单目运算符也可以用作双目运算符,其中用作单目运算符时表示的功能是取操作数地址
4.1逗号运算符
1.(1998_2)设有变量说明:
intx;则表达式(x=4*5,x*5),x+25的值为B。
A.20B.45C.100D.125
2.(1997_5)设a和b为整型变量,执行语句:
b=(a=2+3,a*4),a+5;
后,a和b的值为D。
A.5,10B.20,25C.5,25D.5,20
3.(2002_2)表达式(a=4*5,b=a*2),b-a,a+=2的值是C
4.2复合运算符
1.(2000_2_1)若有
inta=5;
a+=a-=-a*a;
printf("\n%d",a);则a的值为60
2.(1996_2)设a是整型变量,初值是12,执行完表达式a+=a-=a*a后,a的值是B
A.144B.-264C.264D.0
3.(1999_2)
intm=3,n=2;
x=(--m==n++)?
--m:
++n;
y=m++;
z=n;
printf("\n%d\t%d\t%d",x,y,z);的值为113
4.3++,--运算符
1.(1993_2_1)设有如下的说明:
inti=3,j=5,m;
问:
执行语句m=(i++)-(--j);后,m的值是-1, j的值是4。
2.(2001_6)
inti,j;
j=(i=1,i+9>9?
i++||++i:
++i);
printf("\n%d\t%d",i,j);
2,1
5.表达式
5.1算术表达式
1.(1994_3)inta1=10,a2=3;floata3=8.0;若程序中,有表达式a1/a2*a2*a3,结果值为DA.80B.80.0C.72D.72.0
2.(2001_5)已知a,b为整数且b!
=0,则表达式(a/b)*b+a%b的值为A
A.aB.bC.a被b除的余数部分D.a被b除商的整数部分
3.(2000_1)intk=11;
k=1/3*k++;
printf("\n%d",k);
1
5.2关系表达式
1.(1999_2_1)在C语言中,当关系表达式的关系成立时,关系表达式的值为1
2.(2000_3)设有inta;以下不能正确表达数学式10 A.1010&&a<15D.! (a<=10)&&(a>10) 5.3逻辑表达式 1.(1993_1)当a的值为5, b的值为4时,逻辑表达式a<=6&&a+b>8的值为CA.trueB.falseC.非0整型值D.整型值0 2.(2003_6)逻辑“异或”运算可描述为“axorb”,其中a和b为参与运算的两个操作数,运算结果为当且仅当a、b两个操作数中只有一个为真时才为真,其它情况均为假。 以下表达式中可以正确表示逻辑“异或”运算的是D。 A.a||bB.a&&bC.(a&&b)&&! (a||b)D.(a||b)&&! (a&&b) 3.(1996_10)若x,y,z的初值均为1,则执行表达式w=++x||++y&&++z后,x,y,z的值为D A.x=1,y=1,z=2B.x=2,y=2,z=2C.x=1,y=2,z=1D.x=2,y=1,z=1 4.(1998_4)设有说明: intx=1,z=1,y=1,k;执行语句: k=x++||++y&&++z;;后,变量y的值为A A.1B.2C.3D.4 5.(1999_5)inta=4,b=5,c=6,d=7,m=1,n=1,e; c=(m=a>b)&&(n=c>d); printf("\n%d\t%d",m,n); 01 6.(2000_7) inta=0,b=4,k=2; k=a+1>0||(++a<0)&&(! (b--<=0)); printf("%d,%d,%d",k,a,b); 1,0,4 6.顺序结构 1.(2003_10)在缺省情况下,标准C的编译系统中预定义的标准输出流stdout直接连接的设备是D A.软盘B.硬盘C.键盘D.显示器 2.(2003_2_4)系统库函数scanf和gets在被调用执行时都可以读取从键盘输入的一串数字字符,其中函数scanf具有将读取的数字字符串转换为整型数的功能。 3.(1996_2_13)若输入数据为: 3452456ABCD<CR>,其中 main() { intd; chara,b,c,s[10]; scanf("%c%c%s%d%c",&a,&b,s,&d,&c); printf("a=%c,b=%c,s=%s,c=%c,d=%d\n",a,b,s,c,d); } 7.选择结构 1.(2000_5)关于if语句描述,错误的是B A.条件表达式可以是任意的表达式 B.条件表达式只能是关系表达式或逻辑表达式 C.条件表达式的括号不可以省略 D.与else配对的if语句是其之前最近的未配对的if语句 2.(1997_8)对下面三条语句(其中s1和s2为内嵌语句),正确的论断是A (1)if(a)sl;elses2 (2)if(a==0)s2;elsesl (3)if(a! =0)s1;elses2 A.三者相互等价B. (1)和 (2)等价,但与(3)不等价 C.三者互不等价D. (1)和(3)等价但与 (2)不等价 3.(2002_2_6)以下程序运行后,x,y,z的值分别为1,2,3 intx=0,y=3,z=2; if(x++&&y++) z--; elseif(x+1==6||y--) z++; 4.(1997_2_7)程序输出的最后一行是-2 #include main() { inti=-5; while(i++) { switch(i+5) { case1: switch(-i-3) { case1: printf("%d\n",i); case2: printf("%d\n",i); } case2: printf("%d\n",i);break; case3: printf("%d\n",i); } } } 8.循环结构 1.(1998_7)设整型变量x的当前值为3,执行以下循环语句后,输出的结果是B do printf(“%d\t”,x-=2); while(! (--x)); A.0B.1-2C.30D.死循环 2.(1999_6)循环语句: for(x=0,y=0;y! =150||x<4;x++)y+=50;执行了多少次? 无数次 3.(1997_2_1)有inta,b;则对于下面“for循环中的scanf语句最少可执行1次。 最多可执行3次。 for(a=0,b=0;b! =30&&a<3;a++)scanf(“%d”,&b). 4.(1996_4)设i和s都是整型变量,执行如下语句: for(i=0,s=0;i+s<10;i++,s++);printf(“%d,%d\n”,i,s); 输出的i和s的值分别为: D A.11,11B.5,5C.6,6D.10,10 5.(1996_2_12)以下程序的输出结果为********。 main() { inti,j; for(i=1;i<10;i++) { for(j=i+1;j<10;j++,i++) printf("*"); printf("\n"); } } 6.(2001_2_5)下列程序的运行结果为30 voidmain(void) { inti=0,j=10,k=2,s=0; for(;i<=j;) { i+=k++; s=s+i; } printf("%d\n",s); } 9.continue、break 1.(1997_9)退出一个循环语句(不终止函数的执行)的有效措施是A A.用break语句B.用continue语句C.用return语句D.。 用exit语句 10.(1999_10)break语句C A.用在能出现语句的任何地方B.只能用在循环体内C.只能用在循环体内或switch语句中D.可用作函数内的任一语句 2.(2003_9)以下跳转语句中,只有C可以选择不唯一的跳转目的地。 A.continueB.breakC.goto标识符D.return 3.(2001_2_1)任何函数返回值都是通过函数体中的return语句返回的,void类型的函数没有返回值,因此它的调用形式不能作为表达式的运算分量; 4.(2002_2_1)只能在循环体中出现的语句是continue 5.(2001_2_9)执行以下程序时输出第二行是5,6第三行是10,11; voidmain(void) { inta[4][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16},i,j; for(i=0;i<4;i++) { for(j=0;j<4;j++) { if(i>j+1) continue; if(i break; printf("%d,",a[i][j]); } printf("\n"); } } 10.数组 10.1数据数组 1.(2002_4)以下声明语句正确的是D A.intn,a[n];B.inta[];C.inta[2][3]={{1},{2},{3}};D.inta[][3]={{1},{2},{3}}; 2.(2003_3)已有声明: ints[2][3];以下选项中A正确的引用了数组s中的基本元素。 A.s[1>2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言系列复习题含答案 2修改汇总 语言 系列 复习题 答案 修改 汇总