05年9月等级考试二级C语言考前密卷3
选择题(1)~(10)每小题2分,(11)-(50)每小题1分,共60分)
下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上,答在试卷上不得分。
(1)算法能正确地实现预定功能的特性称为算法的__________。
A)确定性 B)易读性 C)健壮性 D)高效性
答案:A
评析:算法的确定性是指算法中的每一个步骤都必须是有明确定义的,不允许有摸棱两可的解释,也不允许有多义性,即每个步骤都是预先定义好的。
(2)数据在计算机存储器内表示时,物理地址与逻辑地址相同并且是连续的,称之为__________。
A)存储结构 B)逻辑结构
C)顺序存储结构 D)链式存储结构
答案:C
评析:如果数据之间在逻辑上有相邻关系时,能够在物理位置上体现出来,则这种存储结构称为顺序存储结构。如果数据之间的逻辑相邻关系在存储时是靠存储地址的指针来体现的,则称为链式存储结构。
(3)从未排序序列中依次取出一个元素与已排序序列中的元素依次进行比较,然后将其放 在已排序序列的合适位置,该排序方法称为__________。
A)希尔排序 B)冒泡排序 C)插入排序 D)选择排序
答案:C
评析:最基本的排序方法有三大类,即选择排序、交换排序和插入排序。
(4)对线性表进行折半查找时,要求线性表必须__________。
A)以顺序方式存储
B)以链接方式存储
C)以顺序方式存储,且结点按关键字有序排列
D)以链接方式存储,且结点按关键字有序排列
答案:C
评析:折半查找算法要求被查找的对象必须采用顺序的存储结构,并且关键字有序排列。
(5)链表不具备的特点是__________。
A)可随机访问任意一个结点
B)插入和删除不需要移动任何元素
C)不必事先估计存储空间
D)所需空间与其长度成正比
答案:A
评析:顺序表可以随机访问任意一个结点,而链表必须从第一个数据结点出发,逐一查找每个结点。
(6)下列描述中正确的是__________。
A)软件是物理产品
B)程序就是软件
C)软件工程由方法、工具和过程三部分组成
D)软件工程是一个机械工程
答案:B
评析:软件是与计算机系统操作有关的程序、规程、规则及任何与之有关的文档和数据。计算机软件是一种逻辑产品,而不是物理产品。软件工程是用工程、科学和数学的原则与方法研制、维护计算机软件的有关技术及管理方法。软件工具可以自动或半自动的生成软件文档。软件工程过程是管理者控制软件开发各环节的基本方法。
(7)软件测试是保证软件质量最关键的步骤,下列关于白盒测试技术描述中不正确的是_______。
A)保证模块中每一独立的路径至少执行一次
B)保证所有判断的每一分支至少执行一次
C)保证每一循环都在边界条件和一般条件下最多执行一次
D)验证所有内部数据结构的有效性
答案:C
评析:软件测试技术中,白盒测试技术和黑盒测试技术是两种基 本的软件测试手段。白盒测试技术有四个原则:保证模块中每一个独立的路径至少执行一次;保证所有判断的每一分支至少执行一次;保证每一循环都在边界条件和一般条件下至少执行一次;验证所有内部数据结构的有效性。
(8)客观世界中任何一个事物都可以看成一个对象。但是从计算机的角度看,一个对象应 该包含两个要素:一个是_______,另一个是需要进行的操作。
A)语句 B)命令 C)算法 D)数据
答案:D
评析:在面向对象的程序设计中,从计算机的角度看,一个对象应该包含两个元素:数据,相当于家庭中的成员;操作,相当于家庭成员的活动。对象就是一个包含数据与这些数据有关的操作的集合。
(9)下列概念中,不是数据库管理系统必须提供的数据控制功能的是_______。
A)安全性 B)完整性 C)移植性 D)一致性
答案:C
评析:数据库管理系统提供的数据控制功能是指在数据库建立、运行和维护时,由DBMS统一管理、统一控制,以保证数据的安全性、完整性和一致性。
(10)设关系R和关系S的元数分别是3和4,关系T是R和S的笛卡儿积,即T=R×S,则关系T的元数是_______。
A)7 B)9 C)12 D)16
答案:A
评析:笛卡儿积的定义是设关系R和s的元数分别是r和s,R和s的笛卡儿积是一个(r十s)元属性的集合,每一个元组的mr个分量来自R的一个元组,、后s爪分量来自s的一个元组。所以关系T的属性元数是3+4=7。
(11)以下叙述中正确的是_______。
A)C语言中的全部数据类型都是基本类型
B)C语言中的全部数据类型都是构造类型
C)C语言中的数据类型只有两种,即基本类型和构造类型
D)以上都不对
答案:D
评析:c语言中的数据类型有四种,即基本类型、构造类型、指针类型和空类型。
(12)下列可作为C语言赋值语句的是_______。
A)x=3,y=5 B)a=b=6 C)i--; D)y=6
答案:C
评析:此题实际上是考查对c语言中"语句"概念的理解。表达式后面只有加上分号才能成为语句,因此,A),B),D)均是表达式,只有C)为语句。且利用自减运算符使i值减l。
(13)以下可以定义为用户标识符的是_______。
A)printf B)net C)3com D)int
答案:B
评析:c语言中的标识符分为两类。一类是系统标识符,即系统定义使用的关键字标识符等。另一类是用户自定义标识符。两类标识符都只能用字母、数字和下划线三种字符组成。且第一个字母必须为字母或下划线。并且用户自定义标识符不能使用系统关键字相同的标识符。
(14)以下选项中,不能作为合法常量的是_______。
A)0X2A B)015 C).2.8e9 D)123.6e0.4
答案:D
评析:c程序中的基本数据类型有整型、实型和字符型。其中整型常量三种形式,即八进制、十进制和十六进制。而实型常量有十进制小数和指数形式两种。
(15)有以下程序
main()
{
int a; char c=10: float f=-100.0;double x;
clrscrO;
a=f/=c*=(x=6.5);
printf("%d,%c,%3.1C%3.1f\n",a,c,Cx);
}
程序运行后的输出结果是_______。
A)1,65,1,6.5 B)1,A,1.5,6.5 C)1,65,1.5,6.5 D)2,65,1.5,6.5
答案:B
评析:在赋值语句a=f/=c*=(x=6.5);中,可得x=6.5,将x的值乘以10赋予c,为65,再将f=100的值除以65,并按照四舍五入的原则,重新赋给f’得到f=-I.5。最后将f的值赋给a,由于a是整型,所以得到a=l。
(16)以下语句序列中错误的是_______。
A)int x=l; B)int x=0; C)int x=2.3; D)int x=l,y=l;
x++; (x+1)++; (x++)+1; (x++)+(y一);
答案:B
评析:c语言中的自加、自减运算只能用于变量,而不能用于常量或表达式。
(17)有定义语句:im.a;char b[10],c;则错误的输入语句是__________。
A)scanf("%d%s%c",&a,D,&C); B)scanf("%d%s%c",&a,&b,&C);
C)scanf("%d%s%d",&a;b,&C); D)scanf("%d%s"&c,a,%,&C);
答案:D
评析:在scanf()语句中,在给整型变量和字符型赋值时,必须要在变量名前加取地址符号(&),而对字符型数组赋值时,可以不在变量名前不加取地址符号,也可以加取地址符号。而且对于字符型变量既可以赋给整型值,也可以赋给字符型值。
(18)有定义语句:int x,y;,若要通过scan即x=%d,y=%n&x,&y);语句使变量x得到数值11,变量y得到数值12,下面四组输入形式中,正确的是________。
A)1l 12<回车> B)ll,12<回车>
C)x=l l,y=12<回车> D)x=ll,<回车>12,<回车>
答案:C
评析:在scanf()语句中,对于变量的赋值必须与数据的输入格式相一致。特别是一些字符说明。
(19)设有如下程序段:
int x=6, y=4;
printf("%d\n",(x%y,x&&y));
则以下叙述中正确的是__________。
A)输出语句中格式说明符的个数少于输出项的个数,不能正确输出
B)运行时产生出错信息
C)输出值为2
D)输出值为l
答案:D
评析:在逗号表达式(表达式1,表达式2)中,其运算方法是先求表达式1的值,然后求表达2的值,整个逗号表达式的值是表达式2的值。
(20)有以下程序
main()
{
int i=1.j=2,k=3;
clrscr();
if(i++== j&&k--==j)
printf("%d,%d,%d",i++’j,k);
else
printf("%d,%d,%d",++i,++j,k--);
}
程序运行后的输出结果是_________。
A)l,2,3 B)2,2,3 C)2,3,2 D)3,3,3
答案:D
评析:按照运算符的优先级,最先计算的是关系运算i++==j,由于此关系式不成立,,它的结果是为"假"值,由此可以确定逻辑与运算的结果必然是"假 "值,因此参加逻辑与运算的另一个关系表达式"k--==j"的值,系统不再对它进行运算。此时变量i的值自加1变成2,然后执行else语句后的 printf语句。
(21)有定义语句:int a=l,b=l,c=3,x;,则以下选项中各程序段执行后,x的值不等于3是__________。
A)if(c<a)x=l; B)if(a<3&&b<C) x=3;
else if(b<a‖b<C)x=3; else if(a<
(28)有以下程序
void fun(char *a,char *b)
{ a=b;
(*a)++;
}
main()
{
char c1=’A’,c2=’a,*p1,*p2;
clrscr0;
pl=&cl;
p2=&c2;
fun(p1,p2);
printf("%c%c\n",cl,c2);
}
程序运行后的输出结果是__________。
A)Ab B)aa C)Aa D)Bb
答案:A
评析:在函数调用中,可以分值传递和地址传递。若参数传递的是简单数据类型的数值,称为值传递方式。若参数传递的是变量的地址,称为地址传递方式。
(29)若有定义:static int fun(int a,int b),则以下叙述中错误的是_________。
A)定义了一个返回值为整型的静态函数
B)该函数只能被同一文件内的函数调用
C)该函数可以在任何文件中被调用
D)该函数属于内部函数
答案:C
评析:根据函数能否被其他源文件调用,将函数区分为内部和外部函数。如果将函数定义为外部函数,则在函数首部最左端冠以关键字eXtem。如果将函数定义为内部函数,则在函数首部最左端冠以关键字static。内部函数只能被本文件中的其它函数调用。而外部函数则可以被其他任何c程序文件调用。
(30)以下能正确定义一维数组的选项是_________。
A)int num[]; B)int num[0..100];
C)#define N 100; D)int N=100;
int num[N]; int num[N];
答案:C
评析:有二种方法指定数组长度。其一是直接在数组名后面的方括号内输入数组的长度。其二是,在定义数组的同时对其赋值,由实际赋值的元素个数自动确定数组的长度。
(31)有以下程序
fun(int a[] ,intm,int n)
{ int I,J;
for(i=m;i<n;i++)
a[i+ll=a[I]+3;
}
main()
{
int i,a[6l={2,4,6,8,10,12};
clrscr0;
fun(a,2,5);
for(i=O;i<6;i++)
printf("%"a[I]);
}
程序运行后输出的结果是__________。
A)24691315 B)24691215 C)249121518 D)249121415
答案:B
评析:在调用函数时,既可以用单个的变量作为参数,也可以用数组名作为参数。还可将数组的下标值作为实参使用。在本题中,是将数组名和数组的下标值作为实参。
(32)以下不正确的叙述是__________.
A)在C程序中,逗号运算符的优先级最低。
B)在C程序中,T和t是两个不同的变量
C)若a和b类型相同,在执行了赋值表达式a=b后,b中的值将放入a中,而b中的值不变。
D)当从键盘输入数据时,对于整型变量只能输入整型数据。对于实型变量只能输入实型数据。
答案:D
评析:在c语言中,为方便表达式的运算,对所有的运算符都设定了一定的优先级,其中逗号运算符的优先级最低。c语言中的数据有常量和变量之分,其中变量是区分大小写的,也就是说T和t是两个不同的变量名。将某个变量的值赋给其它的变量之后,并不影响其本身的值。当定义一个整型变量后,可以从键盘上对其输入整型值,也可以是字符型的数据。如果将字符型的值赋给整型变量,则它接受的是字符常量的ASCII码值。实型变量也可以接收整型值。
(33)有以下程序
pf(char *p,int n)
{ int i;
for(i=0;i<n;i++1
p[i]=p[I]+32;
}
main()
{
char a[]="ABCD";
int i:
clrscr();
pf(a,4);
for(i=0;i<4;i++)
printf("%c",a[I]);
}
程序运行后的输出结果是________。
A)ABCD B)ABCD\0 C)abcd D)abed\0
答案:C
评析:通过指向数组的指针可以引用数组中的任何元素,并且对其进行各种运算。本题中就是通过指向数组的指针将一字符数组中的所有大写字母转换成相应的小写字母。
(34)有以下程序
main()
{
int a[3][3],*p,i;
clrscr();
p=&a[0][0];
for(i=0;i<9;i++)
p[i]:i+2;
printf("%d\n",a[2][11);
}
程序运行后的输出结果是_________。
A)3 B)6 C)9 D)2
答案:C
评析:当某个指针变量指向多维数组时,可以用其每次加l来顺序操作数组中的元素。在此题中,a[3][3]={{2,3,4} ,{5,6,7},{8,9,10}}。而最后输出的a[2][1]就是第3行的第2列的元素,即9。
(35)有以下程序
#include<stdio.h>
#define F(X,Y)(X)*(Y)
main()
{
int a=3,b=4;
clrscr();
printf("%d\n",F(a--,++b));
}
程序运行后的输出结果是_________。
A)8 B)10 C)12 D)15
答案:D
评析。在带参数的宏定义中,不是简单的字符替换。其方法是:在程序中如果有带实参的宏, (如F(x,Y)),则按#define命令行中指定的字符串进行置换。如果串中包含宏中的形参(女NX,Y),、则将程序语句中相应的实参代替形参。本题中的宏定义展开后为:(a.--)*(++b)=(3)* (5)=15。
(36)有以下程序
main()
{
int x=3,y=2,z=l;
printf("%d\n",x/y&&z);
}
程序运行后的输出结果是_________。
A)0 B)l C)2 D)3
答案:B
评析:在c程序的标准输出函数prim冲,要注意表达式的优先级。如本题的表达式x/y&&z,先运算的是算术运算x/v,结果是1,然后才运算l&&z,结果是1。
(37)下列关于c程序编译的描述中,错误的是_________。
A)在程序的编译过程中可以发现所有的语法错误
B)在程序的编译过程中可以发现部分的语法错误
C)在程序的编译过程中不能发现逻辑错误
D)程序编译是调试程序的必经过程
答案:B
评析:编译过程实际上就是调试程序,找出程序中所有可能存在的语法错误。但是,对于程序逻辑上的一些错误,编译过程无能为力,只有程序编写人员自己通过一些良好的编程技巧和方法来排除。
(38)若有以下说明和定义
union、s
{ int i;
char ch
float e
}a;
下列对共用体的操作正确的是________。
A)a=’A’; B)re=a;
C)a.i=3; D)printf("%dha",a);
答案:C
评析:共用体实际上用同一内存段来存放几种不同类型的成员,但在每一瞬时只能存放其中一种,而不是现时存放几种。因此,不能对共用体名赋值,不能引用共用体名以得到某一个值,也不能把共用体变量作为函数参数。
(39)下列选项中正确的语句组是_________。
A)char s[8];s={"Beijing"}; B)char *s;s={"Beijing"};
C)char s[8];s="Beijing"; D)char *s;s="Beijing";
答案:D
评析:字符串通常是指用一对双引号括起来的一组字符常量序列。在c语言中,可以直接定义一个指向字符串的指针变量,然后对其赋值为字符串常量后,指向字符串的指针就指向了字符串的首地址。
(40)如果一个C程序由多个文件组成,在将多个文件编译连接成一个统一的可执行文件时,可采用的方法有多种,以下叙述中错误的是__________。
A)可以利用Turbo c集成环境 B)在MS C上进行编译连接
C)用#include命令 D)用文字处理软件Word
答案:D
评析:运算多个文件的程序有3种方法,第1种是利用Turbo c集成环境,先将每个文件输入并存储在磁盘上,然后在编译在状态下建立一个"项目文件",最后再编译连接。第2种方法是在MS c上先分别对多个文件进行编译得到.obj文件,然后用link命令把四个文件连接起来。第3种方法是用#include命令将多个文件包含进某个文件中。
(41)有以下程序
main()
{
int n,s=0;
clrscr0;
for(n=10;n<30;n++)
{
if(n%3==O)
{ s+=n;
continue;
}
if(s>100)break;
}
printf("%d",s);
}
程序运行后的输出结果是___________。
A)117 B)147 C)127 D)137
答案:A
评析:continue语句的功能是结束本次循环,即跳过循环体中下面尚未执行的语句,接着执行下一次是否执行循环的判定。而break语句是从循环体内跳出,即提前结束循环。
(42)有以下程序
main()
{
char s[]={’T’,’E’,’A’,’C’,’H’,’E’,’R’},*p;
clrscr0;
p=s+3;
printf("%c",*p++);
printf("%c",*p++);
}
程序运行后的输出结果是________。
A)AC B)CH C)HE D)TEA
答案:B
评析:如果有指向字符数组的指针,那么字符数组中的元素可以用指针变量表示,执行第一个输出语句printf("%c",*p++);后,输出字符’C’,执行第二个输出语句printr("%c",*p++);后,输出字符’H’。
(43)已定义以下函数
fun(char *pl,char*p2)
{
while((’pl=’p2)『-’\0’』
{
pl++;
p2++;
}
}
函数的功能是__________。
A)将p2所指字符串复制到pl所指内存空间
B)将p2所指字符串的地址赋给指针p1
C)对pl和p2两个指针所指字符串进行比较
D)检查pl和p2两个指针所指字符串中是否有’\O’
答案:A
评析:指针的白加或自减运算,表示指针向前或向后移动一个存储单
(28)有以下程序
void fun(char *a,char *b)
{ a=b;
(*a)++;
}
main()
{
char c1=’A’ ,c2=’a,*p1,*p2;
clrscr0;
pl=&cl;
p2=&c2;
fun(p1,p2);
printf("%c%c\n",cl,c2);
}
程序运行后的输出结果是__________。
A)Ab B)aa C)Aa D)Bb
答案:A
评析:在函数调用中,可以分值传递和地址传递。若参数传递的是简单数据类型的数值,称为值传递方式。若参数传递的是变量的地址,称为地址传递方式。
(29)若有定义:static int fun(int a,int b),则以下叙述中错误的是_________。
A)定义了一个返回值为整型的静态函数
B)该函数只能被同一文件内的函数调用
C)该函数可以在任何文件中被调用
D)该函数属于内部函数
答案:C
评析:根据函数能否被其他源文件调用,将函数区分为内部和外部函数。如果将函数定义为外部函数,则在函数首部最左端冠以关键字eXtem。如果将函数定义为内部函数,则在函数首部最左端冠以关键字static。内部函数只能被本文件中的其它函数调用。而外部函数则可以被其他任何c程序文件调用。
(30)以下能正确定义一维数组的选项是_________。
A)int num[]; B)int num[0..100];
C)#define N 100; D)int N=100;
int num[N]; int num[N];
答案:C
评析:有二种方法指定数组长度。其一是直接在数组名后面的方括号内输入数组的长度。其二是,在定义数组的同时对其赋值,由实际赋值的元素个数自动确定数组的长度。
(31)有以下程序
fun(int a[],intm,int n)
{ int I,J;
for(i=m;i<n;i++)
a[i+ll=a[I]+3;
}
main()
{
int i,a[6l={2,4,6,8,10,12};
clrscr0;
fun(a,2,5);
for(i=O;i<6;i++)
printf("%"a[I]);
}
程序运行后输出的结果是__________。
A)24691315 B)24691215 C)249121518 D)249121415
答案:B
评析:在调用函数时,既可以用单个的变量作为参数,也可以用数组名作为参数。还可将数组的下标值作为实参使用。在本题中,是将数组名和数组的下标值作为实参。
(32)以下不正确的叙述是__________.
A)在C程序中,逗号运算符的优先级最低。
B)在C程序中,T和t是两个不同的变量
C)若a和b类型相同,在执行了赋值表达式a=b后,b中的值将放入a中,而b中的值不变。
D)当从键盘输入数据时,对于整型变量只能输入整型数据。对于实型变量只能输入实型数据。
答案:D
评析:在c语言中,为方便表达式的运算,对所有的运算符都设定了一定的优先级,其中逗号运算符的优先级最低。c语言中的数据有常量和 变量之分,其中变量是区分大小写的,也就是说T和t是两个不同的变量名。将某个变量的值赋给其它的变量之后,并不影响其本身的值。当定义一个整型变量后,可以从键盘上对其输入整型值,也可以是字符型的数据。如果将字符型的值赋给整型变量,则它接受的是字符常量的ASCII码值。实型变量也可以接收整型值。
(33)有以下程序
pf(char *p,int n)
{ int i;
for(i=0;i<n;i++1
p[i]=p[I]+32;
}
main()
{
char a[]="ABCD";
int i:
clrscr();
pf(a,4);
for(i=0;i<4;i++)
printf("%c",a[I]);
}
程序运行后的输出结果是________。
A)ABCD B)ABCD\0 C)abcd D)abed\0
答案:C
评析:通过指向数组的指针可以引用数组中的任何元素,并且对其进行各种运算。本题中就是通过指向数组的指针将一字符数组中的所有大写字母转换成相应的小写字母。
(34)有以下程序
main()
{
int a[3][3],*p,i;
clrscr();
p=&a[0][0];
for(i=0;i<9;i++)
p[i]:i+2;
printf("%d\n",a[2][11);
}
程序运行后的输出结果是_________。
A)3 B)6 C)9 D)2
答案:C
评析:当某个指针变量指向多维数组时,可以用其每次加l来顺序操作数组中的元素。在此题中,a[3][3]={{2,3,4},{5,6,7},{8,9,10}}。而最后输出的a[2][1]就是第3行的第2列的元素,即9。
(35)有以下程序
#include<stdio.h>
#define F(X,Y)(X)*(Y)
main()
{
int a=3,b=4;
clrscr();
printf("%d\n",F(a--,++b));
}
程序运行后的输出结果是_________。
A)8 B)10 C)12 D)15
答案:D
评析。在带参数的宏定义中,不是简单的字符替换。其方法是:在程序中如果有带实参的宏, (如F(x,Y)),则按#define命令行中指定的字符串进行置换。如果串中包含宏中的形参(女NX,Y),、则将程序语句中相应的实参代替形参。本题中的宏定义展开后为:(a.--)*(++b)=(3)* (5)=15。
(36)有以下程序
main()
{
int x=3,y=2,z=l;
printf("%d\n",x/y&&z);
}
程序运行后的输出结果是_________。
A)0 B)l C)2 D)3
答案:B
评析:在c程序的标准输出函数prim冲,要注意表达式的优先级。如本题的表达式x/y&am p;&z,先运算的是算术运算x/v,结果是1,然后才运算l&&z,结果是1。
(37)下列关于c程序编译的描述中,错误的是_________。
A)在程序的编译过程中可以发现所有的语法错误
B)在程序的编译过程中可以发现部分的语法错误
C)在程序的编译过程中不能发现逻辑错误
D)程序编译是调试程序的必经过程
答案:B
评析:编译过程实际上就是调试程序,找出程序中所有可能存在的语法错误。但是,对于程序逻辑上的一些错误,编译过程无能为力,只有程序编写人员自己通过一些良好的编程技巧和方法来排除。
(38)若有以下说明和定义
union、s
{ int i;
char ch
float e
}a;
下列对共用体的操作正确的是________。
A)a=’A’; B)re=a;
C)a.i=3; D)printf("%dha",a);
答案:C
评析:共用体实际上用同一内存段来存放几种不同类型的成员,但在每一瞬时只能存放其中一种,而不是现时存放几种。因此,不能对共用体名赋值,不能引用共用体名以得到某一个值,也不能把共用体变量作为函数参数。
(39)下列选项中正确的语句组是_________。
A)char s[8];s={"Beijing"}; B)char *s;s={"Beijing"};
C)char s[8];s="Beijing"; D)char *s;s="Beijing";
答案:D
评析:字符串通常是指用一对双引号括起来的一组字符常量序列。在c语言中,可以直接定义一个指向字符串的指针变量,然后对其赋值为字符串常量后,指向字符串的指针就指向了字符串的首地址。
(40)如果一个C程序由多个文件组成,在将多个文件编译连接成一个统一的可执行文件时,可采用的方法有多种,以下叙述中错误的是__________。
A)可以利用Turbo c集成环境 B)在MS C上进行编译连接
C)用#include命令 D)用文字处理软件Word
答案:D
评析:运算多个文件的程序有3种方法,第1种是利用Turbo c集成环境,先将每个文件输入并存储在磁盘上,然后在编译在状态下建立一个"项目文件",最后再编译连接。第2种方法是在MS c上先分别对多个文件进行编译得到.obj文件,然后用link命令把四个文件连接起来。第3种方法是用#include命令将多个文件包含进某个文件中。
(41)有以下程序
main()
{
int n,s=0;
clrscr0;
for(n=10;n<30;n++)
{
if(n%3==O)
{ s+=n;
continue;
}
if(s>100)break;
}
printf("%d",s);
}
程序运行后的输出结果是___________。
A)117 B)147 C)127 D)137
答案:A
评析:continue语句的功能是结束本次循环 ,即跳过循环体中下面尚未执行的语句,接着执行下一次是否执行循环的判定。而break语句是从循环体内跳出,即提前结束循环。
(42)有以下程序
main()
{
char s[]={’T’,’E’,’A’,’C’,’H’,’E’,’R’},*p;
clrscr0;
p=s+3;
printf("%c",*p++);
printf("%c",*p++);
}
程序运行后的输出结果是________。
A)AC B)CH C)HE D)TEA
答案:B
评析:如果有指向字符数组的指针,那么字符数组中的元素可以用指针变量表示,执行第一个输出语句printf("%c",*p++);后,输出字符’C’,执行第二个输出语句printr("%c",*p++);后,输出字符’H’。
(43)已定义以下函数
fun(char *pl,char*p2)
{
while((’pl=’p2)『-’\0’』
{
pl++;
p2++;
}
}
函数的功能是__________。
A)将p2所指字符串复制到pl所指内存空间
B)将p2所指字符串的地址赋给指针p1
C)对pl和p2两个指针所指字符串进行比较
D)检查pl和p2两个指针所指字符串中是否有’\O’
答案:A
评析:指针的白加或自减运算,表示指针向前或向后移动一个存储单
(28)有以下程序
void fun(char *a,char *b)
{ a=b;
(*a)++;
}
main()
{
char c1=’A’,c2=’a,*p1,*p2;
clrscr0;
pl=&cl;
p2=&c2;
fun(p1,p2);
printf("%c%c\n",cl,c2);
}
程序运行后的输出结果是__________。
A)Ab B)aa C)Aa D)Bb
答案:A
评析:在函数调用中,可以分值传递和地址传递。若参数传递的是简单数据类型的数值,称为值传递方式。若参数传递的是变量的地址,称为地址传递方式。
(29)若有定义:static int fun(int a,int b),则以下叙述中错误的是_________。
A)定义了一个返回值为整型的静态函数
B)该函数只能被同一文件内的函数调用
C)该函数可以在任何文件中被调用
D)该函数属于内部函数
答案:C
评析:根据函数能否被其他源文件调用,将函数区分为内部和外部函数。如果将函数定义为外部函数,则在函数首部最左端冠以关键字eXtem。如果将函数定义为内部函数,则在函数首部最左端冠以关键字static。内部函数只能被本文件中的其它函数调用。而外部函数则可以被其他任何c程序文件调用。
(30)以下能正确定义一维数组的选项是_________。
A)int num[]; B)int num[0..100];
C)#define N 100; D)int N=100;
int num[N]; int num[N];
答案:C
评析:有二种方法指定数组长度。其一是直接在数组名后面的方括号内输入数组的长度。其二是,在定义数组的同时对其赋值,由实际赋值的元素个数自动确定数组的长度。
(31)有以下程序
fun(int a[],intm,int n)
{ int I,J;
for(i=m;i<n;i++)
a[i+ll=a[I]+3;
}
main()
{
int i,a[6l={2,4,6,8,10,12};
clrscr0;
fun(a,2,5);
for(i=O;i<6;i++)
printf("%"a[I]);
}
程序运行后输出的结果是__________。
A)24691315 B)24691215 C)249121518 D)249121415
答案:B
评析:在调用函数时,既可以用单个的变量作为参数,也可以用数组名作为参数。还可将数组的下标值作为实参使用。在本题中,是将数组名和数组的下标值作为实参。
(32)以下不正确的叙述是__________.
A)在C程序中,逗号运算符的优先级最低。
B)在C程序中,T和t是两个不同的变量
C)若a和b类型相同,在执行了赋值表达式a=b后,b中的值将放入a中,而b中的值不变。
D)当从键盘输入数据时,对于整型变量只能输入整型数据。对于实型变量只能输入实型数据。
答案:D
评析:在c语言中,为方便表达式的运算,对所有的运算符都设定了一定的优先级,其中逗号运算符的优先级最低。c语言中的数据有常量和变量之分,其中变量是区分大小写的,也就是说T和t是两个不同的变量名。将某个变量的值赋给其它的变量之后,并不影响其本身的值。当定义一个整型变量后,可以从键盘上对其输入整型值,也可以是字符型的数据。如果将字符型的值赋给整型变量,则它接受的是字符常量的ASCII码值。实型变量也可以接收整型值。
(33)有以下程序
pf(char *p,int n)
{ int i;
for(i=0;i<n;i++1
p[i]=p[I]+32;
}
main()
{
char a[]="ABCD";
int i:
clrscr();
pf(a,4);
for(i=0;i<4;i++)
printf("%c",a[I]);
}
程序运行后的输出结果是________。
A)ABCD B)ABCD\0 C)abcd D)abed\0
答案:C
评析:通过指向数组的指针可以引用数组中的任何元素,并且对其进行各种运算。本题中就是通过指向数组的指针将一字符数组中的所有大写字母转换成相应的小写字母。
(34)有以下程序
main()
{
int a[3][3],*p,i;
clrscr();
p=&a[0][0];
for(i=0;i<9;i++)
p[i]:i+2;
printf("%d\n",a[2][11);
}
程序运行后的输出结果是_________。
A)3 B)6 C)9 D)2
答案:C
评析:当某个指针变量指向多维数组时,可以用其每次加l来顺序操作数组中的元素。在此题中,a[3][3]={{2,3,4},{5,6,7},{8,9,10}}。而最后输出的a[2][1]就是第3行的第2列的元素,即9。
(35)有以下程序
#include<stdio.h>
#define F(X,Y)(X)*(Y)
main()
{
int a=3,b=4;
clrscr();
printf("%d\n",F(a--,++b));
}
程序运行后的输出结果是_________。
A)8 B)10 C)12 D)15
答案:D
评析。在带参数的宏定义中,不是简单的字符替换。其方法是:在程序中如果有带实参的宏, (如F(x,Y)),则按#define命令行中指定的字符串进行置换。如果串中包含宏中的形参(女NX,Y),、则将程序语句中相应的实参代替形参。本题中的宏定义展开后为:(a.--)*(++b)=(3)* (5)=15。
(36)有以下程序
main()
{
int x=3,y=2,z=l;
printf("%d\n",x/y&&z);
}
程序运行后的输出结果是_________。
A)0 B)l C)2 D)3
答案:B
评析:在c程序的标准输出函数prim冲,要注意表达式的优先级。如本题的表达式x/y&&z,先运算的是算术运算x/v,结果是1,然后才运算l&&z,结果是1。
(37)下列关于c程序编译的描述中,错误的是_________。
A)在程序的编译过程中可以发现所有的语法错误
B)在程序的编译过程中可以发现部分的语法错误
C)在程序的编译过程中不能发现逻辑错误
D)程序编译是调试程序的必经过程
答案:B
评析:编译过程实际上就是调试程序,找出程序中所有可能存在的语法错误。但是,对于程序逻辑上的一些错误,编译过程无能为力,只有程序编写人员自己通过一些良好的编程技巧和方法来排除。
(38)若有以下说明和定义
union、s
{ int i;
char ch
float e
}a;
下列对共用体的操作正确的是________。
A)a=’A’; B)re=a;
C)a.i=3; D)printf("%dha",a);
答案:C
评析:共用体实际上用同一内存段来存放几种不同类型的成员,但在每一瞬时只能存放其中一种,而不是现时存放几种。因此,不能对共用体名赋值,不能引用共用体名以得到某一个值,也不能把共用体变量作为函数参数。
(39)下列选项中正确的语句组是_________。
A)char s[8];s={"Be ijing"}; B)char *s;s={"Beijing"};
C)char s[8];s="Beijing"; D)char *s;s="Beijing";
答案:D
评析:字符串通常是指用一对双引号括起来的一组字符常量序列。在c语言中,可以直接定义一个指向字符串的指针变量,然后对其赋值为字符串常量后,指向字符串的指针就指向了字符串的首地址。
(40)如果一个C程序由多个文件组成,在将多个文件编译连接成一个统一的可执行文件时,可采用的方法有多种,以下叙述中错误的是__________。
A)可以利用Turbo c集成环境 B)在MS C上进行编译连接
C)用#include命令 D)用文字处理软件Word
答案:D
评析:运算多个文件的程序有3种方法,第1种是利用Turbo c集成环境,先将每个文件输入并存储在磁盘上,然后在编译在状态下建立一个"项目文件",最后再编译连接。第2种方法是在MS c上先分别对多个文件进行编译得到.obj文件,然后用link命令把四个文件连接起来。第3种方法是用#include命令将多个文件包含进某个文件中。
(41)有以下程序
main()
{
int n,s=0;
clrscr0;
for(n=10;n<30;n++)
{
if(n%3==O)
{ s+=n;
continue;
}
if(s>100)break;
}
printf("%d",s);
}
程序运行后的输出结果是___________。
A)117 B)147 C)127 D)137
答案:A
评析:continue语句的功能是结束本次循环,即跳过循环体中下面尚未执行的语句,接着执行下一次是否执行循环的判定。而break语句是从循环体内跳出,即提前结束循环。
(42)有以下程序
main()
{
char s[]={’T’,’E’,’A’,’C’,’H’,’E’,’R’},*p;
clrscr0;
p=s+3;
printf("%c",*p++);
printf("%c",*p++);
}
程序运行后的输出结果是________。
A)AC B)CH C)HE D)TEA
答案:B
评析:如果有指向字符数组的指针,那么字符数组中的元素可以用指针变量表示,执行第一个输出语句printf("%c",*p++);后,输出字符’C’,执行第二个输出语句printr("%c",*p++);后,输出字符’H’。
(43)已定义以下函数
fun(char *pl,char*p2)
{
while((’pl=’p2)『-’\0’』
{
pl++;
p2++;
}
}
函数的功能是__________。
A)将p2所指字符串复制到pl所指内存空间
B)将p2所指字符串的地址赋给指针p1
C)对pl和p2两个指针所指字符串进行比较
D)检查p l和p2两个指针所指字符串中是否有’\O’
答案:A
评析:指针的白加或自减运算,表示指针向前或向后移动一个存储