最新C语言复习题2.docx
《最新C语言复习题2.docx》由会员分享,可在线阅读,更多相关《最新C语言复习题2.docx(27页珍藏版)》请在冰豆网上搜索。
![最新C语言复习题2.docx](https://file1.bdocx.com/fileroot1/2023-1/5/63e0ad7b-109e-4e02-bd29-d1dc5a1221ab/63e0ad7b-109e-4e02-bd29-d1dc5a1221ab1.gif)
最新C语言复习题2
题型:
●选择题(20题×2′=40分)
●填空题(15空×2′=30分)
●编程题:
(4题共30分)
红色为参考解答
一、选择题
(1)以下叙述中正确的是()C
A)C语言程序将从源程序中第一个函数开始执行。
B)可以由在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行。
C)C语言规定必须用main作为主函数名,程序将从此开始执行,在此结束。
D)main可以作为用户标识符,用户可以命名任意一个函数作为主函数。
(2)若有定义语句:
chars[10]=”1234567\0\0”;则strlen(s)的值是()A
A)7B)8C)9D)10
(3)若有定义:
floatx=1.5;inta=1,b=3,c=2;则正确的switch语句是()B
A)switch(x)B)switch((int)x)
{case1.0:
printf("*\n");{case1:
printf("*\n");
case2.0:
printf("**\n");}case2:
printf("**\n");}
C)switch(a+b);D)switch(a+b)
{case1:
printf("*\n");{case1:
printf("*\n");
case2+1:
printf("**\n");}casec:
printf("**\n");}
(4)有以下程序D
voidmain()
{
int a[]={0,2,4,6,8}, *p=a, *q=p+3;
printf("%d\n", *p + *q);
}
程序运行后的输出结果是()
A)10 B)4 C)8 D)6
(5)若有定义:
intx=0,*p=&x;,则语句printf("%d\n",*p);的输出结果是()B
A)随机值B)0C)x的地址D)p的地址
(6)下列叙述中错误的是()A
A)一个C语言程序可以包含多个main函数
B)C程序可以由多个程序文件组成
C)C程序可以由一个或多个函数组成
D)在C程序的函数中不能定义另一个函数
A)and_2007B)abcC)intD)Double
(7)设有intx=11;则表达式x%5的值是()A
A)1B)2C)3D)4
(8)以下的for循环()C
for(x=0;x<10;x+=2);
A)是无限循环B)循环次数不定C)执行5次D)执行4次
(9)以下错误的定义语句是()C
A)intx[][3]={{0},{1},{1,2,3}};
B)intx[4][3]={{1,2,3},{1,2,3},{1,2,3}};
C)intx[4][]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}};
D)intx[][3]={1,2,3,4};
(10)C语言中while和do-while循环的主要区别是().A
A)do-while的循环体至少无条件执行一次
B)while的循环控制条件比的循环控制条件严格
C)do-while允许从外部转到循环体内
D)do-while的循环体不能是复合语句
(11)对于基类型相同的两个指针变量之间,不能进行的运算是()A
A)
(12)设有定义:
int n1=0,n2,*p=&n2,*q=&n1;,以下赋值语句中与n2=n1;语句等价的是()A
A)*p=*q; B)p=q; C)*p=&n1; D)p=*q;
(13)以下叙述错误的是()D
A)用户定义的函数中可以没有return语句
B)用户定义的函数中可以有多个return语句,一次调用可以返回多个值
C)用户定义的函数中若没有return语句,则应当定义函数的类型为void类型
D)函数的return语句中可以没有表达式
(14)有以下程序C
#include
intfun(intx,inty)
{
if(x>y)returnx;
elsereturny;
}
voidmain()
{
int a=4,b=5;
printf("%d\n",fun(a,b));
}
程序运行后的输出结果是()
A)3 B)4 C)5 D)6
(15)以下叙述中错误的是()D
A)在程序中凡是以”#”开始的代码行都是预处理指令行
B)预处理指令行的最后不能以分号表示结束
C)#defineMAX是合法的宏定义指令行
D)C程序对预处理指令行的处理是在程序执行的过程中进行的
(16)按照C语言的用户标识符命名规则,不能出现在标识符中的是()D
A)字母 B)数字 C)下划线 D)连接符
(17)若有定义语句inta[3][2];按在内存中的存放顺序,a数组的第3个元素(a[0][0]是第一个元素)是()A
A)a[1][0]B)a[1][1]C)a[0][0]D)a[0][1]
(18)以下不合法的标识符是()A
A)for B)a_b C)print D)x1
(19)若函数中有定义语句:
intk;,则()B
A)系统将自动给k赋初值0B)这时k中的值无定义
C)系统将自动给k赋初值-1D)这时k中无任何值
(20)以下叙述中正确的是()D
A)函数的定义可以嵌套,但函数的调用不可以嵌套。
B)函数的定义不可以嵌套,但函数的调用可以嵌套。
C)函数的定义和调用都不可以嵌套。
D)函数的定义和调用都可以嵌套。
(21)下面关于标识符的叙述不正确的是()B
A)标识符中可以有数字B)关键字可以做标识符
C)标识符中可以有大写字母D)标识符中可以有下划线
(22)以下关于字符串的叙述中正确的是()B
A)C语言中有字符串常量和变量
B)C语言中没有字符串变量
C)可以用关系运算符对字符串大小进行比较
D)所有字符串末尾都有结束标志
(23)若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是()D
A)函数的实参和其对应的形参共占同一存储单元
B)形参只是形式上的存在,不占用具体存储单元
C)同名的实参和形参占同一存储单元
D)函数的形参和实参分别占用不同的存储单元
(24)以下不合法的标识符是()C
A)j2_keyB)IntC)4dD)_8_
(25)设有语句inta=3;则执行了语句a+=a-=a*a;后,变量a的值是()D
A)3B)0C)9D)–12
(26)在C程序中,若对函数类型未加说明,则函数的隐含类型为()。
A
A)intB)doubleC)voidD)char
(27)设变量定义为inta,b;,执行下列语句时,输入(),则a和b的值都是10。
D
scanf("a=%d,b=%d",&a,&b);
A)1010B)10,10C)a=10b=10D)a=10,b=10
(28)设变量定义为inta[4];,则表达式()不符合C语言语法。
D
A)*aB)a[0]C)aD)a++
(29)下列程序输出结果是()C
#include
voidmain()
{
intk=5;
k--;
printf("%d",++k);
}
A)3B)4C)5D)6
(30)有以下程序A
#include
voidmain()
{
intx,y,z;
x=y=1;
z=x++,y++;
printf("%d,%d",x,y);
}
程序运行后的输出结果是()
A)2,2B)2,3C)3,2D)1,2
(31)以下能正确定义字符串的语句是()D
A)charstr=”kx43”;B)charstr=”;
C)charstr[]={‘\064’};D)charstr[]=”\0”;
(32)已知大写字母A的ASCII码是65,小写字母a的ASCII码是97,以下不能将变量c中的大写字母转换为小写字母的语句是()D
A)c=(c-‘A’)%26+’a’;B)c=c+32;
C)c=c-‘A’+’a’;D)c=(‘A’+c)%26-‘a’;
(33)下列程序段的输出结果是()C
#include
voidmain()
{
intt=1,i=5;
for(;i>=0;i--)
t*=i;
printf("%d\n",t);
}
A)5B)120C)0D)1
(34).执行以下程序后,j的值是多少()A
#include
main()
{
inti,j=0;
for(i=0;i<3;i++)
{
if(i%2==0)continue;
j++;
}
printf("%d\n",j);
}
A)1 B)2 C)3 D)4
(35)在C语言中,函数返回值的类型最终取决于()A
A)函数定义时在函数首部所说明的函数类型
B)return语句中表达式值的类型
C)调用函数时主调函数所传递的实参类型
D)形式参数的类型
(36)设有以下语句C
typedefstructTT
{
charc;
inta[4];
}CIN;
则下列叙述正确的是()
A)可以用TT定义结构体变量 B)TT是struct类型的变量
C)可以用CIN定义结构体变量 D)CIN是structTT类型的变量
(37)下列程序输出结果是()C
#include
voidmain()
{
intk=5;
printf("%d",k++);
}
A)3B)4C)5D)6
(38)若变量已正确定义,语句if(a>b)k=0;elsek=1;和()等价。
C
A)k=(a>b)?
1:
0;B)k=a>b;
C)k=a<=b;D)a<=b?
0:
1;
(39).执行以下程序后,j的值是多少()A
#include
main()
{
inti,j=0;
for(i=0;i<3;i++)
{
if(i%2==0)continue;
j++;
}
printf("%d\n",j);
}
A)1 B)2 C)3 D)4
(40)有以下程序B
voidfun(int*a,int*b)
{a=b;(*a)++;}
main()
{inta=3,b=4,*p1,*p2;
p1=&a;p2=&b;
fun(p1,p2);
printf(“%d%d\n”,a,b);
}
程序运行后的输出结果是()
A)34B)35C)44D)45
(41)表达式3.6-5/2+1.2+5%2的值是()D
A)4.3B)4.8C)3.3D)3.8
(42)下列程序输出结果是()A
#include
voidmain()
{
intk=5;
while(--k)
printf("%d",k-=3);
printf("\n");
}
A)1B)521C)52-1D)41
(43)C语言源程序名的后缀是()B
A).exe B).c C).objD).cpp
(44)按照C语言的用户标识符命名规则,不能出现在标识符中的是()D
A)字母 B)数字 C)下划线 D)连接符
(45)有以下程序C
#include
voidmain()
{
inti,s=0,t[]={1,2,3,4,5,6,7,8,9};
for(i=0;i<9;i+=2)s+=*(t+i);
printf("%d\n",s);
}
程序执行后的输出结果是()
A)45B)20C)25D)36
(46)设有intx=21;则表达式x%5的值是()A
A)1B)2C)3D)4
(47)设有intx=11;则表达式5/2+x%3的值是()C
A)2B)3C)4D)0
(48)有以下程序C
#include
intfun(intx,inty)
{
if(x>y)returnx;
elsereturny;
}
voidmain()
{
int a=4,b=5;
printf("%d\n",fun(a,b));
}
程序运行后的输出结果是()
A)3 B)4 C)5 D)6
(49)下列程序输出结果是()C
#include
voidmain()
{
intk=5;
k++;
printf("%d",k++);
}
A)3B)4C)5D)6
(50)若有定义语句inta[3][4];按在内存中的存放顺序,a数组的第8个元素(a[0][0]是第一个元素)是()A
A)a[1][3]B)a[1][4]C)a[0][3]D)a[0][4]
(51)若变量已正确定义为int型,要通过语句scanf(“%d,%d,%d”,&a,&b,&c);给a赋值1,给b赋值2,给c赋值3,以下输入形式中错误的是()B
A)□□□1,2,3↙B)1□2□3↙
C)1,□□□2,□□□3↙D)1,2,3↙
(52)以下关于函数的叙述中正确的是()C
A)每个函数都可以被其它函数调用(包括main函数)
B)每个函数都可以单独运行
C)每个函数都可以被单独编译
D)在一个函数内部可以定义另一个函数
(53)若要求定义具有10个int型元素的一维数组a,则以下定义语句中错误的是()D
A)#defineN10 B)#definen5
inta[N]; inta[2*n];
C)inta[5+5]; D)intn=10,a[n];
(54)下列程序段的输出结果是()A
voidfun(int*x,int*y)
{printf(“%d%d”,*x,*y);*x=3;*y=4;}
main()
{intx=1,y=2;
fun(&y,&x);
printf(“%d%d”,x,y);
}
A)2143B)1212C)1234D)2112
(55)以下叙述中正确的是()C
A)C语言程序将从源程序中第一个函数开始执行。
B)可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行。
C)C语言规定必须用main作为主函数名,程序将从此开始执行,在此结束。
D)main可以作为用户标识符,用户可以命名任意一个函数作为主函数。
(56)有以下程序A
#include
voidmain()
{
char*p[10]={"abc","aabdfg","dcdbe","abbd","cd"};
printf("%d\n",strlen(p[4]));
}
执行后输出结果是()
A)2B)3C)4D)5
(57)C语言源程序名的后缀是()B
A).exe B).c C).objD).cpp
(58)有以下程序段C
intk=0;
while(k=1)k++;
while循环执行的次数是()
A)无限次B)有语法错,不能执行 C)一次也不执行D)执行1次
(59)当调用函数时,实参是一个数组名,则向函数传送的是()B
A)数组的长度B)数组的首地址
C)数组每一个元素的地址D)数组每个元素中的值
(60)下列程序输出结果是()D
#include
voidmain()
{
intk=5;
k++;
printf("%d",k++);
}
A)3B)4C)5D)6
(61)有以下程序B
#include
intf(intx,inty)
{
return((y-x)*x);
}
voidmain()
{
inta=3,b=4,c=5,d;
d=f(f(a,b),f(a,c));
printf(“%d\n”,d);
}
程序运行后的输出结果是()
A)10B)9C)8D)7
(62)下面关于标识符的叙述不正确的是()B
A)标识符中可以有数字B)关键字可以做标识符
C)标识符中可以有大写字母D)标识符中可以有下划线
(63)有以下程序D
#include
voidmain()
{
inta=1,b=0;
printf("%d,",b=a+b);
printf("%d",a=2*b);
}
程序运行后的输出结果是()
A)0,0B)1,0C)3,2D)1,2
(64)设变量a、b、c、d和y都已正确定义并赋值。
若有以下if语句
if(a
if(c==d)y=0;
elsey=1;该语句所表示的含义是()C
A)
B)
C)
D)
(65)若有定义语句:
intm[]={5,4,3,2,1},i=4;则下面对m数组元素的引用中错误的是()C
A)m[i]B)m[2*2]C)m[m[0]]D)m[m[i]]
(66)有以下程序B
#include
intfun(intx,inty)
{
if(x==y)return(x);
elsereturn((x+y)/2);
}
voidmain()
{
inta=4,b=5,c=6;
printf(“%d\n”,fun(2*a,fun(b,c)));
}
程序运行后的输出结果是
A)3B)6C)8D)12
填空题
(1)结构化程序设计中的三种基本结构是顺序结构、选择结构和()。
循环结构
(2)当定义一个无返回值函数时,则函数的返回值类型是()。
int
(3)在C语言中整数可用()进制数、十进制数、十六进制数三种数制表示。
八
(4)若有chara[3]="ab";则*a=(),*(a+2)=()。
a\0
(5)设y是int型变量,请写出判断y为偶数的关系表达式()y%2==0
(6)已知a=3,b=2,则表达式a*=b+8的值是()。
30
(7)C语言中的实型变量分为两种类型,分别是()和双精度。
单精度
(8)在C程序中,可用()语句结束本次循环,跳过循环体重下面尚未执行的语句,提早进入下一次的循环。
continue
(9)当a=5,b=4,c=2时,表达式a>b!
=c的值是()。
1
(10)设有定义语句:
inta[3][4]={{1,2},{0},{4,6,8,9}},则数组元素a[2][1]的值是()。
6
(11)C程序是由函数构成的,一个C源程序至少包含一个()函数。
main
(12)设有说明语句inta[3][4],则数组a中包括了()个数据元素12
(13)a数组定义如下:
chara[3];则a数组中可用最小下标是(),最大下标是()。
02
(14)表达式strlen(”hello”)的值是()。
5
(15)在循环语句中,break语句的作用是()。
退出循环
(16)C语言源程序的基本单位是()。
函数
(17)表示“x≥y≥z”的C表达式是()。
x>=y&&y>=z
(18)在C语言中,表示逻辑“真”值用()。
1
(19)若有inta[3][2]={{1},{3,2},{4,5}};,则a[1][1]的值是(),a[2][0]的值是()24
(20))以下程序运行后的输出结果是()。
34
#include
voidmain()
{inti,j;
for(i=6;i>3;i--)j=i;
printf(”%d%d\n”,i,j);
}
(21)有以下程序6
#include
#definef(x)x*x
main()
{inta=2,s;
s=f(a+1);
printf(“%d\n’,s);
}
程序运行后的输出结果是()。
(22)下面程序的功能是计算s的值:
s=1!
+2!
+3!
+……+n!
其中n由键盘敲入,n<30,请填空补充完整。
#include
voidmain()
{
longs,t;
inti,n;
printf("inputn(n<30):
");
scanf("%d",&n);
();s=0;
();t=1;
for(i=1;i<=n;i++)
{
();t=t*i;
s+=t;
}
printf("1!
+2!
+3!
+…+%d!
=%ld\n",n,s);
}
(23)以下程序的运行结果是()789
intf(inta)
{intb=0;
staticintc=3;
b=b+1;
c=c+1;
return(a+b+c);
}
voidmain()
{inta=2,i;
for(i=0;i<3;i++)
printf(“%d”,f(a));
}
(24)求e的近似值,直到某一项的值小于或等于10-7为止。
将下列程序补充完整。
#include
voidmain()
{
intn;
doublet,sum,m;
n=1;
();sum=1;
m=1;
do
{
();t=1/m;
sum+=t;
n++;
();m=m*n;
}
while(t>1e-7);
printf("e=%f\n",sum);
}
(25)有以下程序
#include