C语言程序设计复习 习题课.docx
《C语言程序设计复习 习题课.docx》由会员分享,可在线阅读,更多相关《C语言程序设计复习 习题课.docx(11页珍藏版)》请在冰豆网上搜索。
![C语言程序设计复习 习题课.docx](https://file1.bdocx.com/fileroot1/2023-1/10/129ac2ce-1c55-4687-99e2-328b4b05dc2f/129ac2ce-1c55-4687-99e2-328b4b05dc2f1.gif)
C语言程序设计复习习题课
一、单选题:
(1)在C语言提供的合法的关键字是()
A)swicthB)cherC)CaseD)default
(2)在C语言中,合法的字符常量是()
A)'\084'B)'\x43'C)'ab'D)"\0"
(3)若有定义和语句:
chars[10]:
s="abcd";printf("%s\n",s);
则结果是(以下u代表空格)()
A)输出abcdB)输出aC)输出abcduuuuuD)编译不通过
(4)若有定义和语句:
int**pp,*p,a=10,b=20;
pp=&p;p=&a;p=&b;printf("%d,%d\n",*p,**pp);
则输出结果是:
()
A)10,20B)10,10C)20,10D)20,20
(5)若有以下定义和语句:
intu=010,v=0x10,w=10;
printf("%d,%d,%d\n",u,v,w);
则输出结果是()
A)8,16,10B)10,10,10C)8,8,10D)8,10,10
(6)若有以下定义和语句
charc1='b',c2='e';
printf("%d,%c\n",c2-c1,c2-'a'+"A");
则输出结果是()
A)2,MB)3,E
C)2,ED)输出项与对应的格式控制不一致,输出结果不确定
(7)若有以下定义:
chars[20]="programming",*ps=s;
则不能代表字符o的表达式是()【Ps是一维地址】
A)ps+2B)s[2]C)ps[2]D)ps+=2,*ps
(8)若i,j已定义为int类型,则以下程序段中内循环体的总的执行次数是()
for(i=5;i;i--)
for(j=0;j<=4;j++){...}
A)20B)25C)24D)30
(9)若有以下定义和语句:
char*s1="12345",*s2="1234";
printf("%d\n",strlen(strcpy(s1,s2)));
则输出结果是()
A)4B)5C)9D)10
(10)若有以下定义和语句:
inta[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
则不能表示a数组元素的表达式是()
A)*pB)a[10]C)*aD)a[p-a]
(11)若有以下定义:
floatx;inta,b;则正确的switch语句是()
A)switch(x)B)switch(x)
{case1.0:
printf("*\n");{case1,2:
printf("*\n");
case2.0:
printf("**\n");case3:
printf("**\n");
}}
C)switch(a+b)D)switch(a+b);
{case1:
printf("\n");{case1:
printf("*\n");
case1+2:
printf("**\n");case2:
printf("**\n");
}}
(14)以下程序输出的结果是()
main()
{charw[][10]={"ABCD","EFGH","IJKL","MNOP"},k;
for(k=1;k<3;k++)
printf("%s\n",&w[k][k]);
}
A)ABCDB)ABCD
FGHEFG
KLIJ
M
C)EFGD)FGH
JKKL
O
(15)若数组名作实参而指针变量作形参,函数调用实参传给形参的是()
A.数组的长度B.数组第一个元素的值
C.数组所有元素的值D.数组第一个元素的地址
(16)若变量已正确定义并赋值,下面符合C语言语法的表达式是()
A)a:
=b+1B)a=b=c+2C)int18.5%3D)a=a+7=c+b
(17)C语言中运算对象必须是整型的运算符是()
A)%=B)/C)=D)〈=
(18)若已定义x和y为double类型,则表达式x=1,y=x+3/2的值是()
A)1B)2C)2.0D)2.5
(20)若有以下程序段,
intc1=1,c2=2,c3;
c3=1.0/c2*c1;
则执行后,c3中的值是()
A)0B)0.5C)1D)2
(21)有如下程序
main()
{inty=3,x=3,z=1;
printf(“%d%d\n”,(++x,y++),z+2);
}
运行该程序的输出结果是()
A)34B)42C)43D)33
(22)能正确表示逻辑关系:
“a≥10或a≤0”的C语言表达式是()
A)a>=10ora<=0B)a>=0|a<=10
C)a>=10&&a<=0D)a>=10||a<=0
(23)有如下程序
main()
{intx=1,a=0,b=0;
switch(x)
{case0:
b++;
case1:
a++;
case2:
a++;b++;}
printf(“a=%d,b=%d\n”,a,b);}
该程序的输出结果是()
A)a=2,b=1B)a=1,b=1C)a=1,b=0D)a=2,b=2
(24)有如下程序
main()
{floatx=2.0,y;
if(x<0.0)y=0.0;
elseif(x<10.0)y=1.0/x;
elsey=1.0;
printf(“%f\n”,y);}
该程序的输出结果是()
A)0.000000B)0.250000C)0.500000D)1.000000
(26)有如下程序
main()
{inti,sum;
for(i=1;i<=3;sum++)sum+=i;
printf(“%d\n”,sum);
}
该程序的执行结果是()
A)6B)3C)死循环D)0
(27)有如下程序
main()
{intx=23;
do
{printf(“%d”,x--);}while(!
x);}
该程序的执行结果是()
A)321B)23C)不输出任何内容D)陷入死循环
(28)有如下程序
main()
{intn=9;
while(n>6){n--;printf(“%d”,n);}}
该程序段的输出结果是()
A)987B)876C)8765D)9876
(29)设有说明语句:
chara=’\072’;则变量a()
A)包含1个字符B)包含2个字符
C)包含3个字符D)说明不合法
(30)有如下函数调用语句
func(rec1,rec2+rec3,(rec4,rec5);
该函数调用语句中,含有的实参个数是()
A)3B)4C)5D)有语法错
(31)有如下程序
intfunc(inta,intb)
{return(a+b);}
main()
{intx=2,y=5,z=8,r;
r=func(func(x,y),z);
printf(“%\d\n”,r);}
该程序的输出的结果是()
A)12B)13C)14D)15
(32)有如下程序段
int*p,a=10,b=1;
p=&a;a=*p+b;
执行该程序段后,a的值为()
A)12B)11C)10D)编译出错
(34)有如下程序
longfib(intn)
{if(n>2)return(fib(n-1)+fib(n-2));
elsereturn
(2);
}
main()
{printf(“%d\n”,fib(4));}
该程序的输出结果是()
A)2B)4C)6D)8
(35)在C语言中,函数的隐含存储类别是()
A)autoB)staticC)externD)无存储类别
(36)有如下程序
#defineN2
#defineMN+1
#defineNUM2*M+1
main()
{inti;
for(i=1;i<=NUM;i++)printf(“%d\n”,i);
}
该程序中的for循环执行的次数是()
A)5B)6C)7D)8
(37)有以下函数
charfun(char*p)
{returnp;}
该函数的返回值是()
A)无确切的值B)形参p中存放的地址值
B)一个临时存储单元的地址D)形参p自身的地址值
(38)有如下程序段
inta=14,b=15,x;
charc=’A’;
x=(a&&b)&&(c<’B’);
执行该程序段后,x的值为()
A)trueB)falseC)0D)1
(39)有如下说明
inta[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
则数值为9的表达式是()
A)*p+9B)*(p+8)C)*p+=9D)p+8
(42)若有以下的定义:
inta[]={1,2,3,4,5,6,7,88,9,10},*p=a;
则值为3的表式是()
A)p+=2,*(p++)B)p+=2,*++p
C)p+=3,*p++D)p+=2,++*p
(43)假定所有变量均已正确说明,下列程序段运行后x的值是()
a=b=c=0;x=35;
if(!
a)x--;
elseif(b);if(c)x=3;elsex=4;
A)34B)4C)35D)3
(44)在以下一组运算符中,优先级最高的运算符是()
A)<=B)=C)%D)&&
(46)若有以下程序片段:
charstr[]="ab\n\012\\\"";
printf("%d\n",strlen(str));
上面程序片段的输出结果是()
A)3B)4C)6D)12
(47)函数调用strcat(strcpy(str1,str2),str3)的功能是()
A)将串str1复制到串str2中后再连接到串str3之后
B)将串str1连接到串str2之后再复制到串str3之后
C)将串str2复制到串str1中后再将串str3连接到串str1之后
D)将串str2连接到串str1之后再将串str1复制到串str3中
(48)以下对C语言函数的有关描述中,正确的是()
A)在C中,调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参
B)C函数既可以嵌套定义又可以递归调用
C)函数必须有返回值,否则不能使用函数
D)C程序中有调用关系的所有函数必须放在同一个源程序文件中
(49)以下叙述中不正确的是()
A)在C中,函数中的自动变量可以赋初值,每调用一次,赋一次初值.
B)在C中,调用函数时,实参和对应形参在类型上只需赋值兼容.
C)在C中,外部变量的隐含类别是自动存储类别.
D)在C中,函数形参可以说明为register变量.
(51)错误的转义字符是()
A)'\091'B)'\\'C)'\0'D)'\''
(52)设inta,b,c;执行表达式a=b=1,a++,b+1,c=a+b--后,a,b和c的值分别是()
A)2,1,2B)2,0,3C)2,2,3D)2,1,3
(53)在C语言中,错误的常数是()
A)1E+2.0B)5C)0xafD)0L
(54)设intk;则语句for(k=0;k=1;k++);和
语句for(k=0;k==1;k++);执行的次数分别是()
A)无限和0B)0和无限C)都是无限D)都是0
二、填空题
1.C提供的预处理功能主要有、文件包含和。
2.inta;a=(2,3,4,5,6);则a=;a=2,3,4,5,6;则a=。
3.3<2<1的运算结果是;3>2>1的运算结果是。
4.内部函数又称为,系统默认的函数类型为 。
三、程序分析题
阅读下列程序,将输出结果分别写到各题右侧的空白处。
1.main()
{inta=3,b=9,c=2;
if(a)if(b)printf("%5d%5d%5d\n",a,b,c);}
程序运行结果:
ﺏﺏﺏﺏ3ﺏﺏﺏﺏ9ﺏﺏﺏﺏ2
2.voidchange(int*x,inty)
{intt;
t=*x;*x=y;y=t;}
main()
{inta=3,b=5;
change(&a,b);
printf("a=%d,b=%d\n",a,b);}
程序运行结果:
a=5,b=5
3.main()
{intj;
for(j=4;j>=2;j--)
switch(j)
{case0:
printf("%4s","ABC");
case1:
printf("%4s","DEF");
case2:
printf("%4s","GHI");break;
case3:
printf("%4s","JKL");
default:
printf("%4s","MNO");
}
printf("\n");
}
程序运行结果:
ﺏMNOﺏJKLﺏMNOﺏGHI
4.inta=10;
intf(inta)
{intb=0;staticintc=3;
a++;++c;++b;
returna+b+c;}
main()
{inti;
for(i=0;i<2;i++)print("%5d",f(a));
printf("\n");
}
程序运行结果:
ﺏﺏﺏ16ﺏﺏﺏ17
5.#defineN2
#defineMN+1
#defineNUM2*M+1
intfib(intn)
{
returnn<3?
2:
fib(n-1)+fib(n-2);
}
main()
{
printf("%5d%5d\n",NUM,fib(5));
}
程序运行结果:
ﺏﺏﺏﺏ6ﺏﺏﺏ10
6、voidmain()
{ints1=0,s2=0,s3=0,s4=0,t;
for(t=4;t>=1;t--)
switch(t)
{case4:
s1++;break;
case3:
s2++;break;
case2:
s3++;
default:
s4++;}
printf(“s3+s2=%d\ns4=%d\n”,s3+s2,s4);
}
请写出上面程序的运行结果:
s3+s2=2
S4=2
7、#include
voidmain()
{inta[]={2,3,5,4},i;
for(i=0;i<4;i++)
switch(i%2)
{case0:
switch(a[i]%2)
{case0:
a[i]++;break;
case1:
a[i]--;
}break;
case1:
a[i]=0;
}
for(i=0;i<4;i++)printf(“%-2d”,a[i]);printf(“\n”);
}
输出结果是:
3ﺏ0ﺏ4ﺏ0ﺏ
8、#include
main()
{chars[]={“012xy”};inti,n=0;
for(i=0;s[i]!
=0;i++)
if(s[i]>=’a’&&s[i]<=’z’)n++;
printf(“%d\n”,n);
}
输出结果是:
2
9、#include
inta=5;
voidfun(intb)
{inta=10;
a+=b;printf("%d",a);
}
main()
{intc=20;
fun(c);a+=c;printf("%d\n",a);
}
请写出上面程序的运行结果:
3025
四、程序设计题
有一函数:
x(x<1)
y=2x-1(1≤x<10)
3x-11(x≥10)
写一程序,输入x,输出y值。