C语言习题Word文档格式.docx
- 文档编号:19253757
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:109
- 大小:116.34KB
C语言习题Word文档格式.docx
《C语言习题Word文档格式.docx》由会员分享,可在线阅读,更多相关《C语言习题Word文档格式.docx(109页珍藏版)》请在冰豆网上搜索。
本题中,详细设计、软件编码和软件测试都属于软件开发阶段;
维护是软件生命周期的最后一个阶段,也是持续时间最长,花费代价最大的一个阶段,软件工程学的一个目的就是提高软件的可维护性,降低维护的代价。
(8)数据库管理系统DBMS中用来定义模式、内模式和外模式的语言为
A)C
B)Basic
C)DDL
D)DML
选项A)、B)显然不合题意。
数据定义语言(DataDefinitionLanguage,简称DDL)负责数据的模式定义与数据的物理存取构建;
数据操纵语言(DataManipulationLanguage,简称DML)负责数据的操纵,包括查询及增、删、改等操作。
(9)下列有关数据库的描述,正确的是
A)数据库是一个DBF文件
B)数据库是一个关系
C)数据库是一个结构化的数据集合
D)数据库是一组文件
数据库(Database,简称DB)是数据的集合,它具有统一的结构形式并存放于统一的存储介质内,是多种应用数据的集成,并可被各个应用程序所共享。
数据库中的数据具有"
集成"
、"
共享"
之特点。
10)下列有关数据库的描述,正确的是
A)数据处理是将信息转化为数据的过程
B)数据的物理独立性是指当数据的逻辑结构改变时,数据的存储结构不变
C)关系中的每一列称为元组,一个元组就是一个字段
D)如果一个关系中的属性或属性组并非该关系的关键字,但它是另一个关系的关键字,则称其为本关系的外关键字
数据处理是指将数据转换成信息的过程,故选项A)叙述错误;
数据的物理独立性是指数据的物理结构的改变,不会影响数据库的逻辑结构,故选项B)叙述错误;
关系中的行称为元组,对应存储文件中的记录,关系中的列称为属性,对应存储文件中的字段,故选项C)叙述错误。
(11)以下叙述中正确的是
A)C语言比其他语言高级
B)C语言可以不用编译就能被计算机识别执行
C)C语言以接近英语国家的自然语言和数学语言作为语言的表达形式
D)C语言出现的最晚,具有其他语言的一切优点
计算机语言分为低级语言、汇编语言和高级语言,C语言属于高级语言,但并不是说C语言比其他语言高级,选项A)错误;
除了低级语言外,其他各种语言都必须编译成能被计算机识别的二进制数才能执行,选项B)错误;
C语言出现于1972年至1973年间,并不是出现最晚的语言,选项D)错误。
(12)C语言中用于结构化程序设计的3种基本结构是
A)顺序结构、选择结构、循环结构
B)if,switch,break
C)for,while,do-while
D)if,for,continue
本题考查最简单的C程序设计知识。
在做题之前一定要慎重对待题干的主要信息,本题所描述的是"
3种基本结构"
,而选项B),C),D)三个选项则表达的是零零散散的循环结构。
(13)C语言中最简单的数据类型包括
A)整型、实型、逻辑型
B)整型、实型、字符型
C)整型、字符型、逻辑型
D)字符型、实型、逻辑型
本题考查C语言的数据类型。
在C语言中,没有专门的逻辑型数据类型,可以用0和1来表示逻辑值。
所以,在本题的选择答案中,不应该包括逻辑型。
(14)若变量已正确定义并赋值,以下符合C语言语法的表达式是
A)a:
=b+1
B)a=b=c+2
C)int18.5%3
D)a=a+7=c+b
选项A)中包含一个不合法的运算符"
:
="
;
选项C)应改为(int)18.5%3;
选项D)可理解为两个表达式:
a+7=c+b和a=a+7,其中第一个是错的,因为C语言规定赋值号的左边只能是单个变量,不能是表达式或常量等。
因此,正确答案是选项B),它实际上相当于a=(b=c+2),进而可分解为两个表达式:
b=c+2和a=b。
(15)下列可用于C语言用户标识符的一组是
A)void,define,WORD
B)a3_b3,_123,Car
C)For,-abc,IFCase
D)2a,DO,sizeof
C语言规定标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线,排除选项C)和D)。
C语言中还规定标识符不能为C语言的关键字,而选项A)中void为关键字,故排除选项A)。
(16)C语言中运算对象必须是整型的运算符是
A)%=
B)/
C)=
D)<
=
C语言规定:
取余运算符的运算对象必须是整型,复合运算符"
%="
中包含%运算,它的运算对象也必须是整型。
(17)若变量a,i已正确定义,且i已正确赋值,合法的语句是
A)a==1
B)++i;
C)a=a++=5;
D)a=int(i);
选项A是一个表达式,因为缺少分号,所以不是语句;
选项C)包含一个不合法的运算符"
++="
选项D)应改为a=(int)i;
。
(18)已知
intt=0;
while(t=1)
{...}
则以下叙述正确的是
A)循环控制表达式的值为0
B)循环控制表达式的值为1
C)循环控制表达式不合法
D)以上说法都不对
t=1是将t赋值为1,所以循环控制表达式的值为1,而判断t是否等于1时应用t==1注意"
="
与"
=="
的用法。
(19)若变量已正确说明为float型,要通过语句scanf("%f%f%f",&
a,&
b,&
c);
给a赋予10.0,b赋予22.0,c赋予33.0,下列不正确的输入形式是
A)10<
回车>
22<
33<
B)10.0,22.0,33.0<
C)10.0<
22.033.0<
D)1022<
在C语言中,当一次输入多个数据的时候,数据之间要用间隔符,合法的间隔符可以是空格、制表符和回车符。
逗号不是合法的间隔符。
(20)有如下程序:
main()
{
intx=1,a=0,b=0;
switch(x)
{
case0:
b++;
case1:
a++;
case2:
b++;
}
printf("
a=%d,b=%d\n"
a,b);
该程序的输出结果是
A)a=2,b=1
B)a=1,b=1
C)a=1,b=0
D)a=2,b=2
该题目的关键是要搞清楚该程序执行了哪几条语句。
由于x的值等于1,所以switch结构中,程序从case1后面的语句开始执行,又因为case1后面的语句没有以break结束,所以程序要继续往下执行case2后面的语句。
所以,该程序共执行了这三条语句:
a++;
因此,变量a和b最后的值应该为2和1。
(21)有以下程序
{inti=1,j=1,k=2;
if((j++||k++)&
&
i++)
%d,%d,%d\n"
i,j,k);
执行后输出结果是
A)1,1,2
B)2,2,1
C)2,2,2
D)2,2,3
该题目的关键是要搞清楚"
"
和"
||"
两个逻辑运算符的运算功能。
运算符"
是双目运算符,要求有两个运算量。
且规定逻辑与运算中,只有前面运算量的值为真时,才需要判别后面的值。
只要前面为假,就不必判别后面的值。
而逻辑或则为只要前为真,就不必判别后面的值;
只有前为假,才判别后。
本题中j++值为真,不进行k++的运算,所以k的值保持不变。
(22)有如下程序
{floatx=2.0,y;
if(x<
0.0)y=0.0;
elseif(x<
10.0)y=1.0/x;
elsey=1.0;
%f\n"
y);
A)0.000000
B)0.250000
C)0.500000
D)1.000000
该题目测验考生对if...elseif结构的理解,比较简单。
x的值满足x<
10.0的关系,所以程序将执行y=1.0/x;
语句,y的值应该等于0.5。
最后,用printf函数输出时,%f的输出格式为小数点后保留6位。
(23)有如下程序:
{intn=9;
while(n>
6){n--;
printf("
%d"
n);
A)987
B)876
C)8765
D)9876
该题目应该根据循环体第一次和最后一次执行时的输出结果来决定哪一项是正确的。
第一次进入循环时,n的值是9,循环体内,先经过n--运算,n的值变为8,所以第一次的输出值是8,由此可以排除选项A)和D)。
由循环条件n>
6可以知道,最后一次循环开始时,n的值应该为7,所以最后一次执行循环体时输出为6,由此可以排除选项C)。
(24)在下列选项中,没有构成死循环的是
A)inti=100;
while
(1)
{i=i%100+1;
if(i>
100)break;
B)for(;
;
);
C)intk=10000;
do{k++;
}while(k>
10000);
D)ints=36;
while(s)--s;
选项A)的循环表达式的条件永久为1,并且小于100的数与100取余不超过99,所以在循环体内表达式i%100+1的值永远不大于100,break语句永远不会执行,所以是死循环;
选项B)的括号内没有能使循环停下来的变量增量,是死循环;
选项C)中先执行k++,使k=10001,从而使循环陷入死循环。
(25)设intx=1,y=1;
表达式(!
x||y--)的值是
A)0
B)1
C)2
D)-1
C语言规定的运算优先级由高到低分别是逻辑非、算术运算、逻辑或。
所以先计算!
x,值是0,然后再计算y--,由于是后缀运算符,所以y在本次运算中的值仍然是1,最后计算0||1,值为1。
(26)若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是D
A)函数调用可以作为独立的语句存在
B)函数调用可以作为一个函数的实参
C)函数调用可以出现在表达式中
D)函数调用可以作为一个函数的形参
本题综合考查函数的调用方式。
函数的形参和实参具有以下特点:
①形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。
因此,形参只有在函数内部有效。
函数调用结束返回主调函数后则不能再使用该形参变量。
②实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。
因此应预先用赋值,输入等办法使实参获得确定值。
③实参和形参在数量上,类型上,顺序上应严格一致,否则会发生"
类型不匹配"
的错误。
④函数调用中发生的数据传送是单向的。
即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。
因此在函数调用过程中,形参的值发生改变,而实参中的值不会变化。
本题中A)和C)选项是最常识的问题,希望考生能通过以上分析掌握相关知识点。
(27)有以下程序
floatfun(intx,inty)
{return(x+y);
{inta=2,b=5,c=8;
%3.0f\n"
fun((int)fun(a+c,b),a-c));
程序运行后的输出结果是B
A)编译出错
B)9
C)21
D)9.0
本题考查函数的综合知识。
首先,我们可以利用强制转换类型转换运算符将一个表达式转换成所需类型。
如:
(double)a是将a转换成double类型;
(int)(x+y)是将x+y的值转换成整型。
本题可按部就班地逐步运算:
fun((int)fun(a+c,b),a-c)
fun((int)fun(10,5),2-8)
fun((int)15.000000,-6)
fun(15,-6)
9
(28)若有以下调用语句,则不正确的fun函数的首部是D
{…
inta[50],n;
…
fun(n,&
a[9]);
A)voidfun(intm,intx[])
B)voidfun(ints,inth[41])
C)voidfun(intp,int*s)
D)voidfun(intn,inta)
函数定义的一般形式为:
类型说明符函数名()
类型说明
语句
根据fun函数的调用语句可知,fun函数的第二个参数是一个地址值。
(29)fseek函数的正确调用形式是B
A)fseek(文件指针,起始点,位移量)
B)fseek(文件指针,位移量,起始点)
C)fseek(位移量,起始点,文件指针)
D)fseek(起始点,位移量,文件指针)
本题考查函数fseek的用法。
fseek函数的调用形式为:
fseek(文件指针,位移量,起始点)
起始点"
用0,1或2代替,0代表"
文件开始"
,1为"
当前位置"
,2为"
文件末尾"
位移量"
指以"
为基点,向前移动的字节数。
ANSIC和大多数C版本要求位移量是long型数据。
这样当文件的长度大于64k时不致出现问题。
ANSIC标准规定在数字的末尾加一个字母L,就表示long型。
(30)若fp是指向某文件的指针,且已读到文件末尾,则函数feof(fp)的返回值是
A)EOF
B)-1
C)1
D)NULL
EOF是指向文本文件的结束标志,NULL是打开文件错误时的返回值。
feof(fp)用来判断文件是否在文件末尾,文本文件和二进制文件均可以使用此函数,如果遇到文件结束就返回1,否则返回0。
(31)若有说明语句:
charc='
\72'
则变量c(A)
A)包含1个字符
B)包含2个字符
C)包含3个字符
D)说明不合法,c的值不确定
C语言的字符型常量中,允许用一种特殊形式的字符常量,就是以一个"
\"
开头的字符。
其中"
\ddd"
表示用ASCII码(八进制数)表示一个字符,本题中的charc=′\72′即表示占一个字符的变量c的ASCII码值。
(32)若有说明inta[3][4];
则a数组元素的非法引用是
A)a[0][2*1]
B)a[1][3]
C)a[4-2][0]
D)a[0][4]
本题定义a为3行×
4列的数组,它可用的行下标最大为2,列下标最大为3,用a[0][4]超过了数组的范围,注意数组的下标是从零开始的。
.
(33)设有以下说明语句
structstu
{inta;
floatb;
}stutype;
则下面的叙述不正确的是C
A)struct是结构体类型的关键字
B)structstu是用户定义的结构体类型
C)stutype是用户定义的结构体类型名
D)a和b都是结构体成员名
定义一个结构的一般形式为:
struct结构名
成员列表
};
本题中,stutype是在声明类型的同时定义的structstu类型的变量。
而不是用户定义的结构体类型名。
我们需要注意以下几点:
①类型与变量是不同的概念;
2)对结构体中的成员,可以单独使用,它的作用与地位相当于普通变量;
3)成员也可以是一个结构体变量;
4)成员名可以与程序中的变量名相同,二者不代表同一对象。
(34)在C语言中,引用数组元素时,其数组下标的数据类型允许是
A)整型常量
B)整型表达式
C)整型常量或整型表达式
D)任何类型的表达式
在C语言中,对于数组元素下标的定义只能是整型常量或整型表达式。
(35)若运行时给变量x输入12,则以下程序的运行结果是
{intx,y;
scanf("
&
x);
y=x>
12?
x+10:
x-12;
%d\n"
B)22
C)12
D)10
本题考查的是三目运算符的用法,三目运算符的形式为(表达式1)?
(表达式2):
(表达式3)。
当(表达式1)的值为真时,求(表达式2)的值为整个表达式的值;
如果(表达式1)的值为假,则求(表达式3)的值为整个表达式的值。
题中,表达式x>
12的结果为假,所以执行的语句是x-12,最终y的值应该是0。
(36)以下说法正确的是
A)C语言程序总是从第一个的函数开始执行
B)在C语言程序中,要调用函数必须在main()函数中定义
C)C语言程序总是从main()函数开始执行
D)C语言程序中的main()函数必须放在程序的开始部分
C语言的程序是由主函数main()开始运行,由主函数来调用其他函数,所以,选项A)错误。
C语言中定义的函数必须是并列的,不能在一个函数中定义其他函数,选项B)错。
函数必须先定义后使用,在调用函数以前要定义函数,而main()函数不必放在最前面,故选项D)错。
(37)表达式0x13^0x17的值是
A)0x04
B)0x13
C)0xE8
D)0x17
运算符^表示为两数的按位异或运算,异或运算的规则是参与运算的两个运算数中相对应的二进制位上,若数相同,则该位的结果为0;
数不同,则该位的结果为1。
(38)有以下程序
#defineF(X,Y)(X)*(Y)
{inta=3,b=4;
F(a++,b++));
}
程序运行后的输出结果是
A)12
B)15
C)16
D)20
本题考查了带参数的宏定义,参数只是简单的替换而不是把其值求出后替换形式参数。
本题中用a++替换X,用b++替换Y,再求(a++)*(b++)的值。
(39)下列程序执行后的输出结果是A
voidfunc(int*a,intb[])
{b[0]=*a+6;
}
{inta,b[5];
a=0;
b[0]=3;
func(&
a,b);
b[0]);
A)6
B)7
C)8
D)9
函数的参数不仅可以是整型、实型、字符型等数据,还可以是指针类型。
它的作用是将一个变量的地址传递到另一个函数中。
当数组名作参数时,如果形参数组中的各元素的
值发生变化,实参数组元素的值随之发生变化。
(40)若有下面的程序段:
chars[]="
china"
char*p;
p=s;
则下列叙述正确的是
A)s和p完全相同
B)数组s中的内容和指针变量p中的内容相等
C)s数组长度和p所指向的字符串长度相等
D)*p与s[0]相等
字符型指针变量p中存放的是"
的首地址,所以选项A)和B)错误。
s数组长度为6,而p所指向的字符串长度为5,二者不相等,排除选项C)。
(41)以下程序中函数sort的功能是对a数组中的数据进行由大到小的排序
voidsort(inta[],intn)
{inti,j,t;
for(i=0;
i<
n-1;
for(j=i+1;
j<
n;
j++)
if(a[i]<
a[j]){t=a[i];
a[i]=a[j];
a[j]=t;
{intaa[10]={1,2,3,4,5,6,7,8,9,10},i;
sort(&
aa[3],5);
10;
i++)printf("
%d,"
aa[i]);
\n"
程序运行后的输出结果是C
A)1,2,3,4,5,6,7,8,9,10,
B)10,9,8,7,6,5,4,3,2,1,
C)1,2,3,8,7,6,5,4,9,10,
D)1,2,10,9,8,7,6,5,4,3,
C语言中,实参变量和形参变量之间的数据传递是单向的"
值传递"
方式。
指针变量作函数参也要遵循这一规则,调用函数不可能改变实参指针变量的值,但可以改变实参指针变量所指变量的值。
(42)以下程序的运行结果是A
#include"
stdio.h"
{structdate
{intyear,month,day;
}today;
sizeof(structdate));
B)8
C)10
D)12
在解答本题时应该考虑两个问题:
结构体变量的长度及sizeof()求字节数的运算符。
结构体变量的长度是其内部成员总长度之和,本题中,structdate中包含year,month,day三个整型变量。
一个整型变量所占的字节数为2。
(43)若有语句int*point,a=4;
和point=&
a;
下面均代表地址的一组选项是
A)a,point,*&
a
B)&
*a,&
a,*point
C)*&
point,*point,&
D)&
*point,point
"
是求址运算符,"
*"
是指针变量的说明符,说明该变量只能存放所定义类型变量的地址。
本题中选项D)中均代表地址,注意&
*point等价于point。
(44)在调用函数时,如果实参是简单的变量,它与对应形参之间的数据传递方式是B
A)地址传递
B)单向值传递
C)由实参传形参
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 习题