C语言复习题.docx
《C语言复习题.docx》由会员分享,可在线阅读,更多相关《C语言复习题.docx(21页珍藏版)》请在冰点文库上搜索。
![C语言复习题.docx](https://file1.bingdoc.com/fileroot1/2023-5/23/dd846487-ceb4-4786-952f-4c58804291c9/dd846487-ceb4-4786-952f-4c58804291c91.gif)
C语言复习题
C语言复习题
一、选择题
(1)有如下程序
main()
{inty=3,x=3,z=1;
printf(“%d%d\n”,(++x,y++),z+2);
}
运行该程序的输出结果是:
D
A)34B)42C)43D)33
(第三章输出语句)
(2)当c的值不为0时,在下列选项中能正确将c的值赋给变量a、b的是:
C
A)c=b=a;B)(a=c)‖(b=c);
C)(a=c)&&(b=c);D)a=c=b;
(第四章关系表达式)
(3)在以下一组运算符中,优先级最高的运算符是:
C
A)<=B)=
C)%D)&&
(第四章运算符的优先级)
(4)请选出合法的C语言赋值语句:
B
A)a=b=58B)i++;
C)a=58,b=58D)k=int(a+b)
(第三章赋值语句)
(5)以下说法中正确的是:
C
A)#define和printf都是C语句B)#define是C语句,而printf不是
C)printf是C语句,但#define不是D)#define和printf都不是C语句
(第三章语句概述)
(6)若有以下定义:
D
chara;intb;
floatc;doubled;
则表达式a*b+d-c值的类型为
A)floatB)intC)charD)double
(第二章类型混合运算)
(7)若已定义x和y为double类型,则表达式:
x=1,y=x+3/2的值是:
C
A)1B)2
C)2.0D)2.5
(第二章类型混合运算)
(8)有以下程序
#include
main()
{inta,b,c=246;
a=c/100%9;
b=(-1)&&(-1);
printf("%d,%d\n",a,b);
}
输出结果是:
A
A)2,1B)3,2C)4,3D)2,-1
(第四章逻辑运算符)
(9)以下程序运行后,输出结果是:
C
A)cdeB)字符c的ASCII码值C)字符c的地址D)出错
main()
{char*s="abcde";
s+=2;
printf("%ld\n",s);
}
(第九章指针的概念)
(10)若要求在if后一对圆括号中表示a不等于0的关系,则能正确表示这一关系的表达式为:
D
A)a<>0B)!
a
C)a=0D)a
(第4章条件表达式)
(11)有如下程序段,其输出结果是什么:
A
main()
{inta=1,b=3,c=5;
if(c=a+b)
printf("yes\n");
elseprintf("no\n");}
A)yesB)noC)yes\nD)no\n
(第4章条件语句)
(12)假设在程序中a,b,c均被定义成整型,并且已赋大于1的值,则下列能正确表
1
示代数式-----的表达式是:
D
abc
A)1/a*b*c
B)1/(a*b*c)
C)1/a/b/(float)c
D)1.0/a/b/c
(第二章类型混合运算)
(13)若i,j已定义为int类型,则以下程序段中内循环体的总的执行次数是:
A
for(i=5;i;i--)
for(j=0;j<4;j++){...}
A)20B)15
C)24D)16
(第五章for循环语句)
(14)下面哪个程序段不是死循环:
C
(A)a=0;sum=0;
while(a=1)
{sum=sum+a;a++;}
(B){intI,sum=0;
For(i=1;i<=3;sum++)
sum+=I;
}
(C)sum=0;
for(i=1;i<10;i++);
sum=sum+i;
(D)sum=0;
for(i=1;;i++)
sum=sum+i;
(第五章for循环语句)
15、设有以下定义:
inta[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};
int(*prt)[3]=a,*p=a[0]
则下列能够正确表示数组元素a[1][2]的表达式是:
D
A)*((*prt+1)[2])B)*(*(p+5))
C)(*prt+1)+2D)*(*(a+1)+2)
16、不能把字符串:
Hello!
赋给数组b的语句是:
B
A)charb[10]={'H','e','l','l','o','!
'};
B)charb[10];b="Hello!
";
C)charb[10];strcpy(b,"Hello!
");
D)charb[10]="Hello!
";
17、设有以下定义:
inta[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};
int(*prt)[3]=a,*p=a[0]
则下列能够正确表示数组元素a[1][2]的表达式是:
D
A)*((*prt+1)[2])B)*(*(p+5))
C)(*prt+1)+2D)*(*(a+1)+2)
18、请选出以下语句的输出结果:
A
printf("%d\n",strlen("\t\"\065\xff\n"));
A)5B)14C)8D)输出项不合法,无正常输出
(19)假定所有变量均已正确说明,下列程序段运行后x的值是:
B
a=b=c=0;x=35;
if(!
a)x--;
elseif(b);
if(c)x=3;
elsex=4;
A)34B)4C)35D)3
(第四章if语句)
(20)运行以下程序后,如果从键盘上输入china#<回车>,则输出结果为:
C
A)2,0B)5,0C)5,5D)2,5
#include
main()
{intv1=0,v2=0;
charch;
while((ch=getchar())!
='#')
switch(ch)
{case'a';
case'h';
default;v1++;
case'0';v2++;
}
printf("%d,%d\n",v1,v2);
}
(第四章switch语句)
(21)执行以下程序段时:
A
A)循环体将执行一次B)循环体将执行两次
C)循环体将执行无限次D)系统将提示有语法错误
x=-1;
do{x=x*x;}while(!
x);
(第五章do_whule语句)
(22)执行下面的程序后,a的值为:
B
main()
{inta,b;
for(a=1,b=1;a<=100;a++)
{if(b>=20)break;
if(b%3==1)
{b+=3;
continue;
}b-=5;
}
}
A)7B)8
C)9D)10
(第5章break,continue语句)
23)下面能正确进行字符串赋值操作的语句是:
C
A)chars[5]={"ABCDE"};B)chars[5]={'A','B','C','D','E'};
C)char*s;s="ABCDEF";D)char*s;scanf("%s",s);
(第6章字符数组的定义;第9章字符串指针)
(24)不能把字符串:
Hello!
赋给数组b的语句是:
B
A)charb[10]={'H','e','l','l','o','!
'};
B)charb[10];b="Hello!
";
C)charb[10];strcpy(b,"Hello!
");
D)charb[10]="Hello!
";
(第6章字符数组的使用)
(25)函数调用:
strcat(strcpy(str1,str2),str3)的功能是:
C
A)将串str1复制到串str2中后再连接到串str3之后
B)将串str1连接到串str2之后再复制到串str3之后
C)将串str2复制到串str1中后再将串str3连接到串str1之后
D)将串str2连接到串str1之后再将串str1复制到串str3中
(第6章字符串处理函数)
(26)给出以下定义:
charx[]="abcdefg";
chary[]={'a','b','c','d','e','f','g'};
则正确的叙述为:
C
A)数组X和数组Y等价B)数组x和数组Y的长度相同
C)数组X的长度大于数组Y的长度D)数组X的长度小于数组Y的长度
(第6章字符数组的定义)
(27)以下程序的输出结果是:
D
A)AfghdEFGB)AbfhdC)AfghdD)Afgd
#include
main()
{char*p1,*p2,str[50]="ABCDEFG";
p1="abcd";p2="efgh";
strcpy(str+1,p2+1);strcpy(str+3,p1+3);
printf("%s",str);
}
(第6章字符串处理函数;第9章字符串指针)
(28)下面哪个程序段编译会出错:
D
A)max(intx,inty,int*z)B)max(intx,inty)
{*z=x>y?
x:
y;}{returnx>y?
x:
y;}
C)max(intx,inty)D)intmax(intx,y)
{intz;{intz
z=x>y?
x:
y;z=x>y?
x:
y;
returnz;}returnz;}
(29)下列程序执行后输出的结果是:
D
#include〈stdio.h〉
f(inta)
{intb=0;
staticc=3:
a=c++,b++;
returu(a);
}
main()
{inta=2,i,k;
for(i=0;i<2;i++)
k=f(a++);
printf("%d\n",k);
}
A)3B)0C)5D)4
(第7章静态变量)
(30)下列程序执行后输出的结果是:
A
intd=1;
fun(intq)
{intd=5;
d+=q++;
printf("%d".d);
}
main()
{inta=3;
fun(a);
d+=a++;
printf("%d\n",d);
}
A)84B)96C)94D)85
(第7章函数调用;第3章复合赋值运算符)
(31)以下程序的输出结果是:
D
main()
{intx=10,y=10;
printf("%d%d\n",x--,--y);
}
A)1010B)99
C)910D)109
(第7章函数调用时,参数结合方式:
右结合)
(32)有以下程序
intfun(intx,inty,int*cp,int*dp)
{*cp=x+y;*dp=x-y;}
main()
{inta,b,c,d;
a=30;b=50;
fun(a,b,&c,&d);
printf("%d,%d\n",c,d);
}
输出结果是:
C
A)50,30B)30,50C)80,-20D)80,20
(第7章函数调用;第9章指针变量做参数)
(33)执行下面的程序后,a的值是:
B
#defineSQR(X)X*X
main()
{inta=10,k=2,m=1;
a/=SQR(k+m)/SQR(k+m);
printf("%d\n",a);
}
A)10B)1C)9D)0
(第8章带参宏定义)
(34)以下有关宏替换的叙述不正确的是:
D
A)宏替换不占用运行时间B)宏名无类型
C)宏替换只是字符替换D)宏名必须用大写字母表示
(第8章宏定义)
(35)C语言的编译系统对宏命令的处理是:
D
A)在程序运行时进行的
B)在程序连接时进行的
C)和C程序中的其它语句同时进行编译的
D)在对源程序中其它成份正式编译之前进行的
(第8章宏定义运行特点)
(36)若有宏定义如下:
#defineX5
#defineYX+1
#defineZY*X/2
则执行以下printf语句后,输出结果是:
D
inta;a=Y;
Printf("%d\n",Z);
Printf("%d\n",--a);
A)7B)12C)12D)7
6655
(第7章函数调用;第8章带参宏定义)
37、若有以下的定义:
intt[3][2];能正确表示t数组元素地址的表达式是:
D
A)&t[3][2] B)t[3][2]C)t[1][0]D)t[2]+1
38、若已定义x和y为double类型,则表达式:
x=1,y=x+3/2的值是:
C
A)1B)2
C)2.0D)2.5
39、当c的值不为0时,在下列选项中能正确将c的值赋给变量a、b的是:
C
A)c=b=a;B)(a=c)‖(b=c);
C)(a=c)&&(b=c);D)a=c=b;
40、C语言的编译系统对宏命令的处理是:
D
A)在程序运行时进行的
B)在程序连接时进行的
C)和C程序中的其它语句同时进行编译的
D)在对源程序中其它成份正式编译之前进行的
(41)请读程序:
#defineADD(x)x+x
main()
{
intm=1,n=2,k=3;
intsum=ADD(m+n)*k;
printf("sum=%d",sum);
}
上面程序的运行结果是:
B
A)sum=9B)sum=10C)sum=12D)sum=18
(第8章带参宏定义)
(42)在宏定义#definePI3.14159中,用宏名PI代替一个:
D
A)常量B)单精度数C)双精度数D)字符串
(第8章宏定义)
(43)设有以下定义:
inta[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};
int(*prt)[3]=a,*p=a[0]
则下列能够正确表示数组元素a[1][2]的表达式是:
D
A)*((*prt+1)[2])B)*(*(p+5))
C)(*prt+1)+2D)*(*(a+1)+2)
(第9章数组指针与指向主组的指针)
44、能正确表示“当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)
45、在C语言中,合法的长整型常数是:
A
A)0LB)4962710C)0.054838743D)2.1869e10
46、下列4个函数中,:
C能实现交换变量值的功能。
A)voidfun_a(intx,inty)B)voidfun_b(int*x,int*y)
{int*p;{int*p;
*p=x;x=y;y=*p;}*x=*y;*y=*x;}
C)voidfun_c(int*x,int*y)D)voidfun_d(intx,inty)
{*x=*x+*y;{intp;
*y=*x-*y;p=x;x=y;y=p;
*x=*x-*y;}}
47、请选出合法的C语言赋值语句:
B
A)a=b=58B)i++;
C)a=58,b=58D)k=int(a+b)
48、下列程序的输出结果是:
C
main()
{inta[5]={2,4,6,8,10},*P,**k;
p=a;
k=&p;
printf("%d",*(p++));
printf("%d\n",**k);
}
A)44B)22C)24D)46
49、以下说法中正确的是:
C
A)#define和printf都是C语句B)#define是C语句,而printf不是
C)printf是C语句,但#define不是D)#define和printf都不是C语句
50、有以下程序
#include
main()
{inta,b,c=246;
a=c/100%9;
b=(-1)&&(-1);
printf("%d,%d\n",a,b);
}
输出结果是:
A
A)2,1B)3,2C)4,3D)2,-1
51、若要求在if后一对圆括号中表示a不等于0的关系,则能正确表示这一关系的表达式为:
D
A)a<>0B)!
a
C)a=0D)a
52、假定所有变量均已正确说明,下列程序段运行后x的值是:
B
a=b=c=0;x=35;
if(!
a)x--;
elseif(b);
if(c)x=3;
elsex=4;
A)34B)4C)35D)3
53、执行以下程序段时:
A
A)循环体将执行一次B)循环体将执行两次
C)循环体将执行无限次D)系统将提示有语法错误
x=-1;
do{x=x*x;}while(!
x);
54、以下程序的输出结果是:
D
A)AfghdEFGB)AbfhdC)AfghdD)Afgd
#include
main()
{char*p1,*p2,str[50]="ABCDEFG";
p1="abcd";p2="efgh";
strcpy(str+1,p2+1);strcpy(str+3,p1+3);
printf("%s",str);
}
55、以下程序的输出结果是:
D
main()
{intx=10,y=10;
printf("%d%d\n",x--,--y);
}
A)1010B)99
C)910D)109
二、简单题:
(1)简述C语言中有哪几种语句,并举例?
(P43)
5种。
(控制、函数、表达式、空、复合语句)
(2)分别各列出两种C语言中的输入输出函数,并例举出每个函数的使用格式?
Getchar();putchar();printf();scanf()(p48)
(3)简述C语言中三种循环结构的特点。
(p84)
while;do_while;for
(4)简述C语言中全局变量与局部变量的区别,以及对程序调用的影响?
(P146)
全局:
函数体外定义的变量;局部:
函数体内定义的变量;
全局对各个程序中的修改都起作用。
(5)简述C语言中动态变量与静态变量的区别,以及对程序调用的影响?
(P150)
动态:
auto;静态:
static,静态变量存储在专用的静态存储区中,在函数结束是不会消失,下次对函数调用有起作用,直到整个程序运行结束才消失。
(6)分析数组指针和指向数组的指针有何区别?
(p190)
定义方式不同;意义不同。
(7)分析什么是形式参数,实际参数?
比较实际参数是数组名和数组元素时有何区别?
(p123)
数组元素是一般值传递,数组名是传递的地址,因此,对主调函数的影响也不同。
(8)简述文件操作的步骤?
(p292)
1、文件指针的定义2、文件打开3、文件读写4、文件关闭
(9)C语言中十进制、八进制、十六进制表示的方法是什么?
十进制数100表示为八进制、十六进制分别是什么?
(0144,0X64)
(10)简述break;和continue;语句的不同?
break;跳出循环结构,执行循环结构后面的语句。
continue;跳出本次循环,回到循环开头重新执行。
(11)、分别各列出两种C语言中的输入输出函数,并例举出每个函数的使用格式?
printf,scanf,getchar,putchar
(12)、有如下定义:
inta[10],*p=a;和floata[10],*p=a;若执行p++;后,p增值是否相同?
并说明其原因?
不一样,不同数据类型存储占用空间不一样。
三、编程复习题
【程序1】
题目:
输入三个整数x,y,z,请把这三个数由小到大输出。
1.程序分析:
我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,
然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。
2.程序源代码:
main()
{
intx,y,z,t;
scanf("%d%d%d",&x,&y,&z);
if(x>y)
{t=x;x=y;y=t;}/*交换x,y的值*/
if(x>z)
{t=z;z=x;x=t;}/*交换x,z的值*/
if(y>z)
{t=y;y=z;z=t;}/*交换z,y的值*/
printf("smalltobig:
%d%d%d\n",x,y,z);
}
-----------------------------------------------------------------------------
【程序2】
题目:
输出9*9口诀。
1.程序分析:
分行与列考虑,共9行9列,i控制行,j控制列。
2.程序源代码:
#include"stdio.h"
main()
{
inti,j,result;
printf("\n");
for(i=1;i<10;i++)
{for(j=1;j<10;j++)
{
result=i*j;
printf("%d*%d=%-3d",i,j,result);/*-3d表示左对齐,占3位*/
}
printf("\n");/*每一行后换行*/
}
}
-------------------------------------------------------------