![]() ![]() |
|
05年9月等级考试二级C语言考前密卷1 | |
作者:佚名 文章来源:不详 点击数 更新时间:2008/4/18 14:37:38 文章录入:杜斌 责任编辑:杜斌 | |
|
|
下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上,答在试卷上不得分。 (1)数据结构中,与所使用的计算机无关的是数据的________。 A)存储结构 B)物理结构 C)逻辑结构 D)物理和存储结构 答案:C 评析:数据结构概念一般包括3个方面的内容,数据的逻辑结构、存储结构及数据上的运算集合。数据的逻辑结构只抽象的反映数据元素之间的逻辑关系,而不管它在计算机中的存储表示形式。 (2)栈底至栈顶依次存放元素A、B、C、D,在第五个元素E入栈前,栈中元素可以出栈, 则出栈序列可能是________。 A)ABCED B)DBCEA C)CDABE D)DCBEA 答案:D 评析:栈操作原则上"后进先出",栈底至栈顶依次存放元素A、B、c、D,则表明这4个元素中D是最后进栈,B、c处于中间,A最早进栈。所以出栈时一定是先出D,再出c,最后出A。 (3)线性表的顺序存储结构和线性表的链式存储结构分别是________。 A)顺序存取的存储结构、随机存取的存储结构 B)随机存取的存储结构、顺序存取的存储结构 C)随机存取的存储结构、随机存取的存储结构 D)任意存取的存储结构、任意存取的存储结构 答案:B 评析:顺序存储结构中,数据元素存放在一组地址连续的存储单元中,每个数据元素地址可通过公式LOC(ai)。LOC(a1)+(i-1)L计算得到,从而实现了随机存取。对于链式存储结构,要对某结点进行存取,都得从链的头指针指向的结点开始,这是一种顺序存取的存储结构。 (4)在单链表中,增加头结点的目的是________。 A)方便运算的实现 B)使单链表至少有一个结点 C)标识表结点中首结点的位置 D)说明单链表是线性表的链式存储实现 答案:A 评析:头结点不仅标识了表中首结点的位置,而且根据单链表(包含头结点)的结构,只要掌握了表头,就能够访问整个链表,因此增加头结点目的是为了便于运算的实现。 (5)软件设计包括软件的结构、数据接口和过程设计,其中软件的过程设计是指________。 A)模块间的关系 B)系统结构部件转换成软件的过程描述 C)软件层次结构 D)软件开发过程 答案:B 评析:软件设计包括软件结构设计、数据设计、接口设计和过程设计。其中结构设计是定义软件系统各主要部件之间的关系;数据设计是将分析时创建的模型转化为数据结构的定义;接口设计是描述软件内部、软件和操作系统之间及软件与人之间如何通信;过程设计则是把系统结构部件转换成软件的过程性描述。
(6)为了避免流程图在描述程序逻辑时的灵活性,提出了用方框图来代替传统的程序流程 图,通常也把这种图称为________。 A)PAD图 B)N-S图 C)结构图 D)数据流图 答案:B 评析:常见的过程设计工具 有:程序流程图、N-S图、PAD图和HIPO图。其中,为了避免流程图在描述程序逻辑时的灵活性,提出了用方框图来代替传统的程序流程图,通常也把这种图称为N-S图。 (7)数据处理的最小单位是________。 A)数据 B)数据元素 C)数据项 D)数据结构 答案:C 评析:数据处理的最小单位是数据项;由若干数据项组成数据元素;而数据是指能够被计算机识别、存储和加工处理的信息载体;数据结构是指数据之间的相互关系和数据运算。 (8)下列有关数据库的描述,正确的是________。 A)数据库是一个DBF文件 B)数据库是一个关系 C)数据库是一个结构化的数据集合 D)数据库是一组文件 答案:C 评析:数据库(Database,简称DB)是数据的集合,它具有统一的结构形式并存放于统一的存储介质内,是多种应用数据的集成,并可被各个应用程序所共享。数据库中的数据具有"集成"、"共享"之特点。 (9)单个用户使用的数据视图的描述称为 ______ 。 A)外模式 B)概念模式 C)内模式 D)逻辑模式 答案:A 评析:外模式是用户的数据视图,也就是用户所见到的数据模式;全局数据视图的描述称为概念模式,即数据库中全部数据的整体逻辑结构的描述;物理存储数据视图的描述称为内模式,即数据库在物理存储方面的描述;存储模式即为内模式。 (10)需求分析阶段的任务是确定______。 A)软件开发方法 B)软件开发工具 C)软件开发费用 D)软件系统功能 答案:D 评析:需求分析是软件定义时期的最后一个阶段,它的基本任务就是详细调查现实世界要处理的对象(组织、部门、企业等),充分了解原系统的工作概况,明确用户的各种需求,然后在此基础上确定新系统的功能。 (11)若变量a是int类型,并执行了语句:a=’A’+1.6;,则正确叙述是______。 A)a的值是字符C B)a的值是浮点型 C)不允许字符型和浮点型相加 D)a的值是字符’A’的ASCII值加上l 答案:D 评析:在赋值表达式中,赋值符右边的值的类型会自动转换成赋值符左边的变量的类型。在本题中,先用"A"的ASCII码值加上1.46得到66.46,然后将它强制转换成int型,转换后,实数的小数部分全部 (12)若以下选项中变量已正确定义,则正确的赋值语句是______。 A)x1=26.8%3; B)1+2=x2; C)x3=0x12; D)x4=1+2=3; 答案:C 评析:赋值符号"="就是赋值运算符,它的作用是将一个数据赋给一个变量。如果赋值运算符两侧的类型不一致,但都是数值型或字符型时,在赋值时要进行类型转换,所以选项A错误。在赋值表达式中,赋值运算符的左侧必须是一个变量,所以选项B、D错误。选项C是将一个十六进制数赋值给变量x3。 (13)以下程序段的输出结果是______。 int a=1234; printf("%2d\n",a); A)12 B)34 C)1234 D)提示出错、无结果 答案:C 评析:本题主要考查对primf函数域宽描述符的理解,在这里我们要特别注意:输出数据的实际精度并不主要决定于格式项中的域宽与精度,也不决定于输入的数据精度,而主要决定于数据在机器内的存储精度。
(14)以下选项中不属于C语言的类型的是______。 A)signed short int B)unsigned char C)signed long D)long short 答案:D 评析:c语言中归纳起来,基本类型数据有以下几种: [signed]char;unsigned char;[signed]short[int];unsigned short[int];[signed]long[int];unsigned long[int];float;double. (15)设有定义:int a,*pa=&a;以下scanf语句能正确为变量a读入数据的是______。 A)scanf("%d",B); B)scanf("%d",a); C)scanf("%d",&pa); D)scanf("%d",*pa); 答案:C 评析:scanf函数要求其中的输入项必须是地址形式,比如:普通变量的地址、数组名、指针变量等。对于普通变量,地址形式为:&变量名;当一个普通变量的地址赋予了一个指针变量名,scanf函数的输入项处就可以直接写这个指针变量名。 (16)以下程序的输出结果是______。 main() {int a=5,b=4,c=6,d; printf("%d\n",d=a>c?(a>c?a:C):(b)); } A)5 B)4 C)6 D)不确定 答案:B 评析:本题最重要的分析d=a>c?(a>c?a:C):(b)),首先运算括号内的式子a>c?a:c,它的值是c的值6,即式子化成d=a>c?6:4。显然a=c,所以将4赋给d。 (17)以下程序中,while循环的循环次数是______ 。 main() { int i=0: while(i<10) {if(i<1)continue; if(i==5)break; i++: } …… } A)1 B)10 C)6 D)死循环,不能确定次数 答案:D 评析:进入循环后,先执行一个条件语句,如果i的值小于l,那么直接进入下一轮循环,因为i的初始值是0,小于l,故直接进入下一轮循环,又因为i的值始终没有改变,所以这个循环成了死循环。 (18)有以下程序: main() { char k;int i; for(i=1;i<3;i++) { scanf("%c",&k); switch(k) { case’0’:printf["another\n"]; ca se’1’:printf["number\n"); } } } 程序运行时,从键盘输入:0l<回车>,程序执行后输出结果是______。 A)another B)another C)another D)number number number number number another number 答案:C 评析:switch语句是多分支选择语句,执行完一个case后面的语句后,流程控制转移到下一个case继续执行。"case常量表达式"只是起语句标号作用,并不是在该处进行条件判断。在执行switch语句时,根据switch后面表达式的值找到匹配的入口标号,就从此标号开始执行下去,不再进行判断。
(19)以下程序的输出结果是______。 main() {Int a=O,i; for( (27)有以下程序段: int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b; b=p[5]; b中的值是______。 A)5 B)6 C)8 D)9 答案:D 评析:数组a各元素a[O]~a[9]的值依次为1~10;在程序的说明部分,指针变量p初始化为&a[3](即a+3),则p[5]相当于·(p+5),相当于a[8],所以执行语句b=p[5];后,b的值为9。 (28)在C语言中,形参的缺省存储类是______。 A)auto B)register C)static D)extern 答案:A 评析:程序进行编译时,并不为形式参数分配存储穿间。只有在被调用时,形式参数才临时地占有存储空间。形式参数用关键字auto作存储类别的声明时,关键字"auto"可以省略,auto不写则隐含确定为"自动存储类别",它属于动态存储方式。 (29)有以下定义: #include char a[10],*b=a; 不能给数组a输入字符串的语句是______。 A)gets(a); B)gets(a[0]); C)gets(&a[0]); D)gets(b); 答案:B 评析:函数gets的格式为:gets(字符数组名) c语言中,字符数组名代表数组的首元素地址,即&a[O],字符指针变量lb值也为数组a的首地址,选项A、c、D均能给数组a输入字符串。选项B中a[O]为数组元素,是一个数据变量。 (30)若指针p已正确定义,要使p指向两个连续的整型动态存储单元,不正确的语句是 ______. A)p=2*(int*)malloc(sizeof(int)); B)p=(int*)malloc(2*sizeof(int)) C)p=(int*)malloc(2*2) D)p=(int*)calloc(2,sizeof(int)) 答案:A 评析:malloe函数的作用是在内存开辟指定大小的存储空问,并将此存储空间的地 址作为函数值带回,它的原型为void。malloe(unsigned int size),函数值为指针,这个指针是指向void类型。如果要将此返回地址赋给一个指向特定类型的指针变量,则应进行强制类型转换。 calloc函数的模型是:void*calloc(unsigned int num,unsigned int size)作用是分配num个大小为size字节的空间。 (31)下面程序段的输出结果是______ 。 main() { char strl [10]={’s’,’t’,’u’,’d’,’e’,’n’,’t’}; printf("%d\n",strlen(strl)); } A)7 B)8 C)10 D)存在语法错误 答案:A 评析:strlen()函数得到字符串的长度,返回值为数值型。字符数组初始化,若提供的初值个数大于数组长度,则按语法错误处理。如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定义为空字符。
(32)以下程序的输出结果是______。 main() {int x=040; printf("%o\n",x<<1); } A)100 B)80 C)64 D)32 答案:A 评析:040用二进制表示就是00100000,左移一位,得到的值应该是01000000,化成八进制应该是0100。
(33)下面程序运行后的输出结果是______。 main() { char arr[2][4]; strcpy(arr[0],"you");strcpy(arr[1],"me"); arr[0][3]=’&’; print"%s\n",arr[0]); } A)you&me B)you C)me D)err 答案:A 评析:在主函数中定义了一个2*4的二维字符数组,执行strcpy(arr[O]"fIyou");后,arr[0]={’y’’o’,’u’,’ \0’},执行strcpy(arr[1],"me");后arr[1]={ ’m’, ’e’,’\0’,不定},当执行完arr[O][3];’&’;从arr[O]开始的存储空间中的字符依次是’y’,’o’,’u’, ’&’,’m’,’e’,’\0’,故执行printf("%s\n",arr[O]);后的输出结果为"you&me",选A。 (34)若要打开A盘上的user子目录下名为abc.txt的文本文件进行读、写操作,下面符合 此要求的函数调用是______。 A)fopen("A:\user\abc.txt","r") B)fopen("A:\\user\\abc.txt","r+") C)fopen("A:\user\abc.txt","rb") D)fopen("A:\\user\\abc.txt","w") 答案:B 评析:本题考查点是fopen函数中文件使用方式的指定。 文件使用方式"r",表示以"只读"方式打开一个字符文件。 文件使用方式"r+",表示以"读写"方式打开一个字符文件。 文件使用方式""rb",表示以"只读"方式打开一个二进制文件。 文件使用方式"w",表示以"只写"方式打开一个字符文件。 (35)以下不能正确进行字符串赋初值的语句为______。 A)char str[5]= "good! " B)char str[]="good! " C)char *str="good! " D)char str[5]={’g’,’0’,’o’,’d’} 答案:A 评析:用字符串作初值为字符数组赋值时,系统总会自动在字符串的末尾补上一个"\O",如选项A中定义的话,把第6个字符也就是"\0"赋给str数组,但此数组只含5个元素,而放到了s仃数组之后的存储单元中,这就可能会破坏其它数据区或程序本身。 (36)有以下程序: #include main(int argc,char*argv[]) { int i,len=O; for(i=1;i Print("%d\n",len); } 经编译连接后生成可执行文件ex.exe,若运行时输入以下带参数的命令行 ex abcd efg h3 k44 运行后输出结果是______。 A)14 B)12 C)8 D)6 答案:C 评析:main函数的第一个参数argc是int型变量,用来统计命令行中的字符串个数,本题输入带参数的命令行"ex abed efg h3 k44<回车>",argc的值是5;第二个参数是字符型指针数组,长度由argc的值决定,每个数组元素存放一个指向字符串数据的指针。 for语句将命令行中两个字符串abed和h3的长度进行累加,放在变量len中。
(37)若有下面的说明和定义: struct test { int ml;char m2;float m3; union uu{char ul[5];int u2[2];}ua; }myaa; 则sizeof(stuct test)的值是______。 A)12 B)16 C)14 D)9 答案:A 评析:在定义了结构体变量后,系统会为之分配内存单元,在内存中一个整型占2个字节,一个字符占1个字节,一个数组元素占1个字节,一个浮点型占4个字节。结构体变量所占内存长度是各成员占的内存长度之和;而共用体变量所占的内存长度等于最长的成员的长度。所以test在内存中占12个字节(2+l+4 +5=12)。 (38)若有定义:int aa[8];,则以下誊达式中不能代表数组元素aa[1]的地址的是______。 A)&aa[0]+l B)&aa[1] C)aa[0]++ D)aa+1 答案:C 评析:答案A中&aa[0]表示aa[0]的地址,加上1就是aa[1]的地址。同样aa[1]的地址也可以直接用&aa[1]或aa+l表示。
(39)下面叙述中正确的是______。 A)全局变量的作用域一定比局部变量的作用域范围大 B)静态类别变量的生存期贯穿于整个程序的运行期间 C)函数的形参都属于全局变量 D)未在定义语句中赋值的auto变量和static变量的初值都是随机值 答案:B 评析:c语言中,全局变量的作用范围是从定义处到程序结束,因此全局变量的定义点直接影响其作用范围,因此选项A错误。静态(statiC)存储类别变量是在程序编译时分配存储空间,该类别变量在整个程序运行期间占据着固定的存储单元,当多次调用其所在的函数时,该类别变量的值为上一次调用的值,直至整个程序结束运行后才释放该变量所占存储单元。因此选项B正确,选项D错误。c语言规定:函数的形参是auto型局部变量,因此选项c错误。 (40)以下程序的输出结果是______ 。 f(int b[],int m,int n) {jnt i,s=0; for(i=m;i return s; ) main() {int x,a[]:{1,2,3,4,5,6,7,8,9}; x=f(a,3,7); printf("%d\n",x); ) A)10 B)18 C)8 D)15 答案:A 评析:本题中,主函数调用f函数,在f函数中执行了两次循环,第一次i=3,s=0+b[i]:4,然后i的值被修改成5,仍然满足循环条件,进入第二轮循环,s=4+b[5]=4+6=10,随后,i的值被修改成7,不再满足循环条件,退出循环,返回s的值。所以最后输出结果是10。 (41)若有以下定义和语句: int s[4][5],(*ps)[5]; ps=s; 则对s数组元素的正确引用形式是______ 。 A)ps+l B)*(ps+3) C)ps[0][2] D)*(ps+1)+3 答案:C 评析:选项A得到的是s数组第一行的地址,选项B得到的是s数组第三行第零列元素的地址,而选项D得到的是s数组第一行第三列元素的地址。只有选项c正确引用了ps数组第零行第二列的元素。 (42)以下程序的输出结果是______。 main() {int b[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1; for(i=0;i<3;i++) fbr(j=I;J<=I;J++)t=t+b[i][b[j][j]]; printf("%d\n",t); } A)3 B)4 C)l D)9 答案:B 评析:`两个循环语句嵌套使用,在第一次外循环中,i=0,执行内循环时,将j赋值为i的值O,执行一次t=t+b[i][b[j][j]],得到t (27)有以下程序段: int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b; b=p[5]; b中的值是______。 A)5 B)6 C)8 D)9 答案:D 评析:数组a各元素a[O]~a[9]的 值依次为1~10;在程序的说明部分,指针变量p初始化为&a[3](即a+3),则p[5]相当于·(p+5),相当于a[8],所以执行语句b=p[5];后,b的值为9。
(28)在C语言中,形参的缺省存储类是______。 A)auto B)register C)static D)extern 答案:A 评析:程序进行编译时,并不为形式参数分配存储穿间。只有在被调用时,形式参数才临时地占有存储空间。形式参数用关键字auto作存储类别的声明时,关键字"auto"可以省略,auto不写则隐含确定为"自动存储类别",它属于动态存储方式。 (29)有以下定义: #include char a[10],*b=a; 不能给数组a输入字符串的语句是______。 A)gets(a); B)gets(a[0]); C)gets(&a[0]); D)gets(b); 答案:B 评析:函数gets的格式为:gets(字符数组名) c语言中,字符数组名代表数组的首元素地址,即&a[O],字符指针变量lb值也为数组a的首地址,选项A、c、D均能给数组a输入字符串。选项B中a[O]为数组元素,是一个数据变量。
(30)若指针p已正确定义,要使p指向两个连续的整型动态存储单元,不正确的语句是 ______. A)p=2*(int*)malloc(sizeof(int)); B)p=(int*)malloc(2*sizeof(int)) C)p=(int*)malloc(2*2) D)p=(int*)calloc(2,sizeof(int)) 答案:A 评析:malloe函数的作用是在内存开辟指定大小的存储空问,并将此存储空间的地址作为函数值带回,它的原型为void。malloe (unsigned int size),函数值为指针,这个指针是指向void类型。如果要将此返回地址赋给一个指向特定类型的指针变量,则应进行强制类型转换。 calloc函数的模型是:void*calloc(unsigned int num,unsigned int size)作用是分配num个大小为size字节的空间。 (31)下面程序段的输出结果是______ 。 main() { char strl [10]={’s’,’t’,’u’,’d’,’e’,’n’,’t’}; printf("%d\n",strlen(strl)); } A)7 B)8 C)10 D)存在语法错误 答案:A 评析:strlen()函数得到字符串的长度,返回值为数值型。字符数组初始化,若提供的初值个数大于数组长度,则按语法错误处理。如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定义为空字符。 (32)以下程序的输出结果是______。 main() {int x=040; printf("%o\n",x<<1); } A)100 B)80 C)64 D)32 答案:A 评析:040用二进制表示就是00100000,左移一位,得到的值应该是01000000,化成八进制应该是0100。 (33)下面程序运行后的输出结果是______。 main() { char arr[2][4]; strcpy(arr[0],"you");strcpy(arr[1],"me"); arr[0][3]=’&’; print"%s\n",arr[0]); } A)you&me B)you C)me D)err 答案:A 评析:在主函数中定义了一个2*4的二维字符数组,执行strcpy(arr[O]"fIyou");后,arr[0]={’y’’o’,’u’,’ \0’},执行strcpy(arr[1],"me");后arr[1]={ ’m’, ’e’,’\0’,不定},当执行完arr[O][3];’&’;从arr[O]开始的存储空间中的字符依次是’y’,’o’,’u’, ’&’,’m’,’e’,’\0’,故执行printf("%s\n",arr[O]);后的输出结果为"you&me",选A。 (34)若要打开A盘上的user子目录下名为abc.txt的文本文件进行读、写操作,下面符合 此要求的函数调用是______。 A)fopen("A:\user\abc.txt","r") B)fopen("A:\\user\\abc.txt","r+") C)fopen("A:\user\abc.txt","rb") D)fopen("A:\\user\\abc.txt","w") 答案:B 评析:本题考查点是fopen函数中文件使用方式的指定。 文件使用方式"r",表示以"只读"方式打开一个字符文件。 文件使用方式"r+",表示以"读写"方式打开一个字符文件。 文件使用方式""rb",表示以"只读"方式打开一个二进制文件。 文件使用方式"w",表示以"只写"方式打开一个字符文件。
(35)以下不能正确进行字符串赋初值的语句为______。 A)char str[5]= "good! " B)char str[]="good! " C)char *str="good! " D)char str[5]={’g’,’0’,’o’,’d’} 答案:A 评析:用字符串作初值为字符数组赋值时,系统总会自动在字符串的末尾补上一个"\O",如选项A中定义的话,把第6个字符也就是"\0"赋给str数组,但此数组只含5个元素,而放到了s仃数组之后的存储单元中,这就可能会破坏其它数据区或程序本身。 (36)有以下程序: #include main(int argc,char*argv[]) { int i,len=O; for(i=1;i Print("%d\n",len); } 经编译连接后生成可执行文件ex.exe,若运行时输入以下带参数的命令行 ex abcd efg h3 k44 运行后输出结果是______。 A)14 B)12 C)8 D)6 答案:C 评析:main函数的第一个参数argc是int型变量,用来统计命令行中的字符串个数,本题输入带参数的命令行"ex abed efg h3 k44<回车>",argc的值是5;第二个参数是字符型指针数组,长度由argc的值决定,每个数组元素存放一个指向字符串数据的指针。 for语句将命令行中两个字符串abed和h3的长度进行累加,放在变量len中。
(37)若有下面的说明和定义: struct test { int ml;char m2;float m3; union uu{char ul[5];int u2[2];}ua; }myaa; 则sizeof(stuct test)的值是______。 A)12 B)16 C)14 D)9 答案:A 评析:在定义了结构体变量后,系统会为之分配内存单元,在内存中一个整型占2个字节,一个字符占1个字节,一个数组元素占1个字节,一个浮点型占4个字节。结构体变量所占内存长度是各成员占的内存长度之和;而共用体变量所占的内存长度等于最长的成员的长度。所以test在内存中占12个字节(2+l+4 +5=12)。 (38)若有定义:int aa[8];,则以下誊达式中不能代表数组元素aa[1]的地址的是______。 A)&aa[0]+l B)&aa[1] C)aa[0]++ D)aa+1 答案:C 评析:答案A中&aa[0]表示aa[0]的地址,加上1就是aa[1]的地址。同样aa[1]的地址也可以直接用&aa[1]或aa+l表示。 (39)下面叙述中正确的是______。 A)全局变量的作用域一定比局部变量的作用域范围大 B)静态类别变量的生存期贯穿于整个程序的运行期间 C)函数的形参都属于全局变量 D)未在定义语句中赋值的auto变量和static变量的初值都是随机值 答案:B 评析:c语言中,全局变量的作用范围是从定义处到程序结束,因此全局变量的定义点直接影响其作用范围,因此选项A错误。静态(statiC)存储类别变量是在程序编译时分配存储空间,该类别变量在整个程序运行期间占据着固定的存储单元,当多次调用其所在的函数时,该类别变量的值为上一次调用的值,直至整个程序结束运行后才释放该变量所占存储单元。因此选项B正确,选项D错误。c语言规定:函数的形参是auto型局部变量,因此选项c错误。 (40)以下程序的输出结果是______ 。 f(int b[],int m,int n) {jnt i,s=0; for(i=m;i return s; ) main() {int x,a[]:{1,2,3,4,5,6,7,8,9}; x=f(a,3,7); printf("%d\n",x); ) A)10 B)18 C)8 D)15 答案:A 评析:本题中,主函数调用f函数,在f函数中执行了两次循环,第一次i=3,s=0+b[i]:4,然后i的 值被修改成5,仍然满足循环条件,进入第二轮循环,s=4+b[5]=4+6=10,随后,i的值被修改成7,不再满足循环条件,退出循环,返回s的值。所以最后输出结果是10。 (41)若有以下定义和语句: int s[4][5],(*ps)[5]; ps=s; 则对s数组元素的正确引用形式是______ 。 A)ps+l B)*(ps+3) C)ps[0][2] D)*(ps+1)+3 答案:C 评析:选项A得到的是s数组第一行的地址,选项B得到的是s数组第三行第零列元素的地址,而选项D得到的是s数组第一行第三列元素的地址。只有选项c正确引用了ps数组第零行第二列的元素。 (42)以下程序的输出结果是______。 main() {int b[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1; for(i=0;i<3;i++) fbr(j=I;J<=I;J++)t=t+b[i][b[j][j]]; printf("%d\n",t); } A)3 B)4 C)l D)9 答案:B 评析:`两个循环语句嵌套使用,在第一次外循环中,i=0,执行内循环时,将j赋值为i的值O,执行一次t=t+b[i][b[j][j]],得到t (27)有以下程序段: int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b; b=p[5]; b中的值是______。 A)5 B)6 C)8 D)9 答案:D 评析:数组a各元素a[O]~a[9]的值依次为1~10;在程序的说明部分,指针变量p初始化为&a[3](即a+3),则p[5]相当于·(p+5),相当于a[8],所以执行语句b=p[5];后,b的值为9。
(28)在C语言中,形参的缺省存储类是______。 A)auto B)register C)static D)extern 答案:A 评析:程序进行编译时,并不为形式参数分配存储穿间。只有在被调用时,形式参数才临时地占有存储空间。形式参数用关键字auto作存储类别的声明时,关键字"auto"可以省略,auto不写则隐含确定为"自动存储类别",它属于动态存储方式。 (29)有以下定义: #include char a[10],*b=a; 不能给数组a输入字符串的语句是______。 A)gets(a); B)gets(a[0]); C)gets(&a[0]); D)gets(b); 答案:B 评析:函数gets的格式为:gets(字符数组名) c语言中,字符数组名代表数组的首元素地址,即&a[O],字符指针变量lb值也为数组a的首地址,选项A、c、D均能给数组a输入字符串。选项B中a[O]为数组元素,是一个数据变量。 (30)若指针p已正确定义,要使p指向两个连续的整型动态存储单元,不正确的语句是 _____ _. A)p=2*(int*)malloc(sizeof(int)); B)p=(int*)malloc(2*sizeof(int)) C)p=(int*)malloc(2*2) D)p=(int*)calloc(2,sizeof(int)) 答案:A 评析:malloe函数的作用是在内存开辟指定大小的存储空问,并将此存储空间的地址作为函数值带回,它的原型为void。malloe (unsigned int size),函数值为指针,这个指针是指向void类型。如果要将此返回地址赋给一个指向特定类型的指针变量,则应进行强制类型转换。 calloc函数的模型是:void*calloc(unsigned int num,unsigned int size)作用是分配num个大小为size字节的空间。 (31)下面程序段的输出结果是______ 。 main() { char strl [10]={’s’,’t’,’u’,’d’,’e’,’n’,’t’}; printf("%d\n",strlen(strl)); } A)7 B)8 C)10 D)存在语法错误 答案:A 评析:strlen()函数得到字符串的长度,返回值为数值型。字符数组初始化,若提供的初值个数大于数组长度,则按语法错误处理。如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定义为空字符。 (32)以下程序的输出结果是______。 main() {int x=040; printf("%o\n",x<<1); } A)100 B)80 C)64 D)32 答案:A 评析:040用二进制表示就是00100000,左移一位,得到的值应该是01000000,化成八进制应该是0100。 (33)下面程序运行后的输出结果是______。 main() { char arr[2][4]; strcpy(arr[0],"you");strcpy(arr[1],"me"); arr[0][3]=’&’; print"%s\n",arr[0]); } A)you&me B)you C)me D)err 答案:A 评析:在主函数中定义了一个2*4的二维字符数组,执行strcpy(arr[O]"fIyou");后,arr[0]={’y’’o’,’u’,’ \0’},执行strcpy(arr[1],"me");后arr[1]={ ’m’, ’e’,’\0’,不定},当执行完arr[O][3];’&’;从arr[O]开始的存储空间中的字符依次是’y’,’o’,’u’, ’&’,’m’,’e’,’\0’,故执行printf("%s\n",arr[O]);后的输出结果为"you&me",选A。 (34)若要打开A盘上的user子目录下名为abc.txt的文本文件进行读、写操作,下面符合 此要求的函数调用是______。 A)fopen("A:\user\abc.txt ","r") B)fopen("A:\\user\\abc.txt","r+") C)fopen("A:\user\abc.txt","rb") D)fopen("A:\\user\\abc.txt","w") 答案:B 评析:本题考查点是fopen函数中文件使用方式的指定。 文件使用方式"r",表示以"只读"方式打开一个字符文件。 文件使用方式"r+",表示以"读写"方式打开一个字符文件。 文件使用方式""rb",表示以"只读"方式打开一个二进制文件。 文件使用方式"w",表示以"只写"方式打开一个字符文件。
(35)以下不能正确进行字符串赋初值的语句为______。 A)char str[5]= "good! " B)char str[]="good! " C)char *str="good! " D)char str[5]={’g’,’0’,’o’,’d’} 答案:A 评析:用字符串作初值为字符数组赋值时,系统总会自动在字符串的末尾补上一个"\O",如选项A中定义的话,把第6个字符也就是"\0"赋给str数组,但此数组只含5个元素,而放到了s仃数组之后的存储单元中,这就可能会破坏其它数据区或程序本身。 (36)有以下程序: #include main(int argc,char*argv[]) { int i,len=O; for(i=1;i Print("%d\n",len); } 经编译连接后生成可执行文件ex.exe,若运行时输入以下带参数的命令行 ex abcd efg h3 k44 运行后输出结果是______。 A)14 B)12 C)8 D)6 答案:C 评析:main函数的第一个参数argc是int型变量,用来统计命令行中的字符串个数,本题输入带参数的命令行"ex abed efg h3 k44<回车>",argc的值是5;第二个参数是字符型指针数组,长度由argc的值决定,每个数组元素存放一个指向字符串数据的指针。 for语句将命令行中两个字符串abed和h3的长度进行累加,放在变量len中。 (37)若有下面的说明和定义: struct test { int ml;char m2;float m3; union uu{char ul[5];int u2[2];}ua; }myaa; 则sizeof(stuct test)的值是______。 A)12 B)16 C)14 D)9 答案:A 评析:在定义了结构体变量后,系统会为之分配内存单元,在内存中一个整型占2个字节,一个字符占1个字节,一个数组元素占1个字节,一个浮点型占4个字节。结构体变量所占内存长度是各成员占的内存长度之和;而共用体变量所占的内存长度等于最长的成员的长度。所以test在内存中占12个字节(2+l+4 +5=12)。 (38)若有定义:int aa[8];,则以下誊达式中不能代表数组元素aa[1]的地址的是______。 A) &aa[0]+l B)&aa[1] C)aa[0]++ D)aa+1 答案:C 评析:答案A中&aa[0]表示aa[0]的地址,加上1就是aa[1]的地址。同样aa[1]的地址也可以直接用&aa[1]或aa+l表示。 (39)下面叙述中正确的是______。 A)全局变量的作用域一定比局部变量的作用域范围大 B)静态类别变量的生存期贯穿于整个程序的运行期间 C)函数的形参都属于全局变量 D)未在定义语句中赋值的auto变量和static变量的初值都是随机值 答案:B 评析:c语言中,全局变量的作用范围是从定义处到程序结束,因此全局变量的定义点直接影响其作用范围,因此选项A错误。静态(statiC)存储类别变量是在程序编译时分配存储空间,该类别变量在整个程序运行期间占据着固定的存储单元,当多次调用其所在的函数时,该类别变量的值为上一次调用的值,直至整个程序结束运行后才释放该变量所占存储单元。因此选项B正确,选项D错误。c语言规定:函数的形参是auto型局部变量,因此选项c错误。 (40)以下程序的输出结果是______ 。 f(int b[],int m,int n) {jnt i,s=0; for(i=m;i return s; ) main() {int x,a[]:{1,2,3,4,5,6,7,8,9}; x=f(a,3,7); printf("%d\n",x); ) A)10 B)18 C)8 D)15 答案:A 评析:本题中,主函数调用f函数,在f函数中执行了两次循环,第一次i=3,s=0+b[i]:4,然后i的值被修改成5,仍然满足循环条件,进入第二轮循环,s=4+b[5]=4+6=10,随后,i的值被修改成7,不再满足循环条件,退出循环,返回s的值。所以最后输出结果是10。
(41)若有以下定义和语句: int s[4][5],(*ps)[5]; ps=s; 则对s数组元素的正确引用形式是______ 。 A)ps+l B)*(ps+3) C)ps[0][2] D)*(ps+1)+3 答案:C 评析:选项A得到的是s数组第一行的地址,选项B得到的是s数组第三行第零列元素的地址,而选项D得到的是s数组第一行第三列元素的地址。只有选项c正确引用了ps数组第零行第二列的元素。 (42)以下程序的输出结果是______。 main() {int b[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1; for(i=0;i<3;i++) fbr(j=I;J<=I;J++)t=t+b[i][b[j][j]]; printf("%d\n",t); } A)3 B)4 C)l D)9 答案:B 评析:`两个循环语句嵌套使用,在第一次外循环中,i=0,执行内循环时,将j赋值为i的值O,执行一次t=t+b[i][b[j][j]],得到 |
|
![]() ![]() |