C语言习题库.docx
- 文档编号:28496435
- 上传时间:2023-07-15
- 格式:DOCX
- 页数:54
- 大小:34.76KB
C语言习题库.docx
《C语言习题库.docx》由会员分享,可在线阅读,更多相关《C语言习题库.docx(54页珍藏版)》请在冰豆网上搜索。
C语言习题库
C语言习题库
第一章C语言概述
一、单选题
(1)一个C程序的执行是从
A、本程序的MAIN函数开始,到MAIN函数结束。
B、本程序文件的第一个函数开始,到本程序文件的最后一个函数结束。
C、本程序的MAIN函数开始,到本程序的最后一个函数结束。
D、本程序文件的第一个函数开始,到本程序的MAIN函数结束。
(2)以下叙述正确的是
A、在C程序中,MAIN函数必须位于程序的最前面。
B、C程序的每行中只能写一条语句。
C、C语言本身没有输入输出语句。
D、在对一个C程序进行编译的过程中,可发现注释中的拼写错误。
(3)C语言规定,在一个源程序中,MAIN主函数的位置是在:
C
A、必须在最前面。
B、必须在系统调用的库函数的后面
C、可以在任意位置。
D、必须在最后面
(4)一个C程序是由:
A、一个主程序和若干子程序组成
B、函数组成
C、若干过程组成
D、若干子程序组成
(5)以下叙述不正确的是:
D
A、一个C源程序可由一个或多个函数组成
B、一个C源程序必须包含一个MAIN函数
C、C程序的基本组成单位是函数
D、在C程序中,注释说明只能位于一条语句的后面
二、填空题
(1)C源程序的基本单位是()
(2)一个C源程序至少应包括一个()
(3)在一个C源程序中,注释部分两侧的分界符分别为()和()
(4)在C语言中,输入操作是由库函数()完成的,输出操作是由库函数()完成的。
第二章数据类型、运算符与表达式
一、单选题
(1)若x,i,j,k都是int型变量,则计算下面表达式后,x的值为C
x=(i=4,j=16,k=32)
A、4
B、16
C、32
D、52
(2)下列四组选项中,均不是C语言键字的选项是
A、define,IF,type
B、getc,char,printf
C、include,scanf,case
E、if,struct,type
(3)下面四个选项中,均是不合法的用户标识符的选项是
A、A,P_0,do
B、float,1a0,_A
C、b-a,goto,int
D、_123,temp,INT
(4)若有代数式3ae/bc,则正确的C语言表达式是
A、a/b/c*e*3
B、3*a*e/bc
C、3*a*e/b*c
D、a*e/c/b*3
(5)已知各变量的类型说明如下:
intk,a,b;
unsingedlongw=5;
doublex=1.42;
则以下不符合C语言语法的表达式是
A、x%(-3)
B、w+=-2;
C、k=(a=2,b=3,a+b)
D、a+=a-=(b=4)*(a=3)
二、填空题
(1)在C语言中(以16位机为例),一个char型数据在内存中所占的字节数为(),一个int型数据在内存中所占的字节数为()。
(2)在C语言中,实型变量分为两种类型,它们是()和()。
(3)若a是int型变量,则计算表达式a=25/3%3后,a的值为()。
(4)C语言中的标识符只能由三种字符组成,它们是(),()和()
(5)表达式8/4*(int)2.5/(int)(1.25*3.7+2.3)值的数据类型为()。
三、判断题
(1)C语言所提供的基本数据类型包括:
整型、实型和字符型。
(2)在C程序中,逗号运算符的优先级最低。
(3)当从键盘输入数据时,对整型变量只能输入整型数据,对实型变量只能输入实型数据。
(4)C语言中的标识符只能由字母、数字和下划线三种字符组成。
(5)在C语言中,char型的数据在内存中的存储形式是原码形式。
第三章简单C程序设计
一、单选题
(1)putchar函数可以向终端输出一个
A、整型变量表达式值
B、实型变量值
C、字符串
D、字符或字符型变量值
(2)若x,y均定义为int型,z定义为double型,以下合法的scanf函数调用语句是
A、scanf(“%d%lx,%le”,&x,&y,&z);
B、scanf(“%2d*%d%lf”,&x,&y,&z);
C、scanf(“%x%*d%o”,&x,&y,&z);
D、scanf(“%x%o%6.2f”,&x,&y,&z);
(3)当输入数据的形式为:
25,13,10<回车>时,以下程序的输出结果为D
main()
{intx,y,z;
scanf(“%d%d%d”,&x,&y,&z);
printf(“x+y+z=%d\n”,x+y+z);
}
A、x+y+z=48
B、x+y+z=35
C、x+z=35
D、不确定值
(4)以下能正确的定义整型变量a,b和c,并对它们赋初值为5的语句是
A、inta=b=c=5;
B、inta,b,c=5;
C、a=5,b=5,c=5;
D、a=b=c=5;
(5)若有以下定义,则不正确的赋值语句是
inta,b;floatx;
A、a=1,b=2;
B、b++;
C、a=b=5;
D、b=(int)x;
二、填空题
(1)以下程序的输出结果是()。
main()
{intx=1,y=2;
printf(“x=%dy=%d*sum*=%d\n”,x,y,x+y);
printf(“10squaredis:
%d\n”,10*10);
}
(2)以下程序的输出结果是()。
#include
main()
{inta=325;doublex=3.1415926;
printf(“a=%+06dx=%+e\n”,a,x,);
}
(3)假设变量a和b均为整型,以下语句可以下借助任何变量把a、b中的值进行交换。
请填空。
a+=();b=a-();a-=();
(4)设x,y和z都是int型变量,m为long型变量,则在16位微型机上执行下面的赋值语句后,x值为(),y值为(),z值为()。
y=(x=32767,x=-1);
z=m=0xFFFF
(5)若x为int型变量,则执行以下语句后x的值是()
x=7;
x+=x-=x+x;
三、判断题
(1)当输入一个实型数据时,格式控制部分应规定小数点后的位数,如scanf(“%4.2f”,&f)。
(2)整型变量的输出格式控制符只有%d一种。
(3)putchar函数可以向终端输出一个字符串。
(4)pirntf函数中用到格式符%5s,其中数字5表示输出的字符串占5列,如果字符串长度大于5,则输出按原字符长度从左向右全部输出。
(5)输入项可以是一个实型常量,如scanf(“%f”,2.3)。
第四章选择结构程序设计
一、单选题
(1)能正确表示“当x的值在[1,10]和[200,210]的范围为真,否则为假”的表达式是
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)
(2)以下程序的运行结果是
#include“stdio.h”
main()
{inta,b,d=241;
a=d/100%9;
b=(-1)&&(-1);
printf(“%d,%d”,a,b);
}
A、6,1
B、2,1
C、6,0
D、2,0
(3)请阅读以下程序:
main()
{inta=5,b=0,c=0;
if(a+b+c)printf(“***\n”);
elseprintf(“$$$\n”);
}
以上程序。
A)有语法错误不能通过编译
B)可以通过编译但不能直接通过连接
C)输出***
D)输出$$$
(4)以下程序的运行结果是。
main()
{intm=5;
if(m++>5)printf(“%d\n”,m);
elseprintf(“%d\n”,m——);
}
A)4
B)5
C)6
D)7
(5)为了避免在嵌套的条件语句中if-else中产生二义性,c语言规定:
else子句总是与相配对。
A)缩排位置相同的if
B)其之前最近的if
C)其之后最近的if
D)同一行上的if
二、填空题
(1)当a=3,b=2,c=1时,表达式f=a>b>c的值是()。
(2)在C语言中表示逻辑“真”值用()。
(3)设x,y,z均为int型变量,请写出描述“x或y中有一个小于z”的表达式().
(4)当m=2,n=1,a=1,b=2,c=3时,执行完d=(m=a!
=b)&&(n=b>c)后;n的值为(),m的值为()。
(5)有inta=3,b=4,c=5;则表达式a||b+c&&b==c的值为()。
三、判断题
(1)逻辑运算符两侧的运算对象可以是任何基本类型的数据。
(2)C语言中只提供了三种逻辑运算符:
&&,||,和!
。
(3)若a=6,b=4,c=3则表达式a&&b+c||b-c的值是0。
(4)关系运算式的结果都是逻辑值。
(5)若a=1,b=2,则表达式a>b?
a:
b+1的值是3。
四、编程题
(1)编程实现:
输入一个整数,判断它能否被子3,5,7整除,并输出以下信息之一:
1)能同时被3,5,7整除;
2)能被其中两数(要指出哪两个)整除;
3)能被其中一个数(要指出哪一个)整除;
4)不能被3,5,7任一个整除。
(2)用switch编程实现:
-1(x<0)
y=0(x=0)
1(x.0)
第五章循环控制
一、单选题
(1)设有程序段
intk=10
while(k=0)k=k-1
则下面描叙正确的是。
A)while(k=0)k=k-1;
B)循环是无限循环
C)循环体语句一次也不执行
D)循环体语句执行一次
(2)下面程序段的运行结果是。
intn=0;
while(n++<=2);printf(“%d”,n);
A)2
B)3
C)4
D)有语法错
(3)C语言中while和do-while循环的主要区别是。
A)do-while的循环体至少无条件执行一次
B)while的循环控制条件比do-while的循环控制条件严格
C)do-while允许从外部转到循环体内
D)do-while允许从外部转到循环体内
(4)以下能正确计算1*2*3*…*10的程序段是。
A)do{i=1;s=1;
s=s*i;
i++;
}while(I<=10);
B)do{i=1;s=0;
s=s*i;
i++;
}while(I<=10);
C)i=1;s=1;
do{s=s*i;
i++;
}while(I<=10);
D)i=1;s=0;
do{s=s*i;
i++;
}while(I<=10);
二、填空题
(1)执行下面程序段后,K值是()。
K=1;n=263;
Do{k*=n%10;n/=10}while(n);
(2)下面程序段中循环体的执行次数是()。
A=10;
B=0;
Do{b+=2;a-=2+b;}while(a>=0);
(3)下面程序段的运行结果是()。
X=2’
Do{printf(“*”);x--;}while(!
x==0);
(4)下面程序段的运行结果是()。
I=1;a=0;s=1;
Do{a=a+s*i;s=-s;i++;}while(i<=10)
Printf(“a=%d,a”);
(5)鸡兔共有30只,脚共有90个,下面程序段是计算鸡兔各有多少只,请填空。
For(x=1;x<=29;x++)
{y=30-x;
if()printf(“%d,%d\n”,x,y);
}
三、判断题
(1)设有以下程序段:
intx=0,s=0;
while(!
x!
=0)s+=++x;
printf(“%d”,s);
则运行该程序段后输出为:
0
(2)for循环只能应用于循环次数已经确定的情况。
(3)goto语句只能用于退出多层循环。
(4)switch语句中不能出现continue语句。
(5)只能用continue语句终止本次循环。
四、编程题
(1)每个苹果0.8元,第一天买2个苹果,第二天开始,每天买前一天的倍,直至购买的苹果个数达到不超过100的最大值。
编写程序求每天平均花多少钱?
(2)编写程序,从键盘输入6名学生的5门成绩,分别统计出每个学生的平均成绩。
第六章数组
一、选择题
(1)在c语言中,引用数组元素时,其数组下标的数据类型允许是____。
A)整型常量
B)整型表达式
C)整型常量或整型表达式
D)任何类型的表达式
(2)以下能对二维数组a进行正确初始化的语句是____。
A)inta[2][]={{1,0,1},{5,2,3,}};
B)inta[][3]={{1,2,3},{4,5,6}};
C)inta[2][4]={1,2,3,},{4,5},{6}};
D)inta[][3]={{1,0,1},{},{1,1}};)
(3)若有说明:
inta[3][4]={0};则下面正确的叙述是____。
A)只有元素a[0][0]可得到初值0
B)此说明语句不正确
C)数组a中各元素都可得到初值,但其值不一定为0
D)数组a中每个元素均可得到初值0
(4)下面程序___(每行程序前面的数字表示行号)。
1main()
2{
3floata[10]={0};
4inti
5for(i=0;i<3;i++)scanf(“%d”,&a[i];
6for(i=1;i<10;i++)a[0]=a[0]+a{i};
7printf(“%f\n”,a[0]);
8}
A)没有错误
B)第3行有错误
C)第5行有错误
D)第7行有错误
(5)若二维数组a有m列,则计算机一元素a[i][j]在数组中位置的公式为____。
(假设a[0][0]位于数组的第一个位置上。
)
A)i*m+j
B)j*m+i
C)i*m+j-1
D)i*m+j+1
二、填空题
(1)在C语言中,二维数组的定义方式为:
类型说明符 数组名()();
(2)在C语言中, 二维数组元素在内存中的存放顺序是()。
(3)若有定义:
doublex[3][5];则x数组中行下标的下限为(),列下标的上限为()。
(4)若二维数组a有m列,则计算机任一元素a[i][j]在数组中位置的公式为:
().(假设a[0][0]位于数组的第一个位置上。
)
(5)若有定义:
inta[3][4]={{1,2},{0},{4,6,8,10}};则初始化后,a[1][2]得到的初值是(),a[2][1]得到初值是()。
三、判断题
(1)两个字符串中所包含的字符个数相同时,才能比较字符串。
(2)字符数组可以存放字符串。
(3)不能用关系运算符对字符数组中的字符串进行比较。
(4)如果定义了一个指向数组的指针,则该指针可以相当于数组名使用。
(5)如果没有给一个整型数组的元素赋初值,则其元素的缺省初值全部为0。
四、编程题
(1)从键盘输入若干整数(数据个数应少于50),其值在0至4的范围内,用-1作为输入结束的标志。
统计每个整数的个数。
试编程。
(2)若有说明:
inta[2][3]={{1,2,3},{4,5,6}};现要将a的行和列的元素互换后存到另一个二维数组b中。
试编程。
第七章函数
一、选择题
(1)以下正确的函数定义形式是。
A)doublefun(intx,inty)
C)doublefun(intx;inty)
D)doublefun(intx,inty)
E)doublefun(intx,y);
(2)以下正确的函数形式是。
A)doublefun(intx,inty)
{z=x+y;returnz;}
B)fun(intx,y)
{intz;
returnz;}
C)fun(x,y)
{intx,y;doublez;
z=x+y;returnz;}
D)doublefun(intx,inty)
{doublez;
z=x+y;returnz;}
(3)C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是
A)地址传递
B)单向值传递
C)由实参传给形参,再由形参传回给实参
D)传递方式
(4)C语言允许函数值型缺省定义,此时该函数值隐含的类型是。
A)float型
B)int型
C)long型
D)double型
(5)下面函数调用语句含有实参的个数为。
func((exp1,exp2),(exp3,exp4,exp5));
A)1
B)2
C)4
D)5
二、填空题
(1)C语言规定,可执行程序的开始执行点是()。
(2)在C语言中,一个函数一般由两个部分组成,它们是()和()。
(3)下面add函数的功能是求两个参数的和,并将和值返回调用函数。
函数中错误的部分是();改正后为()。
Voidadd(floata,floatb)
{floatc;
c=a+b;
returnc’
}
(4)以下程序的运行结果是()。
main()
{increment();
increment();
increment();
}
increment();
{intx=0;
x+=1;
printf(“%d”,x);
}
(5)以下Check函数的功能是对value中的值进行四舍五入计算,若计算后的值与ponse值相等,则显示“WELLDONE!
!
”,否则显示计算后的值。
已有函数调用语句Check(ponse,value);请填空。
VoidCheck(intponse,value)
{intval;
val=();
printf(“计算后的值:
%d”,val);
if()printf(“\NwellDNOE!
!
!
\n”);
elseprintf)”\nSorrythecorrectansweris%d\n”,val);
}
三、判断题
(1)C语言中,用户若需调用标准库函数,在调用前必须重新定义。
(2)C语言中不允许用户重新定义标准库函数。
(3)在C程序中,函数的定义和调用都不允许嵌套。
(4)如果用数组名作为函数调用的实际参数,则传递给形参的是数组的首地址。
(5)形式能参数也是一种局部变量。
四、编程题
(1)已有变量定义和函数调用语句inta,b;b=sum(a);函数sum()用以求k,和数作为函数值返回。
若a值为10,经函数sum的计算后,b的值是55。
请编写sum函数。
Sum(intn)
{}
(2)a是一个2*4的整型数组,且各元素均已赋值,函数max_value可求出其中的最大元素值max,并将此值返回主调函数。
今有函数调用语句max=max_value(a);请编写max_value函数。
Max_value(intarr[][4])
{}
第八章编译预处理命令
一、单选题
(1)请读程序:
#defineADD(x)x+x
main()
{
intm=1,n=2,k=3;
intsum=ADD(m+n)*k;
printf(“sum=%d”,sum);
}
上面程序的运行结果是。
A)sum=9
B)sum=10
C)sum=12
D)sum=18
(2)以下程序的运行结果是。
#defineMIN(x,y)(x)<(y)?
(x)+(y)
main()
{intI=10,j=15,k;
k=10*MIN(I,j);
printf(“%d\n”,k);
}
A)10
B)15
C)100
D)150
(3)在宏定义#definePI3.14159中,用宏名PI代替一个。
A)常量
B)单精度数
C)双精度数
D)字符串
(4)若有宏定义如下:
#defineX5
#defineYX+1
#defineZY*x/2
则执行以下printf语句后,输出结果是。
inta;a=Y;
printf(“%d\n”,Z);
printf(“%d\n”,--a);
A)7B)12C)12D)7
6655
(5)若有以下宏定义:
#defineN2
#defineY(n)((N+1)*n)
则执行语句z=2*(N+Y(5));后的结果是。
A)语句有错误
B)z=34
C)z=70
D)z无定值
二、填空题
(1)设有以下宏定义:
#defineWIDTH80
#defineLENGTHWIDTH+40
则执行赋值语句:
v=LENGTH*20;(V为int型变量)后,v的值是()。
(2)设有以下宏定义:
#defineWIDTH80
#defineLENGTH(WIDTH+40)
则执行赋值语句:
k=LENGTH*20;(K为int型变量)后,k的值是()。
(3)下面程序的运行结果是()。
#defineDOUBLE(r)r*r
main()
{intx=1,y=2,t;
t=DOBLE(x+y);
printf(“%d\n”,t);
}
(4)下面程序的运行结果是()。
#defineMUL(z)(z)*(z)
main()
{
printf(“%d\n”,MUL(1+2)+3);
}
(5)下面程序的运行结果是()。
#definePOWER(x)((x)*(x))
main()
{intI=1;
while(I<=4)printf(“%d\t”,POWER(I++));
printf(“\n”);
}
三、判断题
(1)预处理命令行都必须以#号开始。
(2)宏替换不占用运行时间,只占编译时间。
(3)C程序在执行过程中对预处理命令进行处理。
(4)宏名必须用大写字母表示。
(5)在文件包含预处理命令的使用形式中,当#include后的文件名用<>括起来时,表示在当前目录搜索被包含文件。
四、编程题
(1)输入两个整数,求它相除的余数。
用带参的宏来编程实现。
(2)试用义一个带参的宏swap(x,y),以实现两个整数之间的交换,并
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 习题