c语言复习题.docx
《c语言复习题.docx》由会员分享,可在线阅读,更多相关《c语言复习题.docx(30页珍藏版)》请在冰豆网上搜索。
![c语言复习题.docx](https://file1.bdocx.com/fileroot1/2023-6/12/b43dce6a-7fc4-4d59-99e4-86c86b8e1f42/b43dce6a-7fc4-4d59-99e4-86c86b8e1f421.gif)
c语言复习题
思考题
不仅要会做这些题,更重要的是要掌握其相关知识点
一、一般填空题
1-1、调用fopen函数打开一文本文件,在“打开模式”这一项中,为输出(写)而打开需填入【1】.
1-2、调用fopen函数打开一文本文件,在“打开模式”这一项中,为追加而打开需填入【1】.
1-3、fopen函数的原形在头文件【1】中.
1-4、getchar函数的原形在头文件【1】中.
1-5、sqrt函数的原形在头文件【1】中.
1-6、如果函数不要求带回值,可用【1】来定义函数返回值为空.
答案:
w或w+;a或a+;;;;void.
2-1、字符串“\1011234\\at”的长度(字符数)是【1】.
2-2、字符串“abc\103\\bcd”的长度(字符数)是【1】.
2-3、字符串“1\\t\x43\abx44”的长度(字符数)是【1】.
2-4、“a“在内存中占【1】个字节.
2-5、‘a’在内存中占【1】个字节.
2-6、“\71“在内存中占【1】个字节.
2-7、一维数组下标的最小值是【1】;数组chara[]=“china”;在内存应占【1】个字节。
答案:
8;8;9;2;1;2;0;6.
3-1、设x=(5>1)+2,x的植为【1】.
3-2、表达式‘B’+15+‘\x41’+011+0x10的值是【1】.
3-3、表达式‘b’+5+‘\x42’+011+0x10的值是【1】.
答案:
3;171;194;
4-1、假设所有变量都为整型,表达式(a=2,b=5,a>ba++:
b++,a+b)的值是【1】.
4-2、if(!
a)中的表达式!
a等价于【1】.
4_3、已知a=1,b=2,c=3,执行if(a>b>c)b=a;elseb=c;a=4;b=8;后,b的值是【1】.
答案:
8;a==0;8;
5-1、若所用变量都已定义,下列程序段的执行结果是【1】.
for(i=1;i<=5;i++);printf(“OK\n”);
5-2、执行语句chars[3]=”ab”,*p;p=s;后,*(p+2)的值是【1】.
5-3、若有以下定义和语句:
inta[4]={0,1,2,3},*p;p=&a[2];,则*--p的值是【1】.
5-4、下列程序的输出结果是【1】,main(){inta=011;printf(“%d\n”,++a);}
答案:
OK;’\0’;1;10
6-1、若宏定义为:
#definey(x)2+x,则表达式a=3*y(3)的值为【1】.
6-2、若宏定义为:
#definey(x)2+x,则表达式a=4*y
(2)的值为【1】.
6-3、若宏定义为:
#definey(x)2/x,则表达式a=4+3*y(3)的值为【1】.
答案:
9;10;6.
二、单项选择题
1-1、若以"a+"方式打开一个已存在的文件,则以下叙述正确的是()。
A:
文件打开时,原有文件内容不被删除,位置指针移到文件末尾,可作添加和读操作
B:
文件打开时,原有文件内容不被删除,位置指针移到文件开头,可作重写和读操作
C:
文件打开时,原有文件内容被删除,只可作写操作
D:
以上各种说法皆不正确
1-2、若执行fopen函数时发生错误,则函数的返回值是()。
A:
地址值B:
0C:
1D:
EOF
1_3、若要打开A盘上user子目录下名为的文件进行读、写操作,符合要求的是()。
A:
fopen(“A:
\user\”,“r”)B:
fopen(“A:
\\user\\”,“r+”)
C:
fopen(“A:
\user\”,“rb”)D:
fopen(“A:
\\user\\”,“w”)
答案:
A;B;B;
2-1、以下属于c语言预先规定的保留字是()。
A:
intB:
scoreC:
averD:
sum
2-2、下列运算符中优先级最高的是()。
A:
+C:
&&D:
!
=
2-3、下面不正确的字符串常量是()。
A:
‘abc’B:
’’12’12”C:
”0”D:
”“
2-4、运算对象必须是整型的运算符是()。
A:
%B:
/C:
=D:
<=
2-5、下面错误的常量是()。
A:
0xffB:
0.5C:
2LD:
’\72’
2-6、下列变量定义语句中,正确的是()。
A:
char:
abc;B:
chara;b;c;C:
intx;z;D:
intx,z;
2-7、sizeof(float)是()。
A:
一个双精度型表达式B:
一个整型表达式C:
一种函数调用D:
不合法表达式
2_8、c语言的注释语句开头必须是()。
A:
/B:
*C:
/*D:
’
2_9、设以下变量均为int类型,则值不等于7的表达式是()。
A:
(x=y=6,x+y,x+1)B:
(x=y=6,x+y,y+1)C:
(x=6,x+1,y=6,x+y)D:
(y=6,y+1,x=y,x+1)
2_10、C程序的语句结束符是()。
A:
;B:
:
C:
.D:
换行
2_11、C语言中用于结构化程序设计的三种基本结构是()。
A:
顺序结构、选择结构和循环结构B:
if、switch、break
C:
for、while、do-whileD:
if、for、continue
2_12、C语言中,int、char和short三种类型的数据在内存中占用的字节数()。
A:
由用户自己定义B:
均为两个字节C:
是任意的D:
由所用机器的字长决定
答案:
A;B;A;A;B;D;B;C;C;A;A;D;
3-1、在一个c程序中()。
A:
main函数必须出现在所有函数之前B:
main函数的位置没有特别限制
C:
main函数必须出现在所有函数之后D:
main函数必须出现固定位置
3-2、已知函数原形声明为:
floatwww(chara,charb);该函数的类型为()。
A:
指向字符型的指针B:
字符型C:
浮点型D:
指向浮点型的指针
3-3、与实际参数为整型数组名相对应的形式参数不可以定义为()。
A:
inta[];B:
int*a;C:
inta;D:
inta[3];
3_4、全局变量的定义不可能在()。
A:
函数内部B:
函数外面C:
文件外面D:
最后一行
3_5、putchar函数可以向终端输出一个()。
A:
整型变量表达式的值B:
实型变量的值C:
字符串D:
字符或字符型变量值
3_6、数组名作为实际参数传给函数时,数组名被处理为()。
A:
数组的长度B:
数组的元素个数C:
数组的首地址D:
数组中各元素的值
3_7、C语言中,当调用函数时()。
A:
实参和虚参本身各占一个独立的存储单元B:
实参和虚参可以共用存储单元
C:
实参和虚参可以由用户指定是否共用存储单元D:
由计算机自动确定是否共用存储单元
3_8、调用函数时,实参和虚参必须保持一致的是()。
A:
在个数上B:
在类型上C:
在顺序上D:
在个数、类型、顺序上
答案:
B;C;D;A;D;C;A;D;
4-1、inta=3,b=2,c=1;if(a>b>c)a=b;elsea=c;则a的值为()。
A:
3B:
2C:
1D:
0
4-2、下列程序的输出为()。
main()
{inty=10;while(y--);printf("y=%d\n",y);}
A:
y=0B:
while构成无限循环C:
y=1D:
y=-1
4-3、假设所有变量都为整型,表达式(a=2,b=5,a>ba++:
b++,a+b)的值是().
A:
7B:
8C:
9D:
2
4-4、以下程序的输出结果是()。
main()
{inti=010,j=10;printf("%d,%d\n",++i,j--);}
A:
11,10B:
9,10C:
10,9D:
10,9
4_5、设a=2,且a定义为整型变量,执行语句a+=a-=a*=a;后,a的值为()。
A:
12B:
144C:
0D:
132
4-6、inta=1,b=2,c=3;if(a>c)a=b;a=c;c=b;则c的值为()。
A:
1B:
2C:
3D:
不一定
4-7、若变量a与i已正确定义,且i已正确赋值,合法的语句是()。
A:
a==1B:
++i;C:
a=a++=5;D:
a=int(i);
4_8、strlen(“12\0345\n”)与strlen(“12\0845\n”)的测试结果分别是。
A:
相同B:
2和5C:
5和2D:
5和5
4_9、设chars[10]="\ta\017bc";则数组s所占的字节数是()。
A:
9B:
10C:
6D:
7
4_10、设char*s="\ta\017bc";则指针变量s指向的字符串所占的字节数是()。
A:
9B:
5C:
6D:
7
4_11、若i=3,则printf("%d",-i++);输出的值和i的值分别为()。
A:
相同B:
-3和4C:
5和2D:
5和5
答案:
C;D;B;B;C;B;B;C;B;C;B;
5-1、一维数组定义的格式为:
类型说明符数组名()。
A:
[常量表达式]B:
[整型表达式]C:
[整型常量]或[整型表达式]D:
[整型常量]
5-2、以下能正确定义数组并正确赋初值的邮局语句是()。
A:
intN=5,b[N][N];B:
inta[1][2]={{1},{3}};
C:
intc[2][]={{1,2},{3,4}};D:
intd[3][2]={{1,2},{34}};
5_3、以下不正确的定义语句是()。
A:
doublex[5]={,,,,};B:
inty[5]={0,1,3,5,7,9};
C:
charc1[]={‘1’,’2’,’3’,’4’,’5’};D:
charc2[]={‘\x10’,’\xa’,’\x8’};
5_4、在C语言中,引用数组元素时,其数组下标的数据类型允许是()。
A:
整型常量B:
整型表达式C:
整型常量或整型表达式D:
任何类型的表达式
5_5、若有说明:
inta[10];则对a数组元素的正确引用是()。
A:
a[10]B:
a[3,5]C:
a(5)D:
a[10-10]
3_6、下列数组定义中,正确的是()。
A:
inta[][4];B:
inta[][];C:
inta[][][5];D:
inta[3][];
5_7、若有说明:
inta[10];则对a数组元素的正确引用是()。
A:
a[10]B:
a[3,5]C:
a(5)D:
a[3>1]
答案:
A;D;B;C;D;A;D;
6-1、相同结构体类型的变量之间可以()。
A:
相加B:
赋值C:
比较大小D:
地址相同
6_2、结构体类型的定义允许嵌套是指()。
A:
成员是已经或正在定义的结构体型B:
成员可以重名
C:
结构体型可以派生D:
定义多个结构体型
6_3、有如下定义:
structstudent{charname[20];intage;}wang,*p;p=&wang;,以下不合法的引用为()。
A:
B:
C:
p->ageD:
(*p).age
6_4、在定义构造数据类型时,不能()。
A:
说明变量B:
说明存储类型C:
初始化D:
末尾不写分号
6_5、当定义一个结构体变量时,系统分配给它的内存是()。
A:
各成员所需内存量的总和B:
结构中第一个成员所需内存量
C:
结构中最后一个成员所需内存量D:
成员中占内存量最大者所需的容量
6_6、enuma{sum=9,mon=-1,tue};定义了()。
A:
枚举变量B:
3个标识符C:
枚举数据类型D:
整数9和-1
6_7、以下各选项企图说明一种新的类型名,其中正确的是()。
A:
typedefv1int;B:
typedefv2=int;
C:
typedefintv3;D:
typedefv4:
int;
答案:
B;A;A;D;A;C;C;
7-1、若宏定义为:
#definey2+3,则表达式y*3+3的值为().
A:
14B:
16C:
18D:
20
7-2、若宏定义为:
#definey2+3,则表达式2+y*3的值为().
A:
11B:
13C:
15D:
17
7_3、有宏定义为#defineY(a,b)a+b,则表达式2+Y(2,3)*3的值为().
A:
11B:
13C:
15D:
17
答案:
A;B;B;
8-1、如有int*p,a=5,b;定义,则以下正确的程序段为()。
A:
p=&b;scanf(“%d’,&p);B:
p=&b;scanf(“%d’,*p);
C:
scanf(“%d’,&b);p=b;D:
p=&b;p=a;
8-2、若有语句:
inta[3][4],*p[3]={a[0],a[1],a[2]};不能表示a[2][3]的元素的是()。
A:
*(*(a+2)+3)B:
*(*(p+2)+3)C:
(p[2]+3)D:
(*(p+2))
8_3、p1,p2为指向浮点的指针变量,则下列运算错误的是()。
A:
*p1-*p2B:
p1++C:
*p1%*p2D:
p1-p2
8_4、有以下定义:
inta[2][3];,则对数组元素的正确引用()是。
A:
*(*(a+i)+j)B:
(a+i)[j]C:
*(a+i+j)D:
a[i]+j
8_5、若有定义:
int(*p)();,则该指针为()。
A:
指向整型的指针B:
指向字符型的指针C:
指向整型函数的指针D:
指向字符型函数的指针
8_6、下列正确的定义是()。
1inti,*p=&i;②int*p=&i,i;③int*p,i;p=&i;④int*p,i;p=i;⑤int*p,i,p=&i;
A:
①③B:
②④C:
②⑤D:
④①
答案:
D;D;C;A;C;A;
三、多项选择题
1_1、下列选项中合法的标识符有()。
A:
good_morningB:
mainC:
D:
8abc
答案:
AB;
1_2、下列选项中合法的用户标识符有()。
A:
pageB:
shortC:
_3comD:
int
答案:
AC;
1_3、下列选项中合法的用户标识符有()。
A:
returnB:
f2_G3C:
a3-3D:
abc
答案:
BD;
1_4、以下叙述正确的是()。
A:
C语言严格区分大小写英文字母。
B:
C语言用“;”作为语句分隔符。
C:
C程序书写格式自由:
一行内可以写几个语句,一个语句也可以写在几行。
D:
可以使用/*…*/对C程序中的任何部分作注释。
答案:
ABCD;
1_5、下列对逻辑运算符两侧的运算对象的数据类型描述不正确的是()。
A:
只能是0或1;B:
只能是0或非0正数;
C:
可以是整型或字符型数据;D:
可以是任何类型的数据;
答案:
AB;
1_6、以下对switch语句和break语句中描述错误的有()。
A:
在switch语句中必须使用break语句;B:
break语句只能用于switch语句;
C:
在switch语句中可以根据需要使用或不使用break语句;D:
break语句是switch语句的一部分;
答案:
ABD;
2_1、已定义c为字符型变量,则下列语句中错误的是()。
A:
c=’97’;B:
c=”97”;C:
c=97;D:
c=”a”;
答案:
ABD;
3_1、以下正确的是()。
A:
预处理命令行必须以‘#’开始。
B:
以‘#’开始的都是预处理命令行。
C:
程序在执行过程中对预处理命令行进行处理。
D:
#defineABCD是正确的宏定义。
答案:
ABD;
4_1、在定义inta[2][3]之后,对a[i][j]的正确引用有()。
A:
a[0][2]B:
a[1,3]C:
a[1>2][!
1]D:
a[2][0]
答案:
AC;
4_2、以下对二维数组a正确初始化的是()。
A:
staticcharword[]=’Turbo\0’;B:
staticcharword[]={‘T’,’u’,’r’,’b’,’o’,’\0’};
C:
staticcharword[]={“Turbo\0”};D:
staticcharword[]=”Turbo\0”;
答案:
BCD;
5_1、以下4个选项中可以看作是一条语句的有()。
A:
{;}B:
a=0,b=0,c=0;C:
if(a>0);D:
if(b==0)m=1;n=2;
答案:
ABC;
5_2、若a、b、c、d都是int型变量且已赋初值0,则正确的赋值语句是()。
A:
a=b=c=d=100;B:
d++;C:
c+b;D:
d=(c=22)-(b++);
答案:
ABD;
5_3、设有以下定义:
inta=0;doubleb=;charc=’A’;
#difined2,则正确的语句是()。
A:
a++;B:
b++;C:
c++;D:
d++;
答案:
ABC;
6_1、以下述说中正确的是()。
A:
一个c源程序可以由一个或多个函数组成。
B:
一个c源程序必须包含一个main()函数。
C:
c源程序的基本组成单位是函数。
D:
在c源程序中,注释说明只能位于一条语句的最后。
答案:
ABC;
6_2、以下对C语言中的函数描述不正确的是()。
A:
可以嵌套定义,不可以嵌套调用。
B:
不可以嵌套定义,可以嵌套调用。
C:
可以嵌套定义,也可以嵌套调用。
D:
嵌套定义和嵌套调用都不允许。
答案:
ACD;
四、程序填空
1、功能:
计算平均成绩并统计90分以上人数。
成绩数据以一负数作为结束标志。
#include<>
voidmain(void)
{
intn,m;floatgrade,average;
/***********SPACE***********/
average=n=m=【】;
while
(1)
{
/***********SPACE***********/
【】("%f",&grade);
if(grade<0)break;
n++;
average+=grade;
/***********SPACE***********/
if(grade<90)【】;
m++;
}
if(n)printf("%.2f%d\n",average/n,m);
}
答案:
1).0或2).scanf3).Continue
2、功能:
找出一维数组中最大值和此元素的下标,数组元素的值由键盘输入。
#include""
voidmain()
{
inta[10],*p,*s,i;
for(i=0;i<10;i++)
/***********SPACE***********/
scanf("%d",【】);
/***********SPACE***********/
for(p=a,s=a;【】<10;p++)
if(*p>*s)s=p;
/***********SPACE***********/
printf("max=%d,index=%d\n",【】,s-a);
}
答案:
1).a+i或&a[i]2).p-a或-a+p3).*s
3、功能:
输入学生成绩并显示。
#include<>
structstudent
{
charnumber[6];
charname[6];
intscore[3];
}stu[2];
voidoutput(structstudentstu[2]);
voidmain(void)
{
inti,j;
/***********SPACE***********/
for(i=0;i<2;【】)
{
printf("请输入学生%d的成绩:
\n",i+1);
printf("学号:
");
/***********SPACE***********/
scanf("%s",【】.number);
printf("姓名:
");
scanf("%s",stu[i].name);
for(j=0;j<3;j++)
{
printf("成绩%d.",j+1);
/***********SPACE***********/
scanf("%d",【】.score[j]);
}
printf("\n");
}
output(stu);
}
voidoutput(structstudentstu[2])
{
inti,j;
printf("学号姓名成绩1成绩2成绩3\n");
for(i=0;i<2;i++)
{
printf("%-6s%-6s",stu[i].number,stu[i].name);
for(j=0;j<3;j++)
printf("%-8d",stu[i].score[j]);
printf("\n");
}
}
答案:
1).i++或++i或i=i+1或i+=1
2).stu[i]
3).&stu[i]
4、功能:
输入两个整数x,y,请把这两个数由小到大输出。
#include<>
voidmain(void)
{
intx,y,t;
/***********SPACE***********/
scanf("%d%d",【】);
/***********SPACE***********/
if(【】)
/***********SPACE***********/
{【】}
printf("smalltobig:
%d%d\n",x,y);
}
答案:
1).&x,&y或&y,&x
2).x>y或x>=y或y3).t=y;y=x;x=t;或t=y,y=x,x=t;或t=x;x=y;y=t;或t=x,x=y,y=t;
5、功能:
输出结果为:
*****
*****
*****
*****
#include<>
voidmain(void)
{
/***********SPACE***********/
staticchar【】={'*','*','*','*','*'};
inti,j,k;
charspace='';
for(i=0;i<5;i++)
{
printf("\n");
for(j=1;j<=3*i;j++)
/***********SPACE***********/
printf("%1c",【】);
/***********SPACE***********/
fo