希赛网等考频道

1、希赛网简介

    希赛网由原来的软件工程专家网（www.51CMM.com）和中国系统分析员网（www.CSAI.cn）于2005年05月30日合并而成，是目前中国最大的IT技术/IT管理/IT教育/IT培训/IT咨询资源网站。
    软件工程专家网是中国独家专注于软件工程相关领域的专业门户网站，于2001年6月由创智、联想、摩托罗拉、托普、中兴、东软、方正、中科院、清华大学等单位的软件工程和CMM相关领域的核心人员创办。软件工程专家网拥有全国一流的软件工程专家，开设了中国第一家网上软件学院。
    中国系统分析员顾问团（CSAI）是由通过国家考试的系统分析员和多年从事系统分析工作的人士组成，其宗旨是加强全国系统分析员之间的合作与交流，提高系统分析员的工作水平，积极推进国家信息化建设和软件产业化发展。中国系统分析员网以CSAI为后盾，全面关注中国IT产业和国家信息化建设，是中国最大的信息技术专业高端网站，是中国计算机技术和软件专业资格（水平）考试最权威的辅导和培训站点。
    截止www.51CMM.com和www.CSAI.cn两大网站合并时（2005年05月30日）止，希赛网拥有注册用户363919人，平均日访问量在8.6万独立IP以上，日均页面浏览量在179.4万人次以上。

2、希赛等考学院简介：

   希赛等考学院拥有大量的等考资源免费供大家下载。其中包括历年的真题、考前模拟题、考前冲刺复习资料、考生考试心得...

进入等考学院>>>


全国计算机等级考试二级C考试大纲

基本要求
    1.具有计算机的基础知识。
    2.了解操作系统的基本概念,掌握常用操作系统的使用。
    3.掌握基本数据结构和常用算法,熟悉算法描述工具――流程图的使用。
    4.能熟练地使用一种高级语言或数据库语言编写程序、调试程序。

考试内容
    一、基础知识与基本操作
    (一)基础知识
    1.计算机系统的主要技术指标与系统配置。
    2.计算机系统、硬件、软件及其相互关系。
    3.微机硬件系统的基本组成。包括:中央处理器(运算器与控制器),内存储器(RAM与ROM),外存储器(硬盘、软盘与光盘),输入设备(键盘与鼠标)输出设备(显示器与打印机)。
    4.软件系统的缀成,系统软件与应用软件;软件舶蒸丰概念,文档;程序设计语言与语言处理程序(汇编程序、编译程序、解释程序)。
    5.计算机的常用数制(二进制、十六进制及其与十进制之间的转换);数据基本单位(位、字节、字)。
    6.计算机的安全操作;计算机病毒的防治。
    7.计算机网络的一般知识。
    8.多媒体技术的一般知识。
    (二)DOS的基本操作
    l.操作系统的基本功能与分类。
    2.DOS操作系统的基本组成。
    3.文件、目录、路径的基本概念。
    4.常用DOS操作,包括:
        初始化与启动:
        文件操作(TYPE,COPY,DEL,REN,XCOPY,ATTRⅠB);
        目录操作(DⅠR,MD,CD,RD,TREE,PATH);
        磁盘操作(FORMAT,DⅠSKCOPY,CHKDSK);
        功能操作(ⅤER,DATE,TⅠME,CLS,PROMPT,HELp);
        批处理(批处理文件的建立与执行,自动批处理文件);
        输入输出改向。
    (三)Windows的基本操作
    1.Windows的特点、基本构成及其运行环境。
    2.Windows用户界面的基本元素。包括:窗口、图标、菜单、对话框、按钮、光标等。
    3.Windowo基本操作。包括:启动与退出,鼠标操作,窗口操作,图标操作、菜单操作,对话框操作。
二、程序设计
    1.能运用结构化程序设计方法编写程序。
    2.掌握基本数据结构和常用算法。
    3.能熟练使用一种高级语言或一种数据库语言(共有QBASIC、FORTRAN、C以及FoxBASE+等四种语言,考生任选其中一种。各种语言的考试内容附后)。
三、上机操作
    在指定的时间内使用微机完成下述操作:
    1.完成指定的计算机基本操作(包括机器启动和操作命令的使用)。
    2.按给定要求编写和运行程序。
    3.调试程序,包括对给出的不完善的程序进行修改和补充,使之能得到正确的结果。

C语言程序设计
    （一）C语言的结构
    1.程序的构成,main函数和其它函数。
    2.头文件、数据说明、函数的开始和结束标志。
    3.源程序的书写格式。
    4.C语言的风格。
    （二）数据类型及其运算
    1.C的数据类型(基本类型、构造类型、指针类型、空类型)及其定义方法
    2.C运算符的种类、运算优先级、结合性。
    3.不同类型数据间的转换与运算。
    4.C表达式类型(赋值表达式、算术表达式、关系表达式、逻辑表达式、条件表达式、逗号表达式)和求值规则。

    （三）基本语句
    1.表达式语句,空语句,复合语句
    2.数据的输入与输出,输入输出函数的调用。
    3.复合语句。
    4.go to 语句和语句标号的使用。

    （四）选择结构程序设计
    1.有if语句实现选择结构。
    2.用switch语句实现多分支选择结构。
    3.选择结构的嵌套。

    （五）循环结构程序设计
    1.for 循环结构。
    2.while和do while循环结构。
    3.continue语句、break语句。
    4.循环的嵌套。

    （六）数组的定义和引用
    1.一维数组和多维数组的定义、初始化和引用。
    2.字符串与字符数组。

    （七）函数
    1.库函数的正确调用。
    2.函数的定义方法。
    3.函数的类型和返回值。
    4.形式参数与实在参数,参数值的传递。
    5.函数的正确调用,嵌套调用,递归调用。
    6.局部变量和全局变量。
    7.变量的存储类别(自动、静态、寄存器、外部),变量的作用域和生存期。
    8.内部函数与外部函数。

    （八）编译预处理
    1.宏定义:不带参数的宏定义;带参数的宏定义。
    2.“文件包含”处理。

    （九）指针
    1.指针与指针变量的概念,指针与地址运算符。
    2.变量、数组、字符串、函数、结构体的指针以及指向变量、数组、字符串、函数、结构体的指针变量。通过指针引用以上各类型数据。
    3.用指针作函数参数。
    4.返回指针值的指针函数。
    5.指针数组,指向指针的指针,main函数的命令行参数。

    （十）结构体(即“结构”)与共用体(即“联合”)
    1.结构体和共用体类型数据的定义方法和引用方法。
    2.用指针和结构体构成链表,单向链表的建立、输出、删除与插入。

    (十一)位运算
    1.位运算符的含义及使用。
    2.简单的位运算。

    (十二)文件操作
    只要求缓冲文件系统(即高级磁盘I/O系统),对非标准缓冲文件系统(即低级磁盘I/O系统)不要求。
    1.文件类型指针(FILE类型指针)。
    2.文件的打开与关闭(fopen,fclose)。
    3.文件的读写(fputc,fgetc,fputs,fgets,fread,frwite,fprintf,fscanf函数),文件的定位(rewind,fseek函数)。


98年4月二级C语言笔试试题

1998年4月二级C语言笔试试题

一. 选择题 A)、B)、C)、D)四个选项中，只有一个选项是正确的， 请将正确选项涂写在答题卡相应位置上，答在试卷上不得分.

(1)所谓"裸机"是指( 　)。

A)单片机 B)单板机

C)不装备任何软件的计算机 D)只装备操作系统的计算机

(2)下面存储器中,存取速度最快的是( 　)。

A)软盘 B)硬盘

C)光盘 D)内存

(3)系统软件中最重要的是( 　)。

A)操作系统 　　　　　　　　　B)语言自理程序

C)工具软件 　　　　　　　　　D)数据库管理系统

(4)CPU自理的数据基本单位为字,一个字的字长( 　)。

A)为8个二进制位　　　　　　　 B)为16个二进制位

C)为32个二进制位　　　　　　　D)与CPU芯片的型号有关

(5)打印当前屏幕内容应使用的控制健是( 　)。

A)Scroll-Lock 　　　　　　　　B)Num-Lock

C)PgDn 　　　　　　　　　　　 D)PrtSc(Print Screen)

(6)能将高级语言源程序转换成目标程序的是( 　)。

A)调试程序　　　　　　　　　 B)解释程序

C)编译程序　　　　　　　　　 D)编辑程序

(7)二进制数1110111.11转换成十进数是( 　)。

A)119.375　　　　　　　　　　 B)119.75

C)127.0625　　　　　　　　　　D)127.125

(8)十六进制数FF.1转换成十进制数是( 　)。

A)255.0625　　　　　　　　　 B)255.125

C)127.0625　　　　　　　　　 D)127.125

(9)3.5英寸软盘片的一个角上有一个滑动块,如果移动该滑动块露出一个小孔, 则该软盘( 　)。

A)不能读但能写 　　　　　　　B)不能读也不能写

C)只能读不能写　　　　　　　 D)能读写

(10)控制键^C的功能为( 　)。

A)终止当前操作　　　　　　　 B)系统复位

C)暂停标准输出设备的输出 　　D)结束命令行

(11)COMMAND COM为命处理程序,DOS系统启动后,它( 　)。

A)驻留在外存,需要时再装入内存 　　　　B)常驻内存,包含所有内部命令

C)不能处理外部命令　　　　　　　　　　 D)不能处理后缀为.EXE的可执行文件

(12)为了将所有扩展名为.PAS的文件改成扩展名为.P,应使用命令( 　)。

A)REN *.PAS *.?AS　　　　　　　　　 B)REN PAS P

C)REN *.PAS *.p 　　　　　　　　　　D)REN *.PAS *.P??

(13)设当前盘中文件XY.C的路径为\A\B\XU,当前目录为\A\B. 为了查看文件XY.C的内容,应使用命令( 　)。

A)TYPE XU\XY.C 　　　　　B)TYPE \XU\XY.C

C)DIR XU\XY.C 　　　　　 D)DIR \A\B\XU\XY.C

(14)要将提示符改成当前盘当前目录后加一个大于号">",应使命令( 　)。

A)PROMPT 　　　　　　　　B)PROMPT $P$g

C)PROMPT $$　　　　　　 D)PROMPT C\>

(15)设C盘根目录中有一个批处理文件A.BAT,当前盘为A盘.为了执行该批处理文件,下列命令中一定正确的是( 　)。

A)C:\A　　　　　　　　　 B)C;A.BAT

C)A.BAT　　　　　　　　 D)\A.BAT

(16)设当前盘为C盘,将A盘根目录下的文件 目录信息存放到当前盘当前目录下的文件AB中,应使用命令( 　)。

A)TYPE A:\>AB　　　　　 B)DIR >AB

C)DIR A;\>AB 　　　　　 D)DIR \>AB

(17)可执行文件ABC.EXE所需要的输入数据已经按格式存放在文件XYZ中,要求将执行结果在打印机上打印输出.下列命正确的是( 　)。

A)ABCXYZ

C)ABC>XYZPRN

(18)在当前盘当前目录下有一个文件A.BAT,其内容为( 　)。

CD \

MD \XYZ\AB\BC

CD XYZ\AB\B

在正确执行上述文件后,接着执行下列命令时,不会发生错误的是( 　)。

A)MD C　　　　　 B)RD \XYZ

C)RD.C 　　　　　D)RD B

(19)下列命令组中两个DOS命令互相等价的是( 　)。

A)TYPE AB.TXT与DIR AB.TXT

B)DISKCOMP A: B:与COMP A:*.* B.*.*

C)TYPE AB.TXT >>XY.TXT与COPY AB.TXT XY.TXT

D)TYPE AB.TXT >XY.TXT与COPY AB.TXT XY.TXT

(20)设A盘为启动盘,其目录结构为

        根目录

        │

┌───┴─────┐

DOS子目录 COMMAND.COM

        │

┌──────────┐

USER子目录 　AUTOEXEC.BAT

其中文件AUTOEXEC.BAT的内容如下:

MD \XYZ

CD \DOS\USER

则由A盘启动成功后,A盘的当前目录是( 　)。

A)\DOS\USER 　　　　B)\XYZ

C)根目录　　　　　　D)\DOS

(21)在C语言提供的合法的着急字是( 　)。

A)swicth　　　　　　　 B)cher

C)Case　　　　　　　　 D)default

(22)在C语言中,合法的字符常量是( 　)。

A)'\084' 　　　　　　　B)'\x43'

C)'ab' 　　　　　　　　D)"\0"

(23)若已定义x和y为double类型,则表达式:x=1,y=x+3/2的值是( 　)。

A)1　　　　　　　 B)2

C)2.0 　　　　　　D)2.5

(24)合法的数组定义是( 　)。

A)int a[]="string";　　　 B)int a[5]={0,1,2,3,4,5};

C)vhst s="string";　　　 D)char a[]={0,1,2,3,4,5};

(27)若有定义和语句:

char s[10]:s="abcd";printf("%s\n",s);

则结果是(以下u代表空格) ( 　)。

A)输出abcd 　　　　　　B)输出a

C)输出abcduuuuu 　　　 D)编译不通过

(28)若有定义和语句:

int **pp,*p,a=10,b=20;

pp=&p;p=&a;p=&b;printf("%d\n",*p,**pp);

则输出结果是:( 　)。

A)10,20　　　　 B)10,10

C)20,10 　　　　D)20,20

(29)若有以下定义和语句:

int u=010,v=0x10,w=10;

printf("%d,%d,%d\n,u,v,w);

则输出结果是:( 　)。

A)8,16,10　　　　 B)10,10,10

C)8,8,10 　　　　 D)8,10,10

(30)若有以下定义和语句

char c1='b',c2='e';

printf("%d,%c\n",c2-c1,c2-'a'+"A");

则输出结果是:( 　)。

A)2,M 　　　　　B)3,E

C)2,E 　　　　　D)输出项与对应的格式控制不一致,输出结果不确定

(31)若有以下定义:

char s[20]="programming",*ps=s;

则不能代表字符o的表达式是( 　)。

A)ps+2 　　　　B)s[2]

C)ps[2] 　　　 D)ps+=2,*ps

(32)若ij已定义为int类型,则以下程序段中内循环体的总的执行次数是( 　)。

for (i=5;i;i--)

for(j=0;j<4;j++){...}

A)20　　　　　 B)25

C)24　　　　　 D)30

(33)若有以下定义和语句:

char *s1="12345",*s2="1234";

printf("%d\n",strlen(strcpy(s1,s2)));

则输出结果是( 　)。

A)4　　　　　 B)5

C)9 　　　　　D)10

(34)若有以下定义和语句:

int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;

则不能表示a数组元素的表达式是( 　)。

A)*p　　　　　 B)a[10]

C)*a　　　　　 D)a[p-a]

(35下面程序的输出是( 　)。

main()

{ char *s="121";

int k=0, a=0, b=0;

do

{k++;

if(k%2==0) {a=a+s[k]-'0';continue;}

b=b+s[k]-'0'; a=a+s[k]-'0';

}

while (s[k+1]);

printf("k=%d a=%d b=%d\n",k,a,b);

A)k=3 a=2 b=3　　　　　 B)k=3 a=3 b=2

C)k=2 a=3 b=2 　　　　　D)k=2 a=2 b=3

(36)下面程序的输出是( 　)。

main()

{ unsigned a=32768;

printf("a=%d\n",a);

}

A)a=32768　　　　　 B)a=32767

C)a=-32767 　　　　 D)a=-1

(37)若有以下定义:

float x;int a,b;

则正确的switch 语句是( 　)。

A)switch(x)　　　　　　　　　　　 B)switch(x)

{ case1.0:printf("*\n");　　　　 { case1,2:printf("*\n");

    case2.0:printf("**\n");　　　　　　　case3:printf("**\n");

}　　　　　　　　　　　　　　　　 }

C)switch (a+b)　　　　　　　　　　 D)switch (a+b);

{ case 1:printf("\n"); 　　　　　　　　{ case 1:printf(."*\n");

    case 1+2:printf("**\n");　　　　　　　　 case 2:printf("**\n");

}　　　　　　　　　　　　　　　　　　　 }

(38)若有定义:int x,y;char a,b,c;并有以下输入数据(此处< CR> 代表换行符,/u代表空格):

1u2

AuBuC

则能给x赋整数1,给y赋整数2,给a赋字符A,给b赋字符B,给c赋字符C 的正确程序段是( 　)。

A)scanf("x=%d y+%d",&x,&y);a=getchar();b=getchar();c=getchar();

B)scanf("%d %d",&x,&y);a=getchar();b=getchar();c=getchar();

C)scanf("%d%d%c%c%c,&x,&y,&a,&b,&c);

D)scanf("%d%d%c%c%c%c%c%c:&x,&y,&a,&a,&b,&b,&c,&c);

(39)以下程序输出的结果是( 　)。

#include

#include

main()

{ char w[][10]={"ABCD","EFGH","IJKL","MNOP"},K;

for (k=1;k<3;k++)

printf("%s\n",&w[k][k]);

}

A)ABCD　　　　　　　　 B)ABCD

  FGH 　　　　　　　　　　EFG

  KL 　　　　　　　　　　　IJ

  M

C)EFG 　　　　　　　　D)FGH

  JK 　　　　　　　　　　KL

  O

(40)若有以下的定义:

int a[]={1,2,3,4,5,6,7,88,9,10), *p=a;

则值为3的表式是( 　)。

A)p+=2, *(p++)　　　　 B)p+=2,*++p

C)p+=3, *kp++　　　　　 D)p+=2,++*p

(41)假定所有变量均已正确说明,下列程序段运行后x的值是( 　)。

a=b=c=0;x=35;

if(!a)x--;

else if(b);if(c)x=3;

else x=4;

A)34　　　　　　 B)4

C)35　　　　　　 D)3

(42)在以下一组运算符中,优先级最高的运算符是( 　)。

A)<= 　　　　B)=

C)%　　　　　D)&&

(43)若有以下定义和语句:

int w[2][3],(*pw)[3]; pw=w;

则对w数组元素非法引用是( 　)。

A)*(w[0]+2)　　　　　　　 B)*(pw+1)[2]

C)pw[0][0] 　　　　　　　 D)*(pw[1]+2)

(44)若有以下程序片段:

char str[]="ab\n\012\\\"";

printf(%dd",strlen(str));

上面程序片段的输出结果是( 　)。

A)3　　　　　 B)4

C)6 　　　　　D)12

(45)函数调用:strcat(strcpy(str1,str2),str3)的功能是( 　)。

A)将串str1复制到串str2中后再连接到串str3之后

B)将串str1连接到串str2之后再复制到串str3之后

C)将串str2复制到串str1中后再将串str3连接到串str1之后

D)将串str2连接到串str1之后再将串str1复制到串str3中

(46)以下对C语言函数的有关描述中,正确的是( 　)。

A) 在C中,调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参

B) C函数既可以嵌套定义又可以递归调用

C)函数必须有返回值,否则不能使用函数

D)C程序中有调用关系的所有函数必须放在同一个源程序文件中

(47)以下叙述中不正确的是( 　)。

A)在C中,函数中的自动变量可以赋初值,每调用一次,赋一次初值.

B)在C中,在调用函数时,实在参数和对应形参在类型上只需赋值兼容.

C)在C中,外部变量的隐含类别是自动存储类别.

D)在C中,函数形参可以说明为register变量.

(48)以下程序的输出结果是( 　)。

#include

subl(char a,char b) {char c; c=a;a=b;b=c;}

sub2(char* a,char b) {char c; c=*a;*a=b;b=c;}

sub3(char* a,char*b) {char c; c=*a;*a=*b;*b=c;}

{ char a,b;

a='A';b='B';sub3(&a,&b);putchar(a);putchar(b);

a='A';b='B';sub2(&a,b);putchar(a);prtchar(b);

a='A';b='B';sub1(a,b);putchar(a);putchar(b);

}

A)BABBAB　　　　 B)ABBBBA

C)BABABA 　　　　D)BAABBA

(49)设有如下定义:

struct sk

{int a;float b;}data,*p;

若有p=&data;,则对data中的a域的正确引用是( 　)。

A)(*p).data.a 　　　　B)(*p).a

C)p->data.a　　　　　 D)p.data.a

(50)以下对枚举类型名的定义中正确的是( 　)。

A)enum a={one,two,three};

B)enum a {one=9,two=-1,three};

C)enum a={"one","two","three"};

D)enum a {"one","two","three"};

二.填空题(每空2分,共40分)

    请将每空的正确答与在答题卡1至20序号的横线上,答在试卷上不得分.

(1)与十进制数101等值的十进制数为 1

(2)DOS命令分为内部命令与外部命令,XCOPY命令属于 2 命令.

(3)设当前盘为A盘,当前系统提示符为">",在不改变当前盘的情况下,显示C盘的当前目录路径,应使用命令 3

(4)自动批处理文件必须是 4

(5)设在当前盘当前目录下有两个文件W.TXT与P.TXT,现要将文件 P.TX连接到文件W.TXT的后面,若使用COPY命令,则完整的命令为 5

(6)请写出以下数学式的C语言表达式 6

(7)若已知a=10,b=20,则表达式!ab)

printf("****y%d\n",y);

else

printf("####x=%\n",x);

(11)在对文件进行操作的过程中,若要求文件的位置回到文件的开头,应当调用的函数是 11

(12)若函数fun的类型void,且有以下定义和调用语句:

#define M 50

main()

{ int a[M];

.

.

.

fun(a);

.

.

.

}

定义fun函数首部可以用三种不同的形式,请写出这三种形式: 12 .13 .14

(注意:①形参的名字请用q,②使用同一种风格).

(13)若给fun函数的形参s传送字符串:"uuuu6354abc",则函数的返回值是 15

log fun(char s[])

{long n;int sign;

for(;isspace(*s);s++);

sign+(*s=='-')?-1:1;

if(*s=='+'‖*s=='-'s++;

for(n=0;isdigit(*s);s++)

n=10*n+(*s-'0');

return sign * n;

(14)以下函数用来在w数组中插入x,w数组中的数已按由小到大顺序存放,n 所指存储单元中存放数组中数据的个数.插入后数组中的数仍有序.请填空.

void fun (char *w,char x,int *n)

{ int i,p;

p=0;

w[*n]=x;

while (x>w[p]) 16；

for(i=*n;i>p;i--)w[i]= 17 ;

w[p]=x;

++ *n;

}

(15)fun1函数的调用语句为:fun1(&a,&b,&c); 它将三个整数按由大到小的顺序调整后依次放入a,b,c,三个变量中,a中放量大数.请填空.

void fun2 (int *x,int *y)

{ int t;

t=*x; *x=*y;*y=t;

}

void fun1 (int *pa,int *pb,int *pc)

{ if(*pc>*pb) fun2( 18)

───;

if(*pa<*pc)fun2(19)

──;

if(*pa<*pb)fun2(20)

──;

}


98年4月二级C语言笔试试题答案

1998年4月二级C语言笔试试题答案

一.选择题((1)-(4)共40题,每题1分;(41)-(50)共10题,每题2分)

(1)C (2)D (3)A (4)D (5)D

(6)C (7)B (8)A (9)C (10)A

(11)B (12)C (13)A (14)B (15)A

(16)C (17)D (18)C (19)D (20)C

(21)D (22)B (23)C (24)D (25)A

(26)D (27)D (28)D (29)A (30)B

(31)A (32)A (33)A (34)B (35)C

(36)C (37)C (38)D (39)D (40)A

(41)B (42)C (43)B (44)C (45)C

(46)A (47)C (48)A (49)B (50)B

二.填空(1-20共20空,每空2分)

(1) 1 1100101 或 (1100101)2

(2) 2 外部(答 外部命令 不扣分)

(3) 3 CD C:(CD与C:中间至少要有一个空格

(4) 4 AUTOEXEC.BAT

(5) 5 COPY W.TXT+P.TXT 或 COPY W.TXT+P.TXT W.TXT

(6) 6 a/(b*c)或a/(c*b)或a/b/c或a/c/b

(7) 7 1

(8) 8 ###a=26,b=13,c=19

(9) 9 *(p+5)或p[5]

(10)10

if(a<=b){x=1;printf("####x=%b\n",x);}

else {y=2;printf("****y=%b\n",y);}

或

if(a>b) {y=2;printf("****y=%b\n",y);}

else {x=1;printf("####x=%B\n",x);}

或

if(a>b) printf("####c=%b\n",x=1);

else printf("****y+%b\n",y=2);

或

if(a>b)printf("****y=%b\n,y=2);

ilse printf("####x=%b\n",x=1);

(11) 11 rewind 或 fseek

(12) 12、13、14

void fun (int *q)

void fun (int q[])

void fun (int q[M])

或

void fun (q)int *q;

void fun (q)int q[];

void fun (q)int q[M];

说明:以上两组答案中

(A)三个答案可以任意次序.(B)标识符q 可以用以字母或下划线开头以字母、数字和下划线组成的名字代替.(C)两种风格可以混用,例如:

void fun (int *q)

void fun (q)int q[];

void fun (int q[M])

(13) 15 6354

(14) 16 p++或++p或p=p+1或p+=1或p=1+p

17 w[i-1]或*(w+i-1)

(15) 18 pc,pb 或pb,pc

19 pc,pa 或pa,pc

20 pb,pa 或pa,pb


98年9月二级C语言笔试试题

1998年9月二级C语言笔试试题

一、选择题((1)-(40)每个选项1分,(41)-(50)每个选项2分,共60分)

    下列各题A)、B)、C)、D)、四个有选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上,答在试卷上不得分

(1)通常所说的主机主要包括( 　)。

A)CPU　　　　　　　　　B)CPU和内存

C)CPU、内存与外存 　　 D)CPU、内存与硬盘

(2)在微机系统中,最基本的输入输出模块BIOS存放在( 　)。

A)RAM中　　 B)ROM中　　 C)硬盘中　　　D)寄存器中

(3)一个24*24点阵的汉字字形信息所占的字节数为( 　)。

A)2 　　　B)24　　　　 C)32　　　 D)72

(4)bit的意思是( 　)。

A)字　　　B)字长 　　　C)字节　　　 D)二进制位

(5)某学校的工资管理程序属于( 　)。

A)系统程序　　　 B)应用程序

C)工具软件　　　 D)文字处理软件

(6)与十六进制数BB等值的十进制数是( 　)。

A)187　　　 B)188　　　 C)185 　　　D)186

(7) 设一张软盘已染上病毒，能清除病毒的措施是( 　)。

A)删除该软盘上的所有文件 　　　　　B)格式化该软盘

C)删除该软盘上的所有可执行文件　　 C)删除该软盘上的所有批处理文件

(8)一张3.5英寸双面高密度软盘片的容量为( 　)。

A)360KB　　　 B)720KB　　　 C)1.44MB　　　 D)1.2MB

(9)与二进制小数0.1等值的十六进制小数为( 　)。

A)0.1 　　　B)0.2 　　　C)0.4　　　 D)0.8

(10)DOS系统的热启动与冷启动的不同之处为热启动时( 　)。

A)不检测键盘、处设接口与内存　　　 B)不提示用户输入日期与时间

C)不用装入COMMAND.COM文件 　　　　　D)不能从软盘启动

(11)为了将磁盘上的文件K1,K2,K3,依次连接在文件K4的后面,应使用命令( 　)。

A)COPY K1+K2+K3 K4 　　　　　B)COPY K1+K2+K3+K4

C)COPY K1+K2+K3+K4 K4　　　　D)COPY K4+K1+K2+K3

(12)下列文件名中可以作为批处理文件名的是( 　)。

A)AUTOEXC.C 　　　　B)AUTOEXEC

C)ATX.BAT 　　　　　D)AUTO.TXT

(13)要打印输出当前盘的根目录下所有文件与子目录清单,应使用命令( 　)。

A)DIR \ PRN　　　　 B)TYPE \ PRN

C)DIR PRN　　　　　 D)TYPE PRN

(14)设可执行文件 ABC.EXE 所需要的本该由键盘输入的数据已经按格式存放在文件XYZ 中,并要求执行结果放在文件 XYZ 中输入数据的后面. 下列命令中正确的是( 　)。

A) ABC XYZ B) ABC XYZ

C) ABC <XYZ

(15)设当前盘中某一目录路径为 \A\B\C,当前目录为\A.下列命令中肯定出错的是( 　)。

A)MD \A\C 　　　B) CD 　　　C) MD \A\B\A 　　　D) MD \A\B

(16)设 A 盘的目录结构如下:

              根目录

              │

┌─────┬┴──┬───┬───┬────┐

│　　　　　│　　　│ 　　│ 　　　│　　　　 │

ABC　　　 D1子目录 DX.C　 Q.DAT 　D2子目录 　A.FOR

              │　　　　　　　　　　　 │

┌────┬─┴──┬───┐ ┌───┬───┐

│　　　 │ 　　　　│ 　　　││ 　　│　　　　│

B.PAS　 D3子目录 　Y.BAS 　A.C A1.C D4子目录 　XYZ.C

          │

┌────┬────┬────┐

│ 　　　│ 　　　　│　　　　 │

QR.C　　 NA.C　　　 A.TXT　　　 B.C

如果当前盘为 C 盘,A 盘的当前目录为\D2,则下列对 A 盘上文件QR.C 的指定中,合法的是( 　)。

A)\D2\D4\QR.C　　　　　 B)D4\QR.C

C)A:D4\QR.C　　　　　　 D)A:D2\D4\QR.C

(17)下列DOS命令中,有错误的是( 　)。

A)TYPE AAB.FORCON 　　　　B)TYPE ?AB.FOR

C)COPY *.C CON 　　　　　 D)COPY CON PRN

(18)设当前盘为A盘,为了将当前盘当前目录下的文件AB1.TXT连接在C 盘根目录下的文件XYZ.TXT的后面,正确的命令是
( 　)。

A)COPY C:\XYZ.TXT+AB1.TXT

B)COPY AB1.TXTC:\XYZ.TXT

C)TYPE AB1.TXTC:\XYZ.TXT

D)AB1.TXT+C:\XYZ.TXTC:\XYZ.TXT

(19)下列命令中合法的是( 　)。

A)DISKCOPY A: A: 　　　　B)DISKCOPY A: C:

C)DISKCOPY C: A: 　　　　D)DISKCOPY C: D:

(20)设当前盘中某一目录路径为\A\B\C\D\XU,当前目录为\A.要将根目录下扩展名为.C的所有文件复制到当前目录下,并将扩展名改为.FOR,应使用命令( 　)。

A)COPY \*.C *.FOR　　　　　 B)COPY *.C \A\*.FOR

C)COPY *.FOR \*.C 　　　　　D)COPY \A\*.C *.FOR

(21)下列不正确的转义字符是( 　)。

A)'\\' 　　　　　B)'\"　　　　　 C)'074' 　　　D)'\0'

(22)若有以下定义:

char a; int b;

float c; double d;

则表达式a*b+d-c值的类型为( 　)。

A) float　　　 B) int　　　 C) char　　　　 D) double

(23)表示关系x<=y<=z的c语言表达式为( 　)。

A) (X<=Y)&&(Y<=Z)　　　　 B) (X<=Y)AND(Y<=Z)

C) (X<=Y<=Z)　　　　　　　D) (X<=Y)&(Y<=Z)

(24)设a=1,b=2,c=3,d=4,则表达式:a<b?a:c<d?a:d的结果为( 　)。

A) 4 　　　　B) 3 　　　　C) 2 　　　　D) 1

(25)设x为int型变量,则执行以下语句后,x的值为( 　)。

x=10; x+=x-=x-x;

A) 10 　　B) 20　　　 C) 40　　　 D) 30

(26)下列可作为C语言赋值语句的是( 　)。

A) x=3,y=5 　　　　 B) a=b=6

C) i--;　　　　　　 D) y=int(x);

(27)设x,y,z,t均为int型变量,则执行以下语句后,t的值为( 　)。

x=y=z=1;

t=++x||++y&&++z;

A) 不定值 　　　B) 2　　　 C) 1 　　　D) 0

(28)设i是int型变量,f是float型变量,用下面的语句给这两个变量输入值:

scanf("i=%d,f=%f",&i,&f);

为了把100和765.12分别赋给i和f,则正确的输入为( 　)。

A) 100765.12 　　　　B) i=100,f=765.12

C) 100765.12 　　　　D) x=100y=765.12

(29)设x和y均为int型变量,则执行下的循环后,y值为

for(y=1,x=1;y<=50;y++)

{ if(x=10))break;

if (x%2==1)

{ x+=5; continue;}

x-=3;

}

A) 2　　　　 B) 4　　　　 C) 6　　　 D) 8

(30)给出以下定义:

char x[ ]="abcdefg";

char y[ ]={'a','b','c','d','e','f','g'};

则正确的叙述为( 　)。

A) 数组X和数组Y等价 　　　　　　　　B) 数组x和数组Y的长度相同

C) 数组X的长度大于数组Y的长度 　　　D) 数组X的长度小于数组Y的长度

(31)以下叙述中不正确的是( 　)。

A) 在不同的函数中可以使用相同名字的变量

B) 函数中的形式参数是局部变量

C) 在一个函数内定义的变量只在本函数范围内有效

D) 在一个函数内的复合语句中定义的变量在本函数范围内有效

(32)假定a和b为int型变量,则执行以下语句后b的值为( 　)。

a=1; b=10;

do

{ b-=a; a++; }

while (b--<0);

A) 9　　　　 B) -2 　　　　C) -1　　　　 D) 8

(33)设j为int型变量,则下面for循环语句的执行结果是( 　)。

for( j=10;j3;j--)

{ if(j%3)j--;

--j; --j;

printf("%d ",j);

}

A) 6 3 　　　B) 7 4　　　 C) 6 2 　　　D) 7 3

(34)设有以下宏定义:

#define N 3

#define Y(n) ( (N+1)*n)

则执行语句:z=2 * (N+Y(5+1));后,z的值为( 　)。

A) 出错　　　 B) 42 　　　C) 48　　　 D)54

(35)设P1和P2是指向同一个int型一维数组的指针变量,k为int型变量,则不能正确执行的语句是( 　)。

A)k=*P1+*P2;　　 B)p2=k;　　　 C)P1=P2; 　　　D)K=*P1 * (*P2);

(36)设有如下定义:

int arr[]={6,7,8,9,10};

int * ptr;

则下列程序段的输出结果为( 　)。

ptr=arr;

* (ptr+2)+=2;

printf ("%d,%d\n",*ptr,*(ptr+2));

A)8,10 　　　B)6,8　　　 C)7,9 　　　D)6,10

(37)以下程序的输出结果是( 　)。

main()

{ int i,k,a[10],p[3]:

K=5;

for (i=0;i<10;i++) a[i]=i;

for (i=0;i<3;i++) p[i]=a[i*(i+1)];

for (i=0;i<3;i++) k+=p[i]*2;

printf("%d\n",k);

}

A) 20　　　 B) 21　　　 C) 22 　　　D)23

(38)执行以下程序段后,m的值为( 　)。

int a[2][3]={ {1,2,3},{4,5,6} };

int m,*p;

p=&a[0][0];

m=(*p)*(*(p+2))*(*(p+4));

A) 15　　 B) 14 　　C) 13　　 D) 12

(39)有以下程序段

char arr[]="ABCDE";

char *ptr;

for(ptr=arr;ptr<arr+5;ptr++)printf("%s\n",ptr);

输出结果是( 　)。

A) ABCD 　　B) A　　 C) E 　　　D) ABCDE

                B 　　　 D 　　　　　BCDE

                C　　　 C　　　　　　CDE

                D 　　　 B 　　　　　　DE

                E 　　　 A 　　　　　　E

(40)有以下程序

main()

{ int x,i;

for(i=1;i<=50;i++)

{ x=i;

if(++x%2==0)

if(x%3==0)

if(x%7==0)

printf("%d,i);

}

}

输出结果是( 　)。

A) 28 　　B) 27 　　C) 42 　　　D) 41

(41)有下列程序

#include<stdio.h

main()

{ union

{ int k;

char i[2];

} *s,a;

s=&a;

s-i[0]=0x39; s-i[1]=0x38;

printf("%x\n",s-k);

}

输出结果是( 　)。

A) 3839 　　　B) 3938　　　 C) 380039　　　 D) 390038

(42)有以下程序

#include <stdio.h

main()

{ int a,b,c=246;

a=c/100%9;

b=(-1)&&(-1);

printf("%d,%d\n",a,b);

}

输出结果是( 　)。

A) 2,1 　　　B) 3,2　　　 C) 4,3　　　 D) 2,-1

(43)设有如下定义:

int (*ptr)*();

则以下叙述中正确的是( 　)。

A) ptr是指向一维组数的指针变量

B) ptr是指向int型数据的指针变量

C) ptr是指向函数的指针,该函数返回一个int型数据

D) ptr是一个函数名,该函数的返回值是指向int型数据的指针

(44)有以下程序

#include <stdio.h

struct stu

{ int num;

char name[10];

int age;

};

void fun(struct stu *p)

{ printf("%s\n",(*p).name); }

main()

{

struct stu students[3]={ {9801,"Zhang",20},

{9802,"Wang",19},

{9803,"Zhao",18} };

fun(students+2);

}

输出结果是( 　)。

A) Zhang 　　B)Zhao　　　 C) Wang　　　 D) 18

(45)设有以下说明和定义:

typedef union

{ long i; int k[5]; char c; }DATE;

struct date

{ int cat; DATE cow; double dog; } too;

DATE max;

则下列语句的执行结果是( 　)。

printf ("%d",sizeof (struct date ) +sizeof(max));

A) 26　　　 B) 30　　　 C) 18 　　D) 8

(46)有以下程序

main()

{ char a[]="programming", b[]="language";

char *p1,*p2;

int i;

p1=a; p2=b;

for(i=0;i<7;i++)

if(*(p1+i)==*(p2+i)) printf("％c",*(p1+i));

}

输出结果是( 　)。

A) gm 　　　B) rg　　　 C) or　　　 D) ga

(47)有以下程序

viod fun (int a,int b,int c)

{ a=456; b=567; c=678;}

main()

{ int x=10, y=20,z=30;

fun (x,y,z);

printf("%d,/%d\n",c,d);

}

输出结果是( 　)。

A)30,20,10 　　　　 B)10,20,30

C)456,567,678 　　　D)678,567,456

(48)有以下程序

int fun(int x,int y,int *cp,int *dp)

{ *cp=x+y; *dp=x-y; }

main()

{ int a, b, c, d;

a=30; b=50;

fun(a,b,&c,&d);

printf("%d,%d\n", c, d);

}

输出结果是( 　)。

A)50,30　　　 B)30,J50　　　 C)80,-20 　　D)80,20

(49)有以下程序

main()

{ int i, j;

for(j=10;j<11;j++)

{ for(i=9;i<j; i++)

if (!(j%i))break;

if(i=j-1)printf("%d",j);

}

}

输出结果是( 　)。

A) 11 　　　B) 10　　　 C) 9　　 D) 10 11

(50)有以下程序

＃include "atdio.h"

int abc(int u,intv);

main ()

{ int a=24,b=16,c;

c=abc(a,b);

printf('%d\n",c);

}

int abc(int u,int v)

{ int w;

while(v)

{ w=u%v; u=v; v=w }

return u;

}

输出结果是( 　)。

A) 6 　　　B) 7 　　　C) 8　　　 D) 9

二、填空题(每空2分，共40分）
   请将每空的正确答案写在答题卡(1)-(20)序号的横线上,答在试卷上不得分.

(1)自动批自理文件名为_______.(1)

(2)DOS命令分为内部命令与外部命令,COMP命令属于_______(2)命令.

(3)设当前为C盘,现要用一条DOS命令在打印机上输出A盘当前目录下所有扩展名为.DAT的文件内容.这一条DOS命令应为___(3).

(4)要将当前盘当前目录下的子目录XYZ中所有扩展名为.BAK 的文件名改成扩展名为.FOR,应使用的DOS命令为___(4).

(5)设DOS外部命令文件所在的路径均已用PATH命令打通.现要将当前盘当前目录下的文件WST.TXT设置为只读属性,应使用的DOS命令为___(5).

(6)设x和y均为int型变量,且x=1,y=2,则以下表达式的值为___(6).

(7)设i,j,k均为int型变量,则执行完下面的for循环后,k的值为___(7).

for(i=0,j=10;i<=j;i++,j--) k=i+j;

(8)设有以下定义的语句:

int a[3][2]={10,20,30,40,50,60}, (*p)[2];

p=a;

则 *(*(p+2)+1)值为___(8).

(9)以下程序的输出结果是___(9).

#include <stdio.h

int fun(int x,int y)

{ static int m=0,i=2;

i+=m+1;

m=i+x+y;

return m

}

main()

{ int j=4,m=1,k;

k=fun(j,m); printf("%d,",k);

k=fun(j,m); printf("%d\n",k);

}

(10)函数fun的功能是:使一个字符串按逆序存放,请填空

void fun (char str[])

{ char m; int i,j;

for(i=0,j=strlen(str);i<____(10);i++,j--)

{ m=str[i];

str[i]=___(11);

str[j-1]=m;

}

printf("%s\n",str);

}

(11)以下程序的功能是:从键盘上输入一行字符,存入一个字符数组中,然后输出该

字符串,请填空.

#include"ctype.h"

#include"stdio.h"

main()

{ char str[81],*sptr;

int i;

for(i=0;i<80;i++)

{ str[i]=getchar();

if(str[i]=='\n') break;

}

str[i]=____(12);

sptr=str;

while(*sptr) putchar(*sptr____(13));

}

(12)以下程序用来对从键盘上输入的两个字符串进行比较,然后输出两个字符串中第一个不相同字符的ASCII码之差.例如:输入的两个字符串分别为abcdef和abceef,则输出为-1.请填空.

#include

main()

{ char str[100],str2[100],c;

int i,s;

printf("\n input string 1:\n"); gest(str1);

printf("\n input string 2:\n"); gest(str2);

i=0;

while((strl[i]==str2[i]&&(str1[i]!=____(14)))

i++;

s=____(15);

printf("%d\n",s);

}

(13)以下程序的功能是:从键盘上输入一个字符串, 把该字符串中的小写字母转换为大写字母,输出到文件test.txt中,然后从该文件读出字符串并显示出来.请填空.

#include<stdio.h

main()

{ FILE *fp;

char str[100]; int i=0;

if((fp=fopen("text.txt",____(16)))==NULL)

{ printf("can't open this file.\n");exit(0);}

printf("input astring:\n"); gest(str);

while (str[i])

{ if(str[i]='a'&&str[i]<='z')

str[i]=____(17);

fputc(str[i],fp);

i++;

}

fclose(fp);

fp=fopen("test.txt",____(18));

fgets(str,100,fp);

printf("%s\n",str);

fclose(fp);

}

(14) 以下程序可以把从键盘上输入的十进制数(long型)以二到十六进制形式输出,请填空.

#include.<stdio.h

main()

{ char b[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C'

,'D','E','F'};

int c[64],d,i=0,base;

long n;

printf("enter a number:\n"); scanf("%ld",&n);

printf("enter new base:\n"); scanf("%d",&base);

do

{ c[i]=____(19);

i++; n=n/base;

} while(n!=0);

printf("transmite new base:\n");

for(--i;i=0;--i)

{ d=c[i];

printf("%c",b____(20);

}

}


98年9月二级C语言笔试试题答案

1998年9月二级C语言笔试试题答案

一、选择题((1)~(40)题每题1分;(41)~(50)题每题2分)

(1)B (2)B (3)D (4)D (5)B

(6)A (7)B (8)C (9)D (10)A

(11)D (12)C (13)A (14)B (15)D

(16)C (17)B (18)A (19)A (20)A

(21)C (22)D (23)A (24)D (25)B

(26)C (27)C (28)B (29)C (30)C

(31)D (32)D (33)B (34)C (35)B

(36)D (37)B (38)A (39)D (40)D

(41)A (42)A (43)C (44)B (45)B

(46)D (47)A (48)C (49)B (50)C

二、填空题(每空2分,共4分)

(1)至(5)题中所有字母都允许大,小写或大小写混合

(1)1 AUTOEXEC.BAT

(2) 2 外部(答 外部命令不扣分)

(3) 3 COPY A:*.DAT PRN

(在 COPY 后面与A:*.DAT后面都至少要有一个空格)

(4) 4 RENXYZ\*.BAK *.FOR 或RENAME XYZ\*.BAK*.FOR

(在REN 或RENAME 后面与XYZ\*.BAK 后面都至少要有一个空格)

(5) 5 ATTRIB+R WST.TXT

(在ATTRIB 后面与+R后面都至少有一个空格)或ATTRIB WST.TXT+R(在ATTRIB

后面与WST.TXT后面都至少要有一个空格)

(6) 6 1.0或1

(7) 7 10

(8) 8 60

(9) 9 8,17

(10) 10 strlen(str )/2或strlen(str)/2.0或0.5*strlen(str)或j或j-1

11 str[j-1]或*(str+j-1)

(11) 12 '\0' 或0

     13 ++

(12) 14 '\0'或0

15 strl[i]-str2[i]

(13) 16 "w"或"w+"或"wt"或"w+t"或"""wt+"

17 str[i]-32 或str[i]-('a'-'A'或str[i]-'a'+'A'

18 "r"或"r+"或"r+t"或"rt+"

(14) 19 n%base

20 [d]


99年4月二级C语言笔试试题

1999年4月二级C语言笔试试题

一、选择题:((1)~(40)题 每题1分,(41)~(50)题每题2分,共60分)

    下列各题 A,B, C,D,四个选题中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上,答在试卷上不得分.

(1)微型计算机的性能主要取决于( 　)。

A 内存　　 B 中央处理器 　　C 硬盘 　　D 显示卡

(2)有一个数值152,它与十六进制数6A相等,那么该数值是( 　)。

A 二进制数　　 B 八进制数 　　C 十进制数 　　D 四进制数

(3)使用超大规模集成电路制造的计算机应该归属于( 　)。

A第一代　　 B第二代 　　C第三代　　 D第四代

(4)已知英文字母a的ASSLL代码值是十六进制数61H,那么字母d的ASCLL代码值是( 　)。

A 34H 　　B 54H 　　C 24H 　　D 64H

(5)一片存储容量是1.44MB的软磁盘,可以存储大约140万个( 　)。

A ASCLL字符　　B 中文字符　　 C磁盘中件　　 D 子目录

(6)在MS-DOS 环境中同时按下[ctrl]和[Break]两个键,其作用是( 　)。

A终止当前操作　　 B 暂停当前操作 　　C 关机 　　D 热启动

(7)将二进制数10000001转换为十制数应该是( 　)。

A 127 　　B 129 　　C 126 　　D 128

(8)磁盘处理写保护状态,那么磁盘中的数据( 　)。

A 不能读出,不能删改,也不能定入新数据

B 可以读出,不能删改,也不能写入新数据

C 可以读出,可以删改,但不能写入新数据

D 可以读出,不能删改,但可以写入新数据

(9)微型机启动后,DOS提示符是C:\>,现提示符变为C:\USER>,则说明刚执行过命令( 　)。

A PROMPT　　　　B PROMPT USER

C PROMPT 　　　 D CD USER

(10)MS-dos 文件系统目录的组织形式属于( 　)。

A关系型结构 　　B 网络型结构　　 C 树型结构 　　D 直线型结构

(11)应用软件系统TH的总容量大约1MB,其主要程序文件存放在C:\TH目录中,而数据文件存放在C:\TH\DATA目录中.如果将它们完整地复制到A盘,应该使用的命令是( 　)。

A XCOPY C:\TH A:\/M D XCPY C:\TH A:\/P

(12)执行COPY A.TXT+B.TXT这人DOS命令后,得到的磁盘文件是( 　)。

A A .TXT 　　B B.TXT 　　C AB.TXT　　 D A+B .TXT

(13)在WINDOWS中,将一个应用程序窗口嘬小化之后,该应用程序( 　)。

A仍在后台运行 　　B暂时停止运行　　 C 完全停止之后　　 D 出错

(14)CD-ROM属于( 　)。

A 感觉媒体　　 B表示媒体　　 C 表现媒体　　 D 存储媒体

(15)在因特网(internet)中,电子公告板的缩写是( 　)。

A ftp 　　B WWW 　　C BBS　　 D E-mail

(16)设x.y.z和k都是int型变量,则执行表达式:x=(y=4,z=16,k=32)后,x的值为( 　)。

A 4 　　　B 16　　　 C 32　　 D 52

(17)设有如下的变量定义:

int i =8,k ,a,b ;

unsigned long w=5;

double x=1,42,y=5.2;

则以下符合C语言语法的表达式是( 　)。

A a+=a-=(b=4)*(a=3) 　　B x%(-3);

C a=a*3=2　　　　　　　 D y=float(i)

(18)假定有以下变量定义:

int k=7 ,x=12;

则能使值为3的表达式是( 　)。

A x%=(K%=5)　　 B x%=(k-k%5)

C x%=k-k%5 　　 D (x%=k)-(k%=5)

(19)以下叙述中正确的是( 　)。

A 输入项可以是一个实型常量,如: scanf("%f",3.5);

B 只有格式控制,没有输入项,也能正确输入数据到内存,例如: scanf("a=%d ,b=%d")'

C 当输入一个实型数据时,格式控制部分可以规定小数点后的位数,例如:

    scanf("%4.2f",&d);

D 当输入数据时,必须指明变量地址,例如: scanf("%f",&f);

(20)设x和y均为int 型变量,则以下语句:x+y=y;y=x-y;y=x-y;x-=y;的功能是( 　)。

A把x 和y按从大到小排列

B把x和y按从小到大排列

C无确定结果

D交换x和y中的值

(21)以下程序的输出结果是( 　)。

A 10 10　　　 B 12 12　　　 C11 10　　　D11 13

main( )

{ int a=12,b=12;

printf("%d%d\n",--a,++b);

}

(22)以下程序运行后,输出结果是 ( 　)。

A cde　　　　　　　 B字符c的ASCLL码值

C 字符C的地址 　　　D 出错

main( )

{ char *s="abcde";

s+=2;

print("%ld \n",s);

}

(23) 以下程序输出结果是( 　)。

A 7 　　B 6　　 C5　　 D4

main ( )

{ int m=5;

if (m++>5 print ("%d\n",m);

else printf ("%d\n",m--);

}

(24)当a=1,b=3 ,c=5,d=4时,执行下面一段程序后,X的值为( 　)。

A 1 　　B 2　　 C 3 　　D 6

if (a,则输出为

A ABCdef B abcDEF Cabc DDEF

# include

main ()

{ char ch ;

while ((ch=getchar())!="\n")

{if (ch >='a'&& ch <='z')ch =ch -32;

printf("%c",ch )'

}

printf("\n");

}

(26)下面能正确进行字符串赋值操作的语句是( 　)。

A char s[5]={"ABCDE"};　　 B char s[5] ={'a','b' ,'c','d',''e'};

C char *s;s="ABCDEF"'　　　 D char *s; scasnf("%s",s);

(27)当执行以下程序段时( 　)。

A 循环体将执行一次

B 循环体将执行两次

C 循环体将执行无限次

D 系统将提示有语法错误

X =-1 ;

do {y--;} while(--y);

pringt("%d\n",y--);

}

(29)在下列选项中,没有构成死循环的程序估是( 　)。

A　 int i =100;

    whine(1)

      { i=i%100+1;

        if (I>100)break;

        }

B　 for (;;);

C 　int k=1000;

    do {++k;} while(k>=1000);

D int s=36;

while (s);--s;

(30)执行语句: for (i=1;i++<4;);后,变量i的值是

A 3　　 B 4　　 C 5 　　D不定

(31)以下程序运行后,如果从键盘上输入ABCDE<回车>,则输出结果为( 　)。

A 8　　 B7　　 C6　　 D5

#include

#include

fuch (char str [ ]

{ int num =0;

while (*(str +num )!='\0')num ++;

return(num );

}

main()

{ char str [10],*p=str ;

gets(p); printf("%d\n",func(p));

}

(32)运行以下程序后,如果从键盘上输入china#<回车>,则输出结果为( 　)。

A 2,0　　B5,0 　　C 5,5 　　D2,5

#include

main( )

{ int v1=0,v2=0;

char ch ;

while ((ch=getchar())!='#')

switch (ch )

{ case 'a':

case 'h':

default: v1++;

case '0':v2++;

}

printf("%d,%d\n",v1,v2);

(33)若以下程序所生成的可执行文件名为filel.exe ; 当打入以下命令行执行该程序时; FILE1 CHINA BEIJING SHANGHA1

程序 的输出结果是( 　)。

A XHIN VWIJINF AHANJHAI B FILE1 CHINA BEIJING

C C B S D F C B

main(int arge,char * argv [])

{ char ch [7]={"65ab21"};

int i,s=0;

for (i=0;ch [i]>='0'&&ch [i]'9';i+=2)

s=10*s+ch[i]-'0';

print ("%d\n",s)'

}

(35)运行下面的程序,如果从键盘上输入:

ab <回车>

c <回车>

def <回车>

则输出结果为( 　)。

A a　　 Ba 　　Cab 　　Dabcdef

  b 　　b　　　 c

  c 　c

  d 　d

  e

  f

#include

#define N 6

main ()

{ char c[N];

int i=0;

int i=0;

for ( ;i

ss (char *s)

{ char *p=s;

while (*.p)p++;

return(p-s);

}

main()

{ char *a="abded";

int i;

i=ss(a);

print ("%d\n",i);

}

(37)以下程序运行后,输出结果是 ( 　)。

A 8,15　　 B 8,16　　 C 8,17 　　D 8,8

func (int m=0 ,i=2;

i+=m+1;

m=i+a+b ;

return(m);

}

main()

{ int k=4,m=1,p;

p=func (k,m);printf("%d,",p);

P=func (k,m);printf("%d\n",p);

}

(38)以下程序运行后,输出结果是( 　)。

A 49.5　　 B 9.5　　 C　22.0 　　D　45.0

#include

#define PT 5.5

#difine s(x) pt*x*x

main()

{ int a=1,b=2;

print ("%4.lf/n",S(a+b));

}

(39)以下程序运行后,输出结果是 ( 　)。

A ABCDEFG　　 B CDG　　 C　abcdefgh　　 D abCDefGh

main()

{ siatic char a[]="ABCDEFGH",b[]="abCDefFh";

char *p1,p2;

int k;

p1=a; p2=b;

for(k=0;k<=7;k++)

if (*(p1+k)==*(p2+k))

printf("%",*(p1+k));

printf("\n")';

}

(40)以下程序执行后a的值是( 　)。

A)4 　　B)1 　　C)0　　 D)运行时出错,a无定值

main()

{ int a,k=4,m=6,*p1=&k,*p2=&m;

a=p1==&m;

printf("%d\n",a);

}

(41)以下程序运行后,输出结果是( 　)。

A)84 　　B)99　　 C)95　　 D)44

int d=1l

fun (int p)

{ int d=5;

d+=p++;

printf("%d",d);

}

main()

{ itn a=3;

fun(a);

d+=a++;

printf("%d\n",d);

}

(42)以下程序运行后,输出结果是( 　)。

A)6385 　　B)22 　　C)33 　　D)693825

main()

{ char ch[2][5]={"693","825"},*p[2];

int i,j,s=0;

for (i=0;i<2;i++) p[i]=ch[i];

for (i=0;i<2;i++)

for (j=0;p[i][j]>='0' && p[i][j]<='9';j+=2)

s=10*s+p[i][j]-'0';

printf("%d\n",s);

}

(43)以下程序运行后,输出结果是( 　)。

A) 1 　　B) 7　　　 C)9　　　 D)11

fut (int **s,int p[2][3])

{ **s=p[1][1];)

main()

{ int a[2][3]={1,3,5,7,9,11},*p;

p=(int *)malloc(sizeof(int))l

fut (&p,a);

printf("%d\n",*p);

}

(44)设有如下定义:

int a=1,b=2,c=3,d=4,m=2,n=2;

则执行表达式:(m=a>b)&&(n=c>d)后,n的值为( 　)。

A) 1 　　B)2　　 C)3　　 D)0

(45)在执行以下程序时,为了使输出结果为:t=4,则给a和b输入的值应满足的条件是( 　)。

A)a>b 　　B)aa>b

main ()

{ int s,t,a,b;

scanf("%d,%d",&a,&b);

s=1, t=1

if(a>0)s=s+1;

if(a>b)t=s+1;

else if (a==b) t=5;

else t=2*s;

printf("%d\n",t);

}

(46)以下程序的输出结果是( 　)。

A)x=4　　 B)x=8 　　C)x=6　　 D)x=12

main()

{ int i,jx=0;

for (i=0;i<2;i++)

{ x++;

for(j=0;j<3;j++)

{ if (j%2) continue;

x++;

}

x++;

}

printf("=%d\n",x);

}

(47)以下程序运行后,输出结果是( 　)。

A)1234567 　　B)7654321　　 C)1711717　　 D)7177171

#include

#include

fun (char *w ,int n)

{ char t,*s1,*s2;

s1=w; s2=w+n-1;

while(s1,则输出结果为( 　)。

A)m=3 　　B)m=2 　　C)m=1 　　D)m=0

main ()

{ int m,n;

printf("Enter m,n:"); scanf("%d%d",&m,&m);

while(m!=n)

{ while(m>n)m-=n;

while(n

book<空格><回车>

则输出结果是

A)*8 　　B)#9　　 C)#6 　　D)*9

#include

main ()

{ char a1[80],*s1=a1,*s2=a2;

gets(s1); gets(s2);

if(! strcmp(s1,s2) printf("*");

else printf("#");

printf("%d\n",strlen(strcat(s1,s2)));

}

(50)以下程序运行后,输出结果是( 　)。

A)1000 　　B)10010　　 C)00110 　　D)10100

main ()

{ int y=18,i=0,j,a[8];

do

{ a[i]=y%2;i++;

y=y/2;

} while(y>=1);

for(j=i-1>0;j--)printf(%d",a[j]);

printf("h\n");

}

二.填空题:(每空2分,共40分)

请将每空的正确答案写在答题卡1至20序号的横线上,答在试卷上不得分.

(1)DOS中的自动批自理文件的全名是 1

(2)在DOS启动盘中,除COMMAND>COM外,还有两个必备的系统文件,它们是MSDOS.SYS(或IBMDOS.COM)与 2

(3)在DOS下,要将当前目录中AB.TXT文件设置为只读属性,盲人和的完整命令行是3

(4)DOS下,要查看当前目录中所有批自理文件的总字九,应该使用的完整命令得是 4

.

(5)计算机病毒除有破坏性/潜伏性和激发性外,还有一个最明显的特性外,还有一个最明显的特性是 5

(6)若想通过以下输入语句a使中存放字符串1234,b中存放字符5,则输入数据的形式应该是 6

char a [10],b;

scanf("a=%sb=%c",a,&b);

(7)下面程序的输出结果是 7

───.

char b []="ABCD";

main()

{ char *chp ;

for (chp =b;*chp ;chp +=2) printf("%s",chp);

printf("\n");

}

(8)下面程序的输出结果是 8

───.

#define MAX 3

int a[MAX];

main ( )

{ funl( ); fun2(a); printf("\n");}

funl( )

{ int k,t=0;

for (k=0;k

FILE *fp;

main()

{int i,j;

if ((fp=fopen(19)==NULL)exit(0));

for (i=0;i<10;i++)

{scanf("%d",&j);

fwite(&j,sizeof(int ),1, 20 );

}

fclose(fp);

}


99年4月二级C语言笔试试题答案

1999年4月二级C语言笔试试题答案

一.选择题((1)~(40)题每题1分,(41)~(50)题 每题 2分,共60分)

(1)B (2)B (3)D (4)D (5)A

(6)A (7)B (8)B (9)D (10)C

(11)B (12)A (13)A (14)D (15)C

(16)C (17)A (18)D (19)D (20)D

(21)D (22)C (23)B (24)B (25)B

(26)C (27)A (28)D (29)C (30)C

(31)D (32)C (33)A (34)C (35)C

(36)D (37)C (38)B (39)B (40)C

(41)A (42)A (43)C (44)B (45)C

(46)B (47)C (48)C (49)B (50)B

二.填空题(每空2 分,共40分)

(1) 1 AUTOEXEC.BAT (2)2 IO.SYS 或IBMBIO.COM

(3) 3 ATTRIB AB.TXT+R AB .TXT

(4) 4 DIR *.BAT或DIR *.BAT\P或DIR *.BAT/W 或DIR*.BAT/W/P或*.BAT/P/W

(5) 5 传染性或传播性

(6) 6 a=1234 b=5 A或a=1234b=5

(7) 7 ABCDCD (8) 8 024

(9) 9 49 (10) 10 AB


99年9月二级C语言笔试试题

1999年9月二级C语言笔试试题

一、选择题((1)-(40)每个选项1分，(41)-(50)每个选项2分，共60分)
    下列各题A)、B)、C)、D)四个选项中，只有一个选项是正确的，请将正确选项涂写在答题卡相应的位置上，答在试卷上不得分。
(1)十进制数1385转换成十六进制数为( 　)。
A)568 　　　B)569 　　C)D85　　 D)D55

(2)下列叙述中正确的是( 　)。
A)计算机病毒只能传染给可执行文件
B)计算机软件是指存储在软盘中的程序
C)计算机每次启动的过程之所以相同，是因为RAM中的所有信息在关机后不会丢失
D)硬盘虽然装在主机箱内，但它属于外存

(3)一个字长的二进制位数是( 　)。
A)8 　　　　 　B)16
C)32 　　　　　D)随计算机系统而不同的

(4)CPU主要由运算器与控制器组成，下列说法中正确的是( 　)。
A)运算器主要负责分析指令，并根据指令要求作相应的运算
B)控制器主要完成对数据的运算，包括算术运算和逻辑运算
C)控制器主要负责分析指令，并根据指令要求作相应的运算
D)控制器直接控制计算机系统的输入与输出操作

(5)下列叙述中正确的是( 　)。
A)将数字信号变换成便于在模拟通信线路中传输的信号称为调制
B)以原封不动的形式将来自终端的信息送入通信线路称为调制解调
C)在计算机网络中，一种传输介质不能传送多路信号
D)在计算机局域网中，只能共享软件资源，而不能共享硬件资源

(6)各种网络传输介质( 　)。
A)具有相同的传输速率和相同的传输距离
B)具有不同的传输速率和不同的传输距离
C)具有相同的传输速率和不同的传输距离
D)具有不同的传输速率和相同的传输距离

(7)多媒体计算机系统的两大组成部分是( 　)。
A)多媒体功能卡和多媒体主机
B)多媒体通信软件和多媒体开发工具
C)多媒体输入设备和多媒体输出设备
D)多媒体计算机硬件系统和多媒体计算机软件系统

(8)按通信距离划分，计算机网络可以分为局域网和广域网。下列网络中属于局域网的是( 　)。
A)Internet 　　　B)CERNET 　　　C)Novell　　 D)CHINANET

(9)在Windows中，启动应用程序的正确方法是( 　)。
A)用鼠标双击该应用程序图标　　 B)将该应用程序窗口最小化成图标
C)将该应用程序窗口还原 　　　　D)将鼠标指向该应用程序图标

(10)在Windows中，终止应用程序执行的正确方法是( 　)。
A)用鼠标双击应用程序窗口左上角的控制菜单框
B)将应用程序窗口最小化成图标
C)用鼠标双击应用程序窗口右上角的还原按钮
D)用鼠标双击应用程序窗口中的标题栏

(11)DOS控制键Ctrl+Alt+Del的功能为( 　)。
A)删除一个字符并退格 　　　B)暂停标准输出设备的输出
C)热启动 　　　　　　　　　D)终止当前操作

(12)设当前盘为C盘，为了将A盘当前目录中所有扩展名为.PAS 的文件改成扩展名为.P，应使用的DOS命令为( 　)。
A)REN A:*.PAS A:*.P 　　　 B)REN A:*.PAS *.P
Ｃ)REN A:.PAS A:.P 　　　　D)REN A:.PAS .P
(13)设当前盘为C盘，其根目录下有两个子目录D1与D2，且当前目录为D1，若要进入子目录D2，正确的DOS命令为( 　)。
A)CD D2 　　　B)CD D2\ 　　C)CD \D2　　 D)CD D1\D2

(14)设当前盘为A盘，要将B盘当前目录下的两个文件A.TXT与X.TXT 连接后以文件名Y.TXT存放到A盘的当前目录中，正确的DOS命令为( 　)。
A)COPY A.TXT+X.TXT A:Y.TXT 　　 　B)COPY B:A.TXT+X.TXT A:Y.TXT
C )COPY B:A.TXT+B:X.TXT>Y.TXT 　　D)COPY B:A.TXT+B:X.TXT Y.TXT

(15)下列DOS命令中正确的是( 　)。
A)REN \USER\A.TXT \B.TXT　　　 B)CD \
C)TYPE *.TXT 　　　　　　　　　D)MD \

(16)以下选项中属于C语言的数据类型是( 　)。
A)复数型 　　B)逻辑型　　 C)双精度型 　　D)集合型

(17)在C语言中，不正确的int类型的常数是( 　)。
A)32768 　　B)0 　　C)037 　　D)0xAF

(18)语句:printf("%d"，(a=2)&&(b= -2)；的输出结果是( 　)。
A)无输出　　 B)结果不确定 　　C)-1　　 D)1

(19)下列描述中不正确的是( 　)。
A)字符型数组中可以存放字符串
B)可以对字符型数组进行整体输入、输出
C)可以对整型数组进行整体输入、输出
D)不能在赋值语句中通过赋值运算符"="对字符型数组进行整体赋值

(20)设有如下定义：int x=l，y=-1；，则语句：printf("%d\n"，(x--&++y))；的输出结果是( 　)。
A)1 　　B)0 　　C)-1 　　D)2

(21)当c的值不为0时，在下列选项中能正确将c的值赋给变量a、b的是( 　)。
A)c=b=a； B)(a=c)‖(b=c)；
C)(a=c)&&(b=c)； C)a=c=b；

(22)以下程序的输出结果是( 　)。
A)10 1 9 2　　 B)9 8 7 6　　 C)10 9 9 0 　　D)10 10 9 1
main( )
{ int x=10，y=10，I；
for(i=0；x>8；y=++i)
printf("%d，%d "，x--，y)；
}

(23)以下程序的输出结果是( 　)。
A)5 2　　 B)5 1　　 C)5 3 　　D)9 7
main( )
{ int i，x[3][3]={9，8，7，6，5，4，3，2，1}，*p=&x[1][1]；
for(i=0；i<4；i+=2)printf("%d "，p[i])；
}

(24)以下程序的输出结果是( 　)。
A)6 　　B)6789　　　 C)'6' 　　D)789
main( )
{ char a[10]={'1'，'2'，'3'，'4'，'5'，'6'，'7'，'8'，'9'，0}，*p；
int i；
i=8；
p=a+I；
printf("%s\n"，p-3)；
}

(25)以下程序的运行结果是( 　)。
A)运行后报错　　 B)6 6 　　C)6 12　　 D)5 5
#include "stdio.h"
main( )
{
int a[ ]={1，2，3，4，5，6，7，8，9，10，11，12，}；
int *p=a+5， *q=NULL；
* q=*(p+5)；
printf("%d %d \n"，*p，*q)；
}

(26)以下说法中正确的是( 　)。
A)#define和printf都是C语句 　　　　　B)#define是C语句，而printf不是
C)printf是C语句，但#define不是 　　　D)#define和printf都不是C语句

(27)语句:printf("%d \n"，12 &012)；的输出结果是( 　)。
A)12 　　B)8　　 C)6 　　D)012

(28)能正确表示a和b同时为正或同时为负的逻辑表达式是( 　)。
A)(a>=0‖b>=0)&&(a<0‖b<0)
B)(a>=0&&b>=0)&&(a<0&&b<0)
C)(a+b>0)&&(a+b<=0)
D)a*b>0

(29)以下程序的输出结果是( 　)。
A)2 0　　 B)3 1　　 C)3 2 1　　 D)2 1 0
main( )
{ int n=4；
while(n--)printf("%d "，--n)；
}

(30)若已定义：int a[9]，*p=a；并在以后的语句中未改变p的值，不能表示a[1] 地址的表达式是( 　)。
A)p+1 B)a+1 C)a++ D)++p

(31)以下程序的输出结果是( 　)。
A)17，021，0x11 　　　B)17，17，17
Ｃ)17，0x11，021 　　　D)17，21，11
main( )
{ int k=17；
printf("%d，%o，%x \n"，k，k，k)；
}

(32)以下程序的输出结果是( 　)。
A)-1 1 　　B)0 1 　　C)1 0 　　D)0 0
main( )
{ int a= -1，b=1，k；
if((++a<0)&& ! (b-- <=0))
printf("%d %d\n"，a，b)；
else
printf("%d %d\n"，b，a)；
}

(33)若有说明：long *p，a；则不能通过scanf语句正确给输入项读入数据的程序段是( 　)。
A)*p=&a； scanf("%ld"，p)；
B)p=(long *)malloc(8)； scanf("%ld"，p)；
C)scanf("%ld"，p=&a)；
D)scanf("%ld"，&a)；

(34)以下选项中，能定义s为合法的结构体变量的是( 　)。
A)typedef struct abc 　　　B)struct
{ double a； 　　　　　　　{ double a；
  char b[10]；　　　　　　　　 char b[10]；
  } s；　　　　　　　　　　　 } s；
C)struct ABC 　　　　　　　D)typedef ABC
{ double a； 　　　　　　　{ double a；
  char b[10]； 　　　　　　　　char b[10]；
} 　　　　　　　　　　　　　　　}
  ABC s；　　　　　　　　　　 ABC s；

(35)若有以下的说明和语句，则在执行for语句后，*(*(pt+l)+2)表示的数组元素是( 　)。
A)t[2][0] 　　　B)t[2][2] 　　C)t[l][2]　　 D)t[2][l]
int t[3][3]， *pt([3]， k；
for (k=0；k<3；k++) pt[k]=&t[k][0]；

(36)下面程序把数组元素中的最大值放入a[0]中。则在if 语句中的条件表达式应该是( 　)。
A)p>a 　　B)*p>a[0]　　　 C)*p>*a[0] 　　D)*p[0]> *a[0]
main( )
{ int a[10]={6，7，2，9，1，10，5，8，4，3}，*p=a，I；
for(i=o；i<10；i++，p++)
if(________) *a=*p；
printf("%d"，*a)；
}

(37)以下程序的输出结果是( 　)。
A)ihgfedcba　　 B)abcdefghi 　　C)abcdedeba 　　D)ihgfefghi
#include
main( )
{ char *a="abcdefghi"； int k；
fun(a)； puts(a)；
}
fun(char *s)
{ int x，y； char c；
for(x=0，y=strlen(s)-1；x0) fun(k-1)；
printf("%d"，k)；
}

(42)以下程序的输出结果是( 　)。
A)6 9 9 　　B)6 6 9 　　C)6 15 15　　 D)6 6 15
int d=1；
fun(int p)
{ static int d=5；
d+=p；
printf("%d "，d)；
return(d)；
}
main( )
{ int a=3； printf("%d \n"，fun(a+fun(d)))； }

(43)以下程序的输出结果是( 　)。
A)123456780 　　B)123 456 780　　 C)12345678　　 D)147
main( )
{ char ch[3][4]={"123"，"456"，"78"}， *p[3]； int i；
for(i=0；i<3；i++) p[i]=ch[i]；
for(i=0；i<3；i++) printf("%s"，p[i])；
}

(44)以下程序的输出结果是( 　)。
A)1 　　B)4　　 C)7　　 D)5
#include
int a[3][3]={1，2，3，4，5，6，7，8，9，}，*p；
main( )
{ p=(int*)malloc(sizeof(int))；
f(p，a)；
printf("%d \n"，*p)；
}
f(int *s， int p[][3])
{ *s=p[1][1]； }

(45)以下程序的输出结果是( 　)。
A)9 　　　B)6　　 C)36 　　D)18
#define f(x) x*x
main( )
{ int a=6，b=2，c；
c=f(a) / f(b)；
printf("%d \n"，c)；
}

(46)以下程序的输出结果是( 　)。
A)4 2 1 1　　 B)0 0 0 8 　　C)4 6 7 8　　 D)8 8 8 8
main( )
{ char *s="12134211"； int v[4]={0，0，0，0}，k，i；
for(k=0；s[k]；k++)
{ switch(s[k])
{ case '1'：i=0；
case '2'：i=1；
case '3'：i=2；
case '4'：i=3；
}
v[i]++；
}
for(k=0；k<4；k++) printf("%d "，v[k])；
}

(47)以下程序的输出结果是( 　)。
A)AfghdEFG　　　 B)Abfhd 　　C)Afghd　　 D)Afgd
#include
main( )
{ char *p1，*p2，str[50]="ABCDEFG"；
p1="abcd"； p2="efgh"；
strcpy(str+1，p2+1)； strcpy(str+3，p1+3)；
printf("%s"，str)；
}

(48)以下程序的输出结果是( 　)。
A)#*#*# 　　B)##### 　　C)***** 　　D)*#*#*
main( )
{ int i；
for(i=1；i<6；i++)
{ if(i%2){printf("#")；continue；}
printf("*")；
}
printf("\n")；
}

(49)若有以下定义和语句：
double r=99， *p=&r；
*p=r；
则以下正确的叙述是( 　)。
A)以下两处的*p含义相同，都说明给指针变量p赋值
B)在"double r=99， *p=&r；"中，把r的地址赋值给了p所指的存储单元
C)语句"*p=r；"把变量r的值赋给指针变量p
D)语句"*p=r；"取变量r的值放回r中

(50)以下程序的输出结果是( 　)。
A)编译不通过，无输出　　　 B)aceg
C)acegi　　　　　　　　　 D)abcdefghi
main( )
{ int i；
for(i='A'；i<'I'；i++，i++) printf("%c"，i+32)；
printf(" \n")；
}

二、填空题(每空2分，共40分)
   请将每空的正确答案写在答题卡____1_____至___20_____序号的横线上， 答在试卷上不得分。

(1)DOS命令分为内部命令与外部命令，PATH命令是____1____命令。

(2)设当前盘为A盘，当前目录为\X\Y，A盘上的一个文件QR.C 在当前目录下的子目录W中。现已将A盘的当前目录改为\D\XY，当前盘改为C盘，如果需指定A盘上的该文件应写成____2____。

(3)为了得到XCOPY命令的在线帮助，可使用的DOS命令文件一为____3____。

(4)在DOS系统下，代表键盘与显示器的设备文件名为____4____。

(5)在DOS系统下，可以直接执行的文件的扩展名除.FXE外，还有两个是____5____。

(6)若想通过以下输入语句使a=5.0，b=4，c=3，则输入数据的形式应该是____6____。
.
.
.
int b，c； float a；
scanf("%f，%d，c=%d"，&a，&b，&c)；
.
.
.
(7)下列程序的输出结果是_____7____。
#include
main( )
{ char b[30]，*chp；
strcpy(&b[0]，"CH")；
strcpy(&b[1]，"DEF")；
strcpy(&b[2]，"ABC")；
printf("%s \n"，b)；
}
(8)下列程序的输出结果是____8____。
int t(int x，int y，int cp，int dp)
{ cp=x*x+y*y；
dp=x*x-y*y；
}
main( )
{ int a=4，b=3，c=5，d=6；
t(a，b，c，d)；
printf("%d %d \n"，c，d)；
}
(9)下列程序中字符串中各单词之间有一个空格，则程序的输出结果是____9____。
#include
main( )
{ char strl[]="How do you do"， *p1=strl；
strcpy(strl+strlen(strl)/2，"es she")；
printf("%s \n"，pl)；
}
(10)以下程序的功能是：从键盘上输入若干个学生的成绩，统计计算出平均成绩，并输出低于平均分的学生成绩，用输入负数结束输入。请填空。
main( )
{ float x[1000]， sum=0.0， ave， a；
int n=0， i；
printf("Enter mark：\n")；scanf("%f"，&a)；
while(a>=0.0&& n<1000)
{ sum+____10____； x[n]=_____11____；
n++； scanf("%f"，&a)；
}
ave=____12____；
printf("Output：\n")；
printf("ave=%f\n"，ave)；
for( i=0；i
main( )
{ FILE *fp；
char ch，fname[32]； int count=0；
printf("Input the filename ：")； scanf("%s"，fname)；
if((fp=fopen(____16____，"w+"))==NULL)
{ printf("Can't open file：%s \n"，fname)； exit(0)；}
printf("Enter data：\n")；
while((ch=getchar())!="#"){ fputc(ch，fp)； count++；}
fprintf(____17____，"\n%d\n"， count)；
fclose(fp)；
}
(13)以下函数creatlist用来建立一个带头节点的单链表，链表的结构如下图所示，新的结点总是插入在链表的末尾。链表的头指针作为函数值返回，链表最后一个节点的next域放入NULL，作为链表结束标志。data为字符型数据域，next为指针域。读入时字符以#表示输入结束(#不存入链表)。请填空。

struct node
{ char data；
struct node * next；
}；
.
.
.
_____18_____ creatlist( )
{ struct node * h，* s，* r； char ch；
h=(struct node *)malloc(sizeof(struct node))；
r=h；
ch=getchar( )；
{ s=(struct node *)malloc(sizeof(struct node))；
s->data=____19____；
r->next=s； r=s；
ch=getchar( )； }
r->next=____20_____；
return h；
}


99年9月二级C语言笔试试题答案

1999年9月二级C语言笔试试题答案

一、选择题((1)--(40)题每题1分，(41)--(50)题每题2分，共60分。
(1)B 　(2)D (3)D (4)D (5)A (6)B (7)D (8)C (9)A (10)A
(11)C (12)B (13)C (14)D (15)B (16)C (17)A (18)D (19)C (20)B
(21)C (22)D (23)C (24)B (25)A (26)D (27)B (28)D (29)A (30)C
(31)D (32)C (33)A (34)B (35)C (36)B (37) (38) (39) (40)
(41) (42)C (43)C (44)D (45)C (46)B (47)D (48)A (49)D (50)B

二、填空题(每空2分，共40分)
(1)内部
(2)A:\X\Y\W\OR.C
(3) XCOPY/?或XCOPY/H
(4) CON
(5) COM和.BAT
(6) 5.0,4,c=3
(7)CDABC
(8) 56
(9) How des she
(10) =a
(11) a
(12)sum/n
(13)x[i](14)
(15)
(16) fname
(17) fp
(18) struct node *
(19) ch
(20) NULL


00年4月二级C语言笔试试题

2000年4月二级C语言笔试试题

一、选择题（(1)--(40)每小题1分, (41)--(50)每小题2分, 共60分）
    下列各题 A) 、B)、C)、D)四个选项中，只有一个选项是正确的，请将正确选项在
答题卡相应位置上涂黑，答在试卷上不得分。

(1) 下列述叙中正确的是（　）。
A) 显示器和打印机都是输出设备 　　　B) 显示器只能显示字符
C) 通常的彩色显示器都有7种颜色 　 　D) 打印机只能打印字符和表格

(2) 微型计算机中运算器的主要功能是进行（　）。
A) 算术运算　　 B) 逻辑运算　　 C) 算术和逻辑运算　　 D) 初等函数运算

(3) COMMAND。COM是DOS系统的最外层模块，通常称之为（　）。
A) 引导程序　　 B) 输入输出系统 　　C) 命令处理系统　　 D) 文件管理系统

(4) 电子邮件是（　）。
A)网络信息检索服务
B)通过Web网页发布的公告信息
C)通过网络实时交互的信息传递方式
D)一种利用网络交换信息的非交互式服务

(5) 和十进制数225相等的二进制数是（　）。
A) 11101110 　　B) 11111110　　 C) 10000000　　 D) 11111111

(6) 下列叙述中正确的是（　）。
A) 指令由操作数和操作码两部分组成
B) 常用参数xxMB表示计算机的速度
C) 计算机的一个字长总是等于两个字节
D) 计算机语言是完成某一任务的指令集

(7) 计算机的内存储器比外存储器（　）。
A) 价格便宜 　　B) 存储容量大 　　C) 读写速度快　　 D) 读写速度慢

(8) 设当前盘为C盘，执行DOS命令"COPY B:\A.TXT PRN"之后，结果是（　）。
A) B盘上的A.TXT文件被复制到C盘的PRN文件
B) 屏幕上显示B盘上的A.TXT文件内容
C) B盘上的A.TXT文件内容在打印机上输出
D) B盘上的A.TXT文件被复制到B盘上的PRN文件

(9) 要将当前盘当前目录下的两个文件X1.TXT和B1.TXT连接起来之后存入B盘当前目录下并且命名为Z.TXT,无论B盘当前目录是什么，完成这件任务可以使用的命令是（　）。
A) COPY A:X1.TXT+C:B1.TXT Z.TXT
B) COPY X1.TXT+C:\WS\B1.TXT B:\Z.TXT
C) COPY A:X1.TXT+C:\WS\B1.TXT
D) COPY X1.TXT+B1.TXT B:Z.TXT

(10) 下列四组DOS命令中，功能等价的一组是（　）。
A) COPY A:*.* B:与DISKCOPY A: B:
B) COPY ABC.TXT+XYZ.TXT 与TYPE XYZ.TXT>>ABC.TXT
C) COPY ABC.TXT+XYZ.TXT与COPY XYZ.TXT+ABC.TXT
D) TYPE *.FOR>CON与COPY *.FOR CON

(11) 设当前目录为D:\BB,现要把D:\AA目录下首字符是A的文本文件全部删除，应该使用命令（　）。
A) DEL A*.TXT 　　　　　B) DEL \AA\A.TXT
C) DEL \AA\A*.TXT 　　　D) DEL \AA\A?.TXT

(12) 在Windows中，启动应用程序的正确方法是（　）。
A) 用鼠标指向该应用程序图标
B) 将该应用程序窗口最小化成图标
B) 将该应用程序窗口还原
D) 用鼠标双击该应用程序图标

(13) 在Windows中，终止应用程序执行的正确方法是（　）。
A) 将该应用程序窗口最小化成图标
B) 用鼠标双击应用程序窗口右上角的还原按钮
C) 用鼠标双击应用程序窗口中的标题栏
D) 用鼠标双击应用程序窗口左上角的控制菜单框

(14) 在微机系统中，对输入输出设备进行管理的基本程序模块(BIOS)存放在（　）。
A) RAM中　　　　 B) ROM中　　 C) 硬盘中　　　 D) 寄存器中

(15) 使计算机病毒传播范围最广的媒介是（　）。
A) 硬磁盘　　 B) 软磁盘 　　C) 内部存储器 　　D) 互联网

(16) 设有 int x=11; 则表达式 (x++ * 1/3) 的值是（　）。
A) 3 　　　　　B) 4 　　　　C) 11 　　　　　　　D) 12

(17) 下列程序的输出结果是（　）。
A) 3 B) 3.2 C) 0 D) 3.07
main()
{ double d=3.2; int x,y;
x=1.2; y=(x+3.8)/5.0;
printf("%d \n", d*y);
}

(18) 下列程序执行后的输出结果是(小数点后只写一位)（　）。
A) 6 6 6.0 6.0 　　　　B) 6 6 6.7 6.7
C) 6 6 6.0 6.7 　　　　D) 6 6 6.7 6.0
main()
{ double d; float f; ling l; int i;
i=f=1=d=20/3;
printf("%d %ld %f %f \n", i,l,f,d);
}

(19) 下列变量定义中合法的是（　）。
A) short _a=1-.le-1;　　　 B) double b=1+5e2.5;
C) long do=0xfdaL; 　　　　D) float 2_and=1-e-3;

(20) 设 int x=1, y=1; 表达式(!x||y--)的值是（　）。
A) 0 　　　　B) 1 　　　　C) 2　　　 D) -1

(21) 与 y=(x>0?1:x<0?-1:0);的功能相同的if语句是（　）。
A) if (x>0) y=1; 　　　　B) if(x)
    else if(x<0)y=-1; 　　　　if(x>0)y=1;
        else y=0; 　　　　　　　　else if(x<0)y=-1;
                            else y=0;
C) y=-1 　　　　　　　　D) y=0;
if(x) 　　　　　　　　　　　if(x>=0)
if(x>0)y=1; 　　　　　　　　if(x>0)y=1;
else if(x==0)y=0; 　　　　　　else y=-1;
  else y=-1;

(22) 以下循环体的执行次数是（　）。
A) 3 　　B) 2 　　　C) 1　　　 D) 0
main()
{ int i,j;
for(i=0,j=1; i<=j+1; i+=2, j--)printf("%d \n",i);
}

(23) 以下叙述正确的是（　）。
A) do-while语句构成的循环不能用其它语句构成的循环来代替。
B) do-while语句构成的循环只能用break语句退出。
C) 用do-while语句构成的循环,在while后的表达式为非零时结束循环。
D) 用do-while语句构成的循环,在while后的表达式为零时结束循环。

(24) 下列程序执行后的输出结果是（　）。
A) G　　　 B) H　　　 C) I 　　D) J
main()
{ int x='f'; printf("%c \n",'A'+(x-'a'+1)); }

(25) 执行下面的程序段后,变量k中的值为（　）。
A) 不定值 　　B) 33　　 C) 30 　　D) 10
int k=3, s[2];
s[0]=k; k=s[1]*10;

(26) 若已定义:（　）。
int a[ ]={0,1,2,3,4,5,6,7,8,9], *p=a,i;
其中 0≤i≤9, 则对a数组元素不正确的引用上
A) a[p-a] 　　B) *(&a[i]) 　　C) p[i]　　 D) a[10]

(27) 下列程序执行后的输出结果是（　）。
A) 6 　　　B) 7　　 C) 8 　　　D) 9
void func(int *a,int b[])
{ b[0]=*a+6; }
main()
{ int a,b[5];
    a=0; b[0]=3;
    func(&a,b); printf("%d \n,b[0]);
}

(28) 下列程序的运行结果是（　）。
A) a=%2,b=%5 　　　　　 B) a=2,b=5
C) a=d, b=d 　　　　　　D) a=%d,b=%d
#include <stdio.h>
main()
{ int a=2,c=5;
  printf("a=%d,b=%d\n",a,c); }

(29) 下列程序执行后的输出结果是（　）。
A) 3　　 B) 6　　　 C) 9 　　　D) 随机数
main()
{ int a[3][3], *p,i;
    p=&a[0][0];
    for(i=p; i<9; i++) p[i]=i+1;
    printf("%d \n",a[1][2]);
}

(30) 设有数组定义: char array [ ]="China"; 则数组 array所占的空间为（　）。
A) 4个字节 　　B) 5个字节　　 C) 6个字节 　　D) 7个字节

(31) 下列程序的输出结果是（　）。
A) 4 　　B) 6 　　　C) 8　　 D) 10
int b=2;
int func(int *a)
{ b += *a; return(b);}
main()
{ int a=2, res=2;
  res += func(&a);
  printf("%d \n",res);
}

(32) 在以下四组中，每组有两个分别运算的函数，运算结果相同的是（　）。
A) 4　　 B) 2 　　C) 2　　　 D) 0
main()
{ int i, j, m=0, n=0;
  for(i=p; i<2; i++)
    for(j=0; j<2; j++)
      if(j>=i) m=1; n++;
    printf("%d \n",n);
}

(33) 下列程序的输出结果是（　）。
A) 5　　　 B) 6 　　C) 7 　　D) 8
struct abc
{ int a, b, c; };
main()
{ struct abc s[2]={{1,2,3},{4,5,6}}; int t;
    t=s[0],a+s[1],b;
    printf("%d \n",t);
}

(34) 设 int b=2;表达式(b>>2)/(b>>1)的值是（　）。
A) 0 　　B) 2　　 C) 4　　　 D) 8

(35) 在C程序中,可把整型数以二进制形式存放到文件中的函数是（　）。
A) fprintf函数　　 B) fread函数 　　C) fwrite函数　　　 D) fputc函数

(36) 下列程序执行后的输出结果是（　）。
A) -32767　　　　 B) FFFE　　　C) -1　　 D) -32768
main()
{ char x=0xFFFF; printf("%d \n",x--); }

(37) 若有定义: float w; int a, b; 则合法的switch语句是（　）。
A) switch(w) 　　　　　　　　　　　　B) switch(a);
{ case 1.0: printf("*\n"); 　　　　　　　{ case 1 printf("*\n");
  case 2.0: printf("**\n");　　　　　　　　case 2 printf("**\n");
}　　　　　　　　　　　　　　　　　　　　　 }

C) switch(b) 　　　　　　　　　　　　　D) switch(a+b);
{ case 1: printf("*\n");　　　　　　　　 { case 1: printf("*\n");
  default: printf("\n"); 　　　　　　　　　case 2: printf("**\n");
  case 1+2: printf("**\n");　　　　　　　　default: printf("\n");
}　　　　　　　　　　　　　　　　　　　　 }

(38) 以下程序段的执行结果是（　）。
A) a=12 y=12　　　　　 B) a=12 y=12
    a=14 y=16　　　　　　 a=16 y=28
    a=16 y=20
    a=18 y=24

C) a=12 y=12 　　　　　D) a=12 y=12
    a=14 y=26
    a=14 y=44

int a, y;
a=10; y=0;
do
{ a+=2; y+=a;
  printf("a=%d y=%d\n",a,y);
  if(y>20) break;
{ while(a=14);
.
.
.

(39) 若有以下调用语句,则不正确的fun函数的首部是（　）。
A) void fun(int m, int x[]) 　　　B) void fun(int s, int h[41])
C) void fun(int p, int *s) 　　　 D) void fun(int n, int a)
main()
{ …
  int a[50],n;
  …
  fun(n, &a[9]);
  …
}

(40) 语句printf("a\bre\'hi\'y\\\bou\n");的输出结果是（　）。
A) a\bre\'hi\'y\\\bou　　　 B) a\bre\'hi\'y\bou
C) re'hi'you　　　　　　　　 D) abre'hi'y\bou
(说明:'\b'是退格符)

(41) 请选出正确的程序段（　）。
A) int *p; 　　　　　B) int *s, k;
    scanf("%d",p);　　　 *s=100;
      …　　　　　　　　　 …
C) int *s, k; 　　　D) int *s, k;
  char *p, c;　　　 　　char *p, e;
  s=&k; 　　　　　　　　s=&k;
  p=&c;　　　　　　　　 p=&c;
  *p='a'; 　　　　　　　s=p;
  …　　　　　　　 　　　*s=1;
                        …

(42) 已知指针p的指向如下图所示,则执行语句 *--p;后*p的值是（　）。
A) 30 　　B) 20 　　C) 19　　 D) 29

  a[0] a[1] a[2] a[3] a[4]
┌──┬──┬──┬──┬──┐
│ 10 │ 20 │ 30 │ 40 │ 50 │
└──┴──┴──┴──┴──┘

(43) 设已有定义: char *st="how are you"; 下列程序段中正确的是（　）。
A) char a[11], *p; strcpy(p=a+1,&st[4]);
B) char a[11]; strcpy(++a, st);
C) char a[11]; strcpy(a, st);
D) char a[], *p; strcpy(p=&a[1],st+2);

(44) 下列程序执行后的输出结果是（　）。
A) you&ne 　　B) you 　　C) me 　　D) err
mai()
{ char arr[2][4];
  strcpy(arr,"you"); strcpy(arr[1],"me");
  arr[0][3]='&';
  printf("%s \n",arr);
}

(45) 下列程序执行后的输出结果是（　）。
A) hello　　　 B) hel　　 C) hlo 　　D) hlm
void func1(int i);
void func2(int i);
char st[]="hello,friend!";
void func1(int i)
{ printf("%c",st[i]);
  if(i<3){i+=2;func2(i);}
}
void func2(int i)
{ printf("%c",st[i]);
  if(i<3){i+=2;func1(i);}
}
main()
{ int i=0; func1(i); printf("\n");}

(46) 假定下列程序的可执行文件名为prg.exe,则在该程序所在的子目录下输入命令行: prg hello good<回车>后,程序的输出结果是（　）。
A) hello good　　　 B) hg 　　　C) hel　　 D) hellogood
main()(int argc, char *argv[])
{ int i;
  if(argc<-0)return;
  for(i=1;i<argc;i++) printf("%c", *argv[i]);
}

(47) 下列程序执行后的输出结果是（　）。
A) 6 　　　B) 8　　 C) 10　　 D) 12
#define MA(x) x*(x-1)
main()
{ int a=1,b=2; printf("%d \n",MA(1+a+b));}

(48) 有以下结构体说明和变量的定义,且如下图所示指针p指向变量a,指针q指向变量b。则不能把结点b连接到结点a之后的语句是（　）。
A) a.next=q; 　　　 B) p.next=&b;
C) p->next=&b; 　　D) (*p).next=q;
struct node
{ char data;
  struct node *next;
{ a,b,*p=&a,*q=&b;

  data next data next
  ┌──┬──┐ ┌──┬──┐
  a│ 5 │ 　│ b│ 9　│ 0　 │
  └──┴──┘ └──┴──┘
↑p ↑q

(49) 变量a所占内存字节数是（　）。
A) 4　　　 B) 5　　　 C) 6　　 D) 8
union U
{ char st[4];
  int i;
  long l;
};
struct A
{ int c;
  union U u;
}a;

(50) 执行下列程序时输入:123<空格>456<空格>789<回车>,输出结果是（　）。
A) 123,456,789　　　 B) 1,456,789
C) 1,23,456,789 　　　D) 1,23,456
main()
{ char s[100]; int c, i;
  scanf("%c",&c); scanf("%d",&i); scanf("%s",s);
  printf("%c,%d,%s \n",c,i,s);
}

二)填空题(每空2分，共40分)
    请将每空的正确答案写在答题卡上[1]￣[20]序号的横线上，答在试卷上不得分。

(1) 计算机网络按通信距离来划分,可分为局域网和广域网。因特网属于 [1] 。

(2) 当前盘是C,确保在D盘的根目录下建立一个子目录USER的一条DOS命令是 [2] 。

(3) 要将当前盘当前目录中所有扩展名为.TXT的文件内容显示在屏幕上的DOS命令是 [3] 。

(4) DOS命令分为内部命令和外部命令,CHKDSK命令是 [4] 命令。

(5) 在Windows中,为了终止一个应用程序的运行,首先单击该应用程序窗口中的控制菜单框,然后在控制菜单中单击 [5] 命令。

(6) 设有以下变量定义,并已赋确定的值
  char w; int x; float y; double z;
  则表达式:w*x+z-y所求得的数据类型为 [6] 。

(7) 若x为int类型,请以最简单的形式写出与逻辑表达式!x等价的C语言关系表达式[7] 。

(8) 若有如下图所示五个连续的int类型的存储单元并赋值如下图,a[0]的地址小于a[4]的地址。p和s是基类型为int的指针变量。请对以下问题进行填空。

  a[0] a[1] a[2] a[3] a[4]
┌──┬──┬──┬──┬──┐
│ 22 │ 33 │ 44 │ 55 │ 66 │
└──┴──┴──┴──┴──┘

1,若p已指向存储单元a[1]。通过指针p,给s赋值,使s指向最后一个存储单元a[4]的语句是 [8] 。

2,若指针s指向存储单元a[2],p指向存储单元a[0],表达式s-p的值是 [9] 。

(9) 下面函数用来求出两个整数之和,并通过形参传回两数相加之和值,请填空。
int add(int x, int y, [10] z)

{ [11] =x+y; }

(10) 下面程序的功能是:计算1到10之间奇数之和及偶数之和,请填空。
#include <stdio.h>
main()
{ int a, b, c, i;
a=c=0;
for(i=0;i<10;i+=2)
{ a+=i;
[12] ;
c+=b;
}
printf("偶数之和=%d\n",a);
printf("奇数之和=%d\n",c-11);
}

(11) 下面程序的功能是:输出100以内能被3整除且个位数为6的所有整数,请填空。
#include <stdio.h>
main()
{ int i, j;
for(i=0; [13]; i++)
{ j=i*10+6;
if( [14] ) continue;
printf("%d",j);
}
}

(12) 下面程序的功能是:将字符数组a中下标值为偶数的元素从小到大排列,其它元
素不变。请填空。
#include <stdio.h>
#include <string.h>
main()
{ char a[]="clanguage",t;
  int i, j, k;
  k=strlen(a);
  for(i=0; i<=k-2; i+=2)
  for(j=i+2; j<=k; [15] )
  if( [16] )
  { t=a[i]; a[i]=a[j]; a[j]=t; }
  puts(a);
  printf("\n");
}

(13) 以下程序的运行结果是 [17]
#include <stdio.h>
main()
{ int k=4, m=1, p;
  p=func(k,m); printf("%d,",p);
  p=func(k,m); printf("%d \n",p);
}
func(int a, int b)
{ static int m=0, i=2;
  i+=m+1;
  m=i+a+b;
  return m;
}

(14) 以下程序的功能是:将无符号八进制数字构成的字符串转换为十进制整数。例
如,输入的字符串为:556,则输出十进制整数366。请填空。
#include <stdio.h>
main()
{ char *p, s[6];
  int n;
  p=s;
  gets(p);
  n=*p-'0';
  while( [18] !='\0')n=n*8+*p-'0';
  printf("%d \n",n);
}

(15) 函数 void fun(float *sn, int n)的功能是:根据以下公式计算S,计算结果
通过形参指针sn传回;n通过形参传入,n的值大于等于0。请填空。
1 1 1 1
S=1- ─ + ─ - ─ + … ──
3 5 7 2n+1

void fun( float *sn, int n)
{ float s=0.0, w, f=-1.0;
  int i=0;
  for(i=0; i<=n; i++)
{ f= [19] * f;
  w=f/(2*i+1);
  s+=w;
}
  [20] =s;
}


00年4月二级C语言笔试试题答案

2000年4月二级C语言笔试试题答案

    一、选择题((1)--(40)题每题1分，(41)--(50)题每题2分，共60分。
(1)A 　(2)C (3)C 　(4)D (5)D 　(6)A （7)C (8)C 　(9)D (10)B
(11)C (12)D (13)D (14)B (15)D (16)A (17)C (18)A (19)A (20)B
(21)A (22)C (23)D (24)A (25)A (26)D (27)A (28)B (29)B (30)C
(31)B (32)A (33)B (34)D (35)A (36)C (37)D (38)B (39)C (40)C
(41)C (42)B (43)A (44)A (45)C (46)B (47)B (48)B (49)C (50)D

   二、填空题(每空2分，共40分)
(1)广域网

(2)MD D:\USER

(3) COPY *.TXT CON

(4) 外部

(5退出(或关闭)

(6)double

(7)x==0||x==1

(8) s= p+3

(9) 2

(10) int *

(11) * z

(12) b = i + 1

(13)i<10

(14) i % 3 != 0

(15) j+=2

(16) a[i]>a[j]

(17) 8,17

(18) *(++p)

(19) –1

(20) *sn


00年9月二级C语言笔试试题

2000年9月二级C语言笔试试题

一、选择题((1)--(40)每小题1分, (41)--(50)每小题2分, 共60分
    下列各题A)、B)、C)、D)四个选项中，只有一个选项是正确的，请将正确选项在答题卡相应位置上涂黑，答在试卷上不得分。

(1) 下列电子邮件地址中正确的是(其中□表示空格)（　）。
A) Malin&ns.cnc.ac.cn 　　　　B) malin@ns.cac.ac.cn
C) Lin□Ma&ns.cnc.ac.cn 　　　D) Lin□Ma@ns.cnc.ac.cn

(2) 下列说法中正确的是 （　）。
A) 为了使用Novell网提供的服务，必须采用FTP协议
B) 为了使用Internet网提供的服务，必须采用TELNET协议
C) 为了使用Novell网提供的服务，必须采用TCP/IP协议
D) 为了使用Internet网提供的服务，必须采用TCP/IP协议 s

(3) 下列说法中不正确的是 （　）。
A) 调制解调器(Modem)是局域网络设备
B) 集线器(Hub)是局域网络设备
C) 网卡(NIC)是局域网络设备
D) 中继器(Repeater)是局域网络设备

(4) 十进制数397的十六进制值为 （　）。
A) 18D　　　 B) 18E 　　　C) 277　　　 D) 361

(5) 下列说法中不正确的是 （　）。
A) CD-ROM是一种只读存储器但不是内存储器
B) CD-ROM驱动器是多媒体计算机的基本部分
C) 只有存放在CD-ROM盘上的数据才称为多媒体信息
D) CD-ROM盘上最多能够存储大约650兆字节的信息

(6) Windows应用环境中鼠标的拖动操作不能完成的是 （　）。
A) 当窗口不是最大时，可以移动窗口的位置
B) 当窗口最大时，可以将窗口缩小成图标
C) 当窗口有滚动条时可以实现窗口内容的滚动
D) 可以将一个文件移动(或复制)到另一个目录中去

(7) 从Windows中启动MS-DOS方式进入了DOS状态，如果想回到Windos状态，在DOS提示符下，应键入的命令为（　）。
A) EXIT 　　B) QUIT 　　　C) WIN 　　　D) DOS -U

(8) 要在WINDOWS标准窗口的下拉菜单中选择命令，下列操作错误的是 （　）。
A) 用鼠标单击该命令选项
B) 用键盘上的上下方向键将高亮度条移至该命令选项后再按回车键
C) 同时按下ALT键与该命令选项后括号中带有下划线的字母键
D) 直接按该命令选项后面括号中带有下划线的字母键

(9) ASCII码(含扩展)可以用一个字节表示，则可以表示的ASCII码值个数为（　）。
A) 1024 　　　B) 256 　　C) 128 　　　D) 8O

(10) 字长为32位的计算机是指（　）。
A) 该计算机能够处理的最大数不超过232
B) 该计算机中的CPU可以同时处理32位的二进制信息
C) 该计算机的内存量为32MB
D) 该计算机每秒钟所能执行的指令条数为32MIPS

(11) 在DOS系统中，下列文件名中非法的是（　）。
A) ABCDEFG1　　　 B) ABCDEFG1.234　　　 C)ABCD_EFG 　　　　D)ABCD\EFG

(12) DOS系统启动后，下列文件中驻留内存的是（　）。
A) CONFIG.SYS 　　B) COMMAND.COM 　　　C) AUTOEXEC.BAT 　　D) MEM.EXE

(13) DOS下的“DIR *2”命令将列出当前目录下的（　）。
A) 所有名字末尾为字符2的非隐含文件和目录
B) 所有名字末尾为字符2的非隐含文件
C) 所有非隐含文件
D) 所有非隐含文件和目录

(14) 软驱的盘符为A，A盘上只有一个目录\XYZ,而\XYZ下有若干子目录和文件，若想把A盘的所有内容复制到C盘根目录下，应使用的命令为 （　）。
A) COPY A:\*.* C: 　　　　　　　B) COPY A:\*.* C:\*.*
C) XCOPY A:\*.* C:\ /S 　　　 　D) DISKCOPY A: C:

(15) 若要将当前盘目录下的文件A.TXT连接在文件B.TXT后面，应使用的命令为 （　）。
A) COPY A.TXT>>B.TXT 　　　B) MOVE A.TXT>>B.TXT
C) PATH A.TXT>>B.TXT 　　　D) TYPE A.TXT>>B.TXT

(16) 若变量已正确定义并赋值，下面符合C语言语法的表达式是 （　）。
A) a:=b+1　　 B) a=b=c+2　C) int 18.5%3　　 D) a=a+7=c+b

(17) C语言中运算对象必须是整型的运算符是 （　）。
A) %= 　　　　B)／ 　　 C) =　　　　　 D) 〈=

(18) 若已定义x和y为double类型，则表达式x=1，y=x+3/2 的值是（　）。
A) 1 　　　　B) 2　　 　C) 2.0　　　　 D) 2.5

(19) 若变量a、i已正确定义，且i已正确赋值，合法的语句是（　）。
A) a==1　　 B) ++i; 　　C) a=a++=5; 　　D) a=int(i);

(20) 若有以下程序段，
int c1=1,c2=2,c3;
c3=1.0/c2*c1;
则执行后，c3中的值是 （　）。
A) 0　　 B) 0.5 　　C) 1　　 D) 2

(21) 有如下程序
main( )
{ int y=3,x=3,z=1;
  printf(“%d %d\n”,(++x,y++),z+2);
}
运行该程序的输出结果是 （　）。
A) 3 4　　 B) 4 2 　　C) 4 3 　　D) 3 3

(22) 能正确表示逻辑关系：“a≥=10或a≤0”的C语言表达式是（　）。
A) a>=10 or a<=0　　 B) a>=0|a<=10 　　C) a>=10 &&a<=0 　　D) a>=10‖a<=0

(23) 有如下程序
main( )
{ int x=1,a=0,b=0;
switch(x){
case 0: b++;
case 1: a++
case 2: a++;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

(24) 有如下程序
main( )
{ float x=2.0,y;
if(x<0.0) y=0.0;
else if(x<10.0) y=1.0/x;
else y=1.0;
printf(“%f\n”,y);
}
该程序的输出结果是（　）。
A) 0.000000　　 B) 0.250000　　 C) 0.500000 　　D) 1.000000

(25) 有如下程序
main( )
{ int a=2,b=-1,c=2;
if(aif(b<0) c=0;
else c++
printf(“%d\n”,c);
}
该程序的输出结果是 （　）。
A) 0　　　 B) 1 　　　C) 2　　　 D) 3

(26) 有如下程序
main( )
{ int i,sum;
for(i=1;i<=3;sum++) sum+=i;
printf(“%d\n”,sum);
}
该程序的执行结果是 （　）。
A) 6　　 B) 3 　　C) 死循环 　　D) 0

(27) 有如下程序
main( )
{ int x=23;
do
{ printf(“%d”,x--);}
while(!x);
}
该程序的执行结果是 （　）。
A) 321 　　B) 23 　　C) 不输出任何内容 　　D) 陷入死循环

(28) 有如下程序
main( )
{ int n=9;
while(n>6) {n--;printf(“%d”,n);}
}
该程序段的输出结果是 （　）。
A) 987　　 B) 876　　 C) 8765 　　D) 9876

(29) 设有说明语句：char a=’\72’;则变量a（　）。
A) 包含1个字符 B) 包含2个字符 C) 包含3个字符 D) 说明不合法

(30) 有如下函数调用语句
func(rec1,rec2+rec3,(rec4,rec5);
该函数调用语句中，含有的实参个数是 （　）。
A) 3　　 B) 4　　　 C) 5　　　 D) 有语法错

(31) 有如下程序
int runc(int a,int b)
{ return(a+b);}
main( )
{ int x=2,y=5,z=8,r;
r=func(func(x,y),z);
printf(“%\d\n”,r);
}
该程序的输出的结果是 （　）。
A) 12 　　B) 13 　　C) 14　　 D) 15

(32) 有如下程序段
int *p,a=10,b=1
p=&a; a=*p+b;
执行该程序段后，a的值为 （　）。
A) 12 B) 11 C) 10 D) 编译出错

(33) 对于基类型相同的两个指针变量之间，不能进行的运算是 （　）。
A) < 　　　B) =　　　 C) + 　　D) -

(34) 以下函数返回a所指数组中最小的值所在的下标值
fun(int *a, int n)
{ int i,j=0,p;
p=j;
for(i=j;iif(a[i]return(p);
}
在下划线处应填入的是 （　）。
A) i=p B) a[p]=a[i] C) p=j D) p=i

(35) 有如下程序
long fib(int n)
{ if(n>2) return(fib(n-1)+fib(n-2));
else return(2);
}
main( )
{ printf(“%d\n”,fib(3));
该程序的输出结果是 （　）。
A) 2 　　　B) 4　　 C) 6 　　　D) 8

(36) 在C语言中，函数的隐含存储类别是（　）。
A) auto　　 B) static 　　C) extern　　 D) 无存储类别

(37) 有如下程序
#define N 2
#define M N+1
#define NUM 2*M+1
#main()
{ int i;
  for(i=1;i<=NUM;i++)printf(“%d\n”,i);
}
该程序中的for循环执行的次数是（　）。
A) 5 　　　B) 6　　　　C) 7　　　 D) 8

(38) 有以下函数
char fun(char *p)
{ return p; }
该函数的返回值是 （　）。
A) 无确切的值 　　　　　　　　　B) 形参p中存放的地址值
B) 一个临时存储单元的地址 　　　D) 形参p自身的地址值

(39) 有如下程序段
int a=14,b=15,x;
char c=’A’;
x=(a&&b)&&(c<’B’);
执行该程序段后，x的值为（　）。
A) ture　　　 B) false 　C) 0　　　　　　 D) 1

(40) 若fp是指向某文件的指针，且已读到此文件末尾，则库函数feof(fp)的返回值是 （　）。
A) EOF　　　 B) 0　　　　C) 非零值 　　　D) NULL

(41) 若有以下说明和定义
fun(int *c){ }
main()
{ int (*a)()=fun,*b(),w[10],c;
┆
}
在必要的赋值之后，对fun函数的正确调用语句是 （　）。
A) a=a(w); 　　B) (*a)(&c); 　　C) b=*b(w); 　　D) fun (b);

(42) 有如下说明
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
则数值为9的表达式是 （　）。
A) *P+9　　 B) *(P+8)　　 C) *P+=9 　　D) P+8

(43) 有如下程序
main( )
{ int n[5]={0,0,0},i,k=2;
for(i=0;iprintf(“%d\n”,n[k]);
}
该程序的输出结果是 （　）。
A) 不确定的值 　　B) 2 　　　C) 1　　　 D) 0

(44) 若有以下的定义：int t[3][2];能正确表示t数组元素地址的表达式是 （　）。
A) &t[3][2]　　　　 B) t[3]　　　 C) t[1] 　　　D) t[2]

(45) 有如下程序
main( )
{ int a[3][3]={{1,2},{3,4},{5,6}},i,j,s=0;
for(i=1;i<3;i++)
for(j=0;jprintf(“%d\n”,s);
}
该程序的输出结果是（　）。
A) 18　　　　 B) 19　　　　 C) 20 　　　　D) 21

(46) 有如下定义
struct person{char name[9]; int age;};
strict person class[10]={“Johu”, 17,
“Paul”, 19
“Mary”, 18,
“Adam 16,};
根据上述定义，能输出字母M的语句是 （　）。
A) prinft(“%c\n”,class[3].mane);
B) pfintf(“%c\n”,class[3].name[1]);
C) prinft(“%c\n”,class[2].name[1]);
D) printf(“%^c\n”,class[2].name[0]);

(47) 以下对结构体类型变量的定义中，不正确的是 （　）。
A) typedef struct aa 　　B) #define AA struct aa
{ int n;　　　　　　　　　　 AA {int n;
float m; 　　　　　　　　　　　float m;
}AA;　　　　　　　　　　　　　　 }td1;
AA 　　　　　　　　　　　　　　　　td1;
C) struct 　　　　　　　　D) struct
{ int n;　　　　　　　　　　 { int n;
float m; 　　　　　　　　　　　float m;
}aa;　　　　　　　　　　　　　 }td1;
stuct aa td1;

(48) 若已建立如下图所示的单向链表结构, 在该链表结构中，指针p、s分别指向图中所示结点，则不能将s所指的结点插入到链表末尾仍构成单向链表的语句组是 （　）。
A) p =p->next; s->next=p; p->next=s;
B) p =p->next; s->next=p->next; p->next=s;
C) s->next=NULL; p=p->next; p->next=s;
D) p=(*p).next; (*s).next=(*p).next; (*p).next=s;

(49) 有如下程序
main()
{ char s[]=”ABCD”, *P;
  for(p=s+l; p}
该程序的输出结果是（　）。
A) ABCD　　　 B) A 　　C) B 　　　D) BCD
    BCD 　　　 　B 　　　 C　　　　　CD
     CD 　　　　 C D D
D D

(50) 有如下程序
main()
{ char ch[2][5]={“6937”,”8254”},*p[2];
int i,j,s=0;
for(i=0;i<2;i++) p[i]=ch[i];
for(i=0;i<2;i++)
for(j=0;p[i][j]>’\0’;j+=2)
s=10*s+p[i][j]-‘0’;
printf(“%d\n”,s);
}
该程序的输出结果是 （　）。
A) 69825 　　　B) 63825 　　　Ｃ) 6385　　　 D) 693825

二、填空题(每空2分，共40分)
     请将每空的正确答案写在答题卡上[1]至[20]序号的横线上，答在试卷上不得分。

(1) 在DOS状态下,当执行当前盘目录中的程序A.EXE时,为了将本该在屏幕上显示的运行结果输出到文件A.DAT中,应使用的　　　DOS命令为 [1] 。

(2) 在XCOPY、PATH、TREE三个DOS命令中，属于内部命令的是令是 [2] 。

(3) 设当前盘为C盘，为了将当前盘当前目录中第三个字符为X的所有文件同名复制到A盘的当前目录中，应使用的DOS命令为 [3] 。

(4) 要将当前盘的目录A\B\C设置为当前目录,应使用的DOS命令为 [4]。

(5) 计算机网络按通信距离划分为局域网与广域网,Novell网属于 [5] 。

(6) 以下程序的输出结果是 [6] 。
main()
{ unsigned short a=65536; int b;
  printf(“%d\n”,b=a);
}

(7) 若有定义：int a=10,b=9,c=8;接着顺序执行下列语句后，变量b中的值是 [7] 。
    c=(a-=(b-5));
    c=(a%11)+(b=3);

(8) 表示“整数x的绝对值大于5”时值为“真”的C语言表达式是 [8] 。

(9) 要使以下程序段输出10个整数，请填入一个整数。
    for(i=0;i<= [9] ;printf(“%d\n”,i+=2));

(10) 函数pi的功能是根据以下近似公式求π值：
    (π*π)/6=1+1/(2*2)+1/(3*3)+..+1/(n*n)
    现在请你在下面的函数中填空，完成求π的功能。
    #include “math.h”
    double pi(long n)
    { double s=0.0; long i;
        for(i=1;i<=n;i++)s=s+ [10] ;
        return(sqrt(6*s));
    }

(11) 若输入字符串：abcde<回车>,则以下while循环体将执行 [11] 次。
    While((ch=getchar())==’e’) printf(“*”);

(12) 以下函数用来求出两整数之和，并通过形参将结果传回，请填空。
      void func(int x,int y, [12] z)
      { *z=x+y; }

(13) 若有以下定义，则不移动指针p，且通过指针p引用值为98的数组元素的表达式是 [13] 。
      int w[10]={23,54,10,33,47,98,72,80,61}, *p=w;

(14) 设在主函数中有以下定义和函数调用语句，且fun函数为void类型；请写出fun函数的首部[14] 。要求形参名为b。
      main()
      { double s[10][22];
        int n;

      fun(s);

    }

(15) 以下程序的输出结果是 [15] 。
      void fun()
      { static int a=0;
          a+=2; printf(“%d”,a);
      }
    main()
      { int cc;
        for(cc=1;cc<4;cc++) fun()
        printf(“\n”);
      }

(16) 以下程序的输出结果是 [16] 。
    #define MAX(x,y) (x)>(y)?(x):(y)
    main()
    { int a=5,b=2,c=3,d=3,t;
        t=MAX(a+b,c+d)*10;
      printf(“%d\n”,t);
    }

(17) 若要使指针p指向一个double类型的动态存储单元，请填空。
    p= [17] malloc(sizeof(double));

(18) 设有以下结构类型说明和变量定义，则变量a在内存所占字节数是 [18] 。
    Struct stud
    { char num[6];
      int s[4];
      double ave;
      } a,*p;

(19) 以下函数把b字符串连接到a字符串的后面，并返回a中新字符串的长度。请填空。
      Strcen(char a[], char b[])
      { int num=0,n=0;
        while(*(a+num)!= [19] ) num++;
        while(b[n]){*(a+num)=b[n]; num++; [20] ;}
        return(num);
      }


00年９月二级C语言笔试试题答案

2000年９月二级C语言笔试试题答案

    一、选择题：
(1)B 　(2)D (3)A 　(4)A (5)C 　(6)B (7)A 　(8)C (9)B　(10)B
(11)D (12)B (13)D (14)C (15)D (16)B (17)A (18)C (19)B (20)A
(21)D (22)D (23)A (24)C (25)C (26)C (27)B (28)B (29)A (30)A
(31)D (32)B (33)C (34)D (35)B (36)C (37)B (38)B (39)D (40)c
(41)B (42)B (43)D (44)D (45)A (46)D (47)C (48)A (49)D (50)C

二、填空题：
[1] A.EXE >A.DAT 或A >>A.DAT

[2] PATH

[3] COPY ??X*.* A:

[4] CD A\B\C

[5] 局域网

[6] 0

[7] 3

[8] x>5||x<-5

[9] 18

[10]1.0/(i*i)

[11] 0

[12] int *

[13] P[5]或*(p+5)

[14] void fun(double b[][22])
 或 void fun(double b[0][22])
 或 void fun(double (*b)[22])
[15] 246

[16] 7

[17] (double *)

[18] 22

[19] '\0'或0

[20] n++或n+=1或n=n+1


01年4月二级C语言笔试试题

2001年4月二级C语言笔试试题

一、选择题（(1)-(40)题每题1分,(41)-(50)题每题2分,共60分）下列各题 A) 、B)、C)、D)四个选项中，只有一个选项是正确的，请将正确的选项涂写在答题卡相应位置上，答在试卷上不得分。

(1) 计算机的存储器完整的应包括（　）。
A) 软盘、硬盘 　　　　　　　B) 磁盘、磁带、光盘
C) 内存储器、外存储器 　　　D) RAM、ROM

(2) 计算机中运算器的作用是（　）。
A) 控制数据的输入/输出 　　　　　　 B) 控制主存与辅存间的数据交换
C) 完成各种算术运算和逻辑运算　　　 D) 协调和指挥整个计算机系统的操作

(3) 软磁盘处于写保护状态时，其中记录的信息（　）。
A) 绝对不会丢失
B) 不能被擦除，但能追加新信息
C) 不能通过写磁盘操作被更新
D) 不能以常规方式被删除，但可以通过操作系统的格式化功能被擦除

(4) 光盘根据基制造材料和记录信息的方式不同，一般可分为（　）。
A) CD、VCD
B) CD、VCD、DVD、MP3
C) 只读光盘、可一次性写入光盘、可擦写光盘
D) 数据盘、音频信息盘、视频信息盘

(5) 在计算机系统中，可执行程序是（　）。
A) 源代码 　　B) 汇编语言代码　　 C) 机器语言代码　　 D) ASCII码

(6) 计算机软件系统包括（　）。
A) 操作系统、网络软件　　　　　　　　　 B) 系统软件、应用软件
C) 客户端应用软件、服务器端系统软件　　 D) 操作系统、应用软件和网络软件

(7) 目前，一台计算机要连入Internet，必须安装的硬件是（　）。
A) 调制解调器或网卡 　　　B) 网络操作系统
C) 网络查询工具 　　　　　D) WWW浏览器

(8) 在多媒体计算机系统中，不能存储多媒体信息的是（　）。
A) 光盘　　 B) 磁盘　　 C) 磁带　　 D) 光缆

(9) 要将当前盘当前目录下一个文本文件内容显示在屏幕上，正确的命令形式是（　）。
A) TYPE a*.* 　　　　　　B) TYPE abc.exe
C) TYPE pro.c>PRN　　　 D) TYPE abc.txt

(10) 下列更改文件名的命令中正确的是（　）。
A) REN A:file1 C:F1 　　　　B) RENAME A: A:file1 C:F1
C) REN A:file1 F1　　　　　 D) REN A:file1 \SUB\F1

(11) 已知A盘为DOS系统启动盘，只有A:\DOS下有自动批处理文件，其中内容为：
      CD\DOS
      MD USER
      CD USER
    由A盘启动DOS系统后，A盘的当前目录是（　）。
A) \DOS 　　　B) \DOS\USER　　 C) \ 　　　D) \USER

(12) MS-DOS是（　）。
A) 分时操作系统 　　　　　　　B) 分布式操作系统
C) 单用户、单任务操作系统 　　D) 单用户、多任务操作系统

(13) 在Windows操作系统中，不同文档之间互相复制信息需要借助于（　）。
A) 剪切板　 B) 记事本　 C) 写字板　 D) 磁盘缓冲器

(14) 在Windows操作系统中（　）。
A) 同一时刻可以有多个活动窗口
B) 同一时刻可以有多个应用程序在运行，但只有一个活动窗口
C) 同一时刻只能有一个打开的窗口
D) DOS应用程序窗口与Windows应用程序窗口不能同时打开着

(15) 下列叙述中正确的是（　）。
A) 所有DOS应用程序都可以在Windows操作系统中正确运行
B) 所有DOS应用程序都不能在Windows操作系统中正确运行
C) 大部分DOS应用程序可以在Windows操作系统中正确运行
D) 为DOS5.0以上版本操作系统编写的应用程序可以在Windows操作系统中正确运行

(16) 下列叙述中正确的是（　）。
A) C语言编译时不检查语法
B) C语言的子程序有过程和函数两种
C) C语言的函数可以嵌套定义
D) C语言所有函数都是外部函数

(17) 以下所列的C语言常量中，错误的是（　）。
A) 0xFF 　　B) 1.2e0.5　 C) 2L 　D) ‘\72’

(18) 下列选项中，合法的C语言关键字是（　）。
A) VAR 　　B) cher　　 C) integer 　　D) default

(19) 以下变量x.、y、z均为double类型且已正确赋值，不能正确表示数学式子 的C语言表达式是（　）。
A) x/y*z　　 B) x*(1/(y*z)) 　　C) x/y*1/z 　　D) x/y/z

(20) 若a为int类型，且其值为3，则执行完表达式a+=a-=a*a后，a的值是（　）。
A) -3　　 B) 9 　　C) -12　　 D) 6

(21) 设x、y、t均为int型变量，则执行语句：x=y=3;t=++x||++y;后，y的值为（　）。
A) 不定值 　　B) 4 　　C) 3 　　D) 1

(22) 若变量已正确说明为float类型，要通过语句scanf(“%f %f %f ”,&a,&b,&c);给a赋于10.0，b赋予22.0，c赋予33.0，不正确的输入形式是：（　）。
A) 10<回车>　　 B) 10.0,22.0,33.0<回车>
    22<回车>
    33<回车>
C) 10.0<回车> 　　　　D) 10 22<回车>
  22.0 33.0<回车>　　　　　 33<回车>

(23) 若执行以下程序时从键盘上输入9，则输出结果是（　）。
A) 11 　　B) 10　　 C) 9 　　D) 8
Main0
{ int n;
    scanf(“%d”,&n);
  if(n++<10) printf(“%d\n”,n);
  else printf(“%d\n”,n--);
}

(24) 若a、 b、c1、c2、x、y、均是整型变量，正确的switch语句是（　）。
A) swich(a+b);　　　　　　 B) switch(a*a+b*b)
{ case 1:y=a+b; break; 　　　{case 3:
  case 0:y=a-b; break; 　　　　case 1:y=a+b;break;
}　　　　　　　　　　　　　　　case 3:y=b-a,break;
                              }
C) switch a　　　　　　　　 D) switch(a-b)
{ case c1 :y=a-b; break 　　　{default:y=a*b;break
  case c2: x=a*d; break 　　　　case 3:case 4:x=a+b;break
  default:x=a+b;　　　　　　　　case 10:case 11:y=a-b;break;
}　　　　　　　　　　　　　　　 }

(25) 有以下程序段
int k=0
while(k=1)k++;
while 循环执行的次数是（　）。
A) 无限次 　　　　　　　B) 有语法错，不能执行
C) 一次也不执行 　　　　D) 执行1次

(26) 以下程序执行后sum的值是（　）。
A)15 　　B)14 　　C) 不确定　　 D）0
min()
{ int i , sum;
for(i=1;i<6;i++) sum+=i;
printf(“%d\n”,sum);
}

(27) 有以下程序段
int x=3
do
{ printf(“%d”,x-=2); }
while (!(--x));
其输出结果是（　）。
A) 1 　　B) 3 0 　　C) 1 -2 　　D) 死循环

(28) 若变量c为char类型，能正确判断出c为小写字母的表达式是（　）。
A) ‘a’<=c<= ‘z’　　　　　　 B) (c>= ‘a’)||(c<= ‘z’)
C) (‘a’<=c)and (‘z’>=c) 　　D) (c>= ‘a’)&&(c<= ‘z’)

(29) 以下所列的各函数首部中，正确的是（　）。
A) void play(var :Integer,var b:Integer)
B) void play(int a,b)
C) void play(int a,int b)
D) Sub play(a as integer,b as integer)

(30) 以下程序的输出结果是（　）。
A) 0 　　B) 29 　　C) 31 　　D) 无定值
fun(int x, int y, int z)
{ z=x*x+y*y; }
main()
{ int a=31;
  fun(5,2,a);
  printf(“%d”,a);
}

(31) 下列程序段的输出结果是（　）。
A) 2 1 4 3 　　B) 1 2 1 2　　 C) 1 2 3 4 　　D) 2 1 1 2
void fun(int *x, int *y)
{ printf(“%d %d”, *x, *y); *x=3; *y=4;}
main()
{ int x=1,y=2;
  fun(&y,&x);
  printf(“%d %d”,x, y);
}

(32) 下列程序的输出结果是（　）。
A) 非法　　 B）a[4]的地址　　 C）5 　　D）3
main()
{ char a[10]={9,8,7,6,5,4,3,2,1,0},*p=a+5;
  printf(“%d”,*--p);
}

(33) 下列程序的运行结果是（　）。
A) 6 3　　 B) 3 6　　 C) 编译出错 　　D) 0 0
void fun(int *a, int *b)
{ int *k;
  k=a; a=b; b=k;
}
main()
{ int a=3, b=6, *x=&a, *y=&b;
  fun(x,y);
  printf(“%d %d”, a, b);
}

(34) 下面程序的输出结果是（　）。
A) 0 　　B) 1　　 C) 10 　　D) 9
main()
{ int a[ ]={1,2,3,4,5,6,7,8,9,0,},*p;
  p=a;
  printf(“%d\n”,*p+9);
}

(35) 当调用函数时，实参是一个数组名，则向函数传送的是（　）。
A) 数组的长度 　　　　　　　B) 数组的首地址
C) 数组每一个元素的地址 　　D) 数组每个元素中的值

(36) 设有以下说明语句
struct ex
{ int x ; float y; char z ;} example;
则下面的叙述中不正确的是（　）。
A) struct结构体类型的关键字 　　 　B) example是结构体类型名
C) x,y,z都是结构体成员名 　　　　　D) struct ex是结构体类型

(37) 以下只有在使用时才为该类型变量分配内存的存储类说明是（　）。
A) auto和 static 　　　　B) auto和 register
C) register和 static 　　D) extern和 register

(38) 若fp是指向某文件的指针，且已读到文件末尾，则库函数feof(fp)的返回值是（　）。
A) EOF　　　 B) －1 　　C) 非零值 　　D) NULL

(39) 以下程序的输出结果是（　）。
A) 20　　 　B) 21　　　 C) 22 　　　　D）23
main()
{ int i, k, a[10], p[3];
  k=5;
  for (i=0;i<10;i++) a[i ]=i;
  for (i=0;i<3;i++) p[i ]=a[i *(i+1)];
  for (i=0;i<3;i++) k+=p[i] *2;
  printf(“%d\n”,k);
}

(40) 以下程序的输出结果是（　）。
A) 1,5,9 　　B) 1,4,7 　　C) 3,5,7 　　D）3,6,9
main()
{ int i, x[3][3]={1,2,3,4,5,6,7,8,9};
  for(i=0;i<3;i++) printf(“%d,”,x[i][2-i]);
}

(41) 以下程序的输出结果是（　）。
A) 18　　 B) 19　　 C) 20 　　　D）21
main()
{ int a[3][3]={ {1,2},{3,4},{5,6} },i,j,s=0;
  for(i=1;i<3;i++)
  for(j=0;j<=i;j++)s+=a[i][j];
  printf(“%dn”,s);
}

(42) 以下程序的输出结果是（　）。
A) ABCD 　　B) ABCD　　　 C) EFG 　　D) EFGH
    FGH 　　　　EFG　　　　　 JK　　　　 IJKL
    KL 　　　　　IJ　　　　　 O
    M
main()
{ char w[][10]={ “ABCD”,”EFGH”,”IJKL”,”MNOP”},k;
  for(k=1;k<3;k++) printf(“%s\n”,w[k]);
}

(43) 当执行下面的程序时，如果输入ABC，则输出结果是（　）。
A) ABC6789　　 B) ABC67　　 C) 12345ABC6 　　D) ABC456789
#include “stdio.h”
#include “string.h”
main()
{ char ss[10]=“1,2,3,4,5”;
  gets(ss); strcat(ss, “6789”); printf(“%s\n”,ss);
}

(44) 假定以下程序经编译和连接后生成可执行文件PROG.EXE，如果在此可执行文件所在目录的DOS提示符下键入：
PROG ABCDEFGH IJKL<回车>，则输出结果为（　）。
A) ABCDEFG 　　B) IJHL　　 C) ABCDEFGHIJKL　　 D) IJKLABCDEFGH
main( int argc, char *argv[]))
{ while(--argc>0) printf(“%s”,argv[argc]);
  printf(“\n”);
}

(45) 以下程序的输出结果是（　）。
A) 1 　　B) 2　　 C) 3 　　D) 4
long fun( int n)
{ long s;
  if(n= =1 || n= =2) s=2;
  else s=n-fun(n-1);
  return s;
}
main()
{ printf(“%ld\n”, fun(3)); }

(46) 以下程序的输出结果是（　）。
A) 16 　　B) 2　　 C) 9　　 D) 1
#define SQR(X) X*X
main()
{ int a=16, k=2, m=1;
  a/=SQR(k+m)/SQR(k+m);
  printf(“d\n”,a);
}

(47) 若定义了以下函数：
void f(……)
{　……
  *p=(double *)malloc( 10*sizeof( double));
  ……
}
p是该函数的形参，要求通过p把动态分配存储单元的地址传回主调函数，则形参p的正确定义应当是（　）。
A) double *p 　　B) float **p 　　C) double **p 　　D) float *p

(48) 以下程序的输出是（　）。
A) 10　　 B) 11 　　C) 51　 　D) 60
struct st
{ int x; int *y;} *p;
  int dt[4]={ 10,20,30,40 };
  struct st aa[4]={ 50,&dt[0],60,&dt[0],60,&dt[0],60,&dt[0],};
main()
{ p=aa;
  printf(“%d\n”,++(p->x));
}

(49) 假定建立了以下链表结构，指针p、q分别指向如图所示的结点，则以下可以将q所指结点从链表中删除并释放该结点的语句组是（　）。
A) free(q); p->next=q->next;
B) (*p).next=(*q).next; free(q);
C) q=(*q).next; (*p).next=q; free(q);
D) q=q->next; p->next=q; p=p->next; free(p);

(50) 以下程序的输出结果是（　）。
A) 0 　　B) 1　　 C) 2　　 D) 3
main()
{ int x=0.5; char z=’a’;
  printf(“%d\n”, (x&1)&&(z<’z’) ); }

二) 填空题(每空2分，共40分) 请将每一个空的正确答案写在答题卡【1】至【20】序号的横线上，答在试卷上不得分。

(1) 计算机机领域中，通常用英文单词“Byte”表示 【１】 。

(2) 在DOS环境下，自动批处理的文件名为 【２】 。

(3) 要将当前盘当前目录下所有扩展名为.TXT的文件内容在打印机上打印输出，应使用的单条DOS内部命令为 【３】 。

(4) 在Windows环境下，可以利用单击、双击、拖动这三种鼠标操作之一的 【４】 操作实现窗口的移动。

(5) 在Windows环境下，可以将窗口最小化为 【５】 。

(6) 以下程序的输出结果是 【6】
main()
{ int a=1, b=2;
a=a+b; b=a-b; a=a-b;
printf(“%d,%d\n”, a, b );
}

(7) 下列程序的输出结果是16.00，请填空。
main()
{ int a=9, b=2;
float x= 【7】 , y=1.1,z;
z=a/2+b*x/y+1/2;
printf(“%5.2f\n”, z );
}

(8) 用以下语句调用库函数malloc，使字符指针st指向具有11个字节的动态存储空间，请填空。
st=(char*) 【8】 ;

(9) 下列程序段的输出结果是 【9】 。
main()
{ char b[]=”Hello,you”;
b[5]=0;
printf(“%s \n”, b );
}

(10) 下列程序段的输出结果是 【10】 。
int n=’c’;
switch(n++)
{ default: printf(“error”);break;
case ‘a’:case ‘A’:case ‘b’:case ‘B’:printf(“good”);break;
case ‘c’:case ‘C’:printf(“pass”);
case ‘d’:case ‘D’:printf(“warn”);
}

(11) 以下程序通过函数指针p调用函数fun，请在填空栏内，写出定义变量p的语句。
void fun(int *x,int *y)
{ …… }
main()
{ int a=10,b=20;
  【11】 ; /定义变p */
  p=fun; p(&a,&b);
  ……
}

(12) 下列程序的输出结果是 【12】 。
void fun(int *n)
{ while( (*n)--);
  printf(“%d”,++(*n));
}
main()
{ int a=100;
  fun(&a);
}

(13) 以下程序的输出结果是 【13】 。
main()
{ int arr[ ]={30,25,20,15,10,5}, *p=arr;
  p++;
  printf(“%d\n”,*(p+3));
}

(14) 以下程序用来输出结构体变量ex所占存储单元的字节数，请填空。
struct st
{ char name[20]; double score; };
main()
{ struct st ex;
  printf(“ex size: %d\n”,sizeof( 【14】 ));
}

(15) 下面程序把从终端读入的文本（用@作为文本结束标志）输出到一个名为bi.dat的新文件中。请填空。
#include “stdio.h”
FILE *fp;
{ char ch;
  if( (fp=fopen ( 【15】 ) )= = NULL)exit(0);
  while( (ch=getchar( )) !=’@’) fputc (ch,fp);
  fclose(fp);
}

(16) 若变量n中的值为24，则prnt函数共输出 【16】 行，最后一行有 【17】 个数。
void prnt(int n, int aa[ ])
{ int i;
for(i=1; i<=n;i++)
{ printf(“%6d”, aa[i]);
  if( !(i%5) ) printf(“\n”);
}
  printf(“\n”);
}

(17) 以下程序中，主函数调用了LineMax函数，实现在N行M列的二维数组中，找出每一行上的最大值。请填空。
#define N 3
#define M 4
void LineMax(int x[N][M])
{ int i,j,p;
  for(i=0; i { p=0;
  for(j=1; j if(x[i][p] printf(“The max value in line %d is %d\n”, i, 【19】 );
}
}
main()
{ int x[N][M]={1,5,7,4,2,6,4,3,8,2,3,1};
【20】
}


01年4月二级C语言笔试试题答案

2001年4月二级C语言笔试试题答案

一、 选择题((1)--(40)题每题1分，(41)--(50)题每题2分，共60分。
(1)C 　(2)C (3)C 　(4)C (5)C 　(6)B (7)A 　(8)D (9)D　(10)C
(11)C (12)C (13)A (14)B (15)C (16)D (17)B (18)D (19)A (20)C
(21)C (22)B (23)B (24)D (25)A (26)C (27)C (28)D (29)C (30)C
(31)A (32)C (33)B (34)C (35)B (36)B (37)B (38)C (39)B (40)C
(41)A (42)D (43)A (44)D (45)A (46)B (47)C (48)C (49)B (50)B

二、填空题(每空2分，共40分)
(1)字节

(2)AUTOEXEC.BAT

(3)COPY *.TXT PRN

(4)拖动

(5)图标或按钮

(6)2.1

(7)6.6

(8)Malloc (11) 或malloc(sizeof(char)*11)

(9)Hello

(10) passwarm

(11) void (*p)() 或void(*p)(int*, int*)

(12)0

(13)10

(14)struct st 或ex

(15) “bi.dat”,“w”或“bi.dat”,“wt”或“bi.dat”,“w+t”

(16) 5

(17) 4

(18) sp=j

(19) cx[i][p]

(20) LineMax(x)


01年9月二级C语言笔试试题

2001年9月二级C语言笔试试题

一、选择题((1)-(40)题每题1分,(41)-(50)题每题2分,共60分)
下列各题A) 、B)、C)、D)四个选项中，只有一个选项是正确的，请将正确的选项涂写在答题卡相应位置上，答在试卷上不得分。
(l) 在计算机系统中，一个字节的二进制位数为（　）。
A) 16　　 B) 8 　　　　C) 4 　　　　D) 由 CPU的型号决定

   (2) 存储 16×16点阵的一个汉字信息，需要的字节数为（　）。
A) 32　　 B) 64　　　 C) 128　　　 D) 256

   (3) 英文大写字母B的ASCII码为42H，英文小写字母b的ASCII码为（　）。
A) 43H　　 B) 84H 　　C) 74H　　　 D) 62H

   (4) 下列计算机语言中，CPU能直接识别的是（　）。
A) 自然语言 　　　B) 高级语言　　 C) 汇编语言 　　D)机器语言

   (5) 在计算机领域中，所谓“裸机”是指（　）。
A) 单片机　　　　　　　　　　　 B) 单板机
C) 不安装任何软件的计算机 　　　D) 只安装操作系统的计算机

   (6) 下列带有通配符的文件名中，能代表文件ABCDEF.DAT的是（　）。
A) A*.* 　　　B) ?F.*　　　 C) *.？　　　 D) AB?.*

   (7) 下列DOS命令中，执行时不会发生错误的是（　）。
A) TYPE *.TXT 　　　　　　　　B) DIR *.TXT
C) REN A.TXT A:b.TXT　　　　　D) COPY *.TXT>CON
 
   (8) 设当前盘为C盘，C盘的当前目录为\A\B\C。下列DOS 命令中能正确执行的是（　）。
A) MD \ 　　　B) MD A:\ 　　　C) MD \A\B 　　D) CD C:

   (9) 为了将C:USER中的文件FILE.TXT同名复制到A盘根目录下，下列DOS命令中能正确执行的是（　）。
A) TYPE C:\USER\FILE.TXT > A:\FILE.TXT
B) TYPE C:\USER\FILE.TXT A:\FILE.TXT
C) COPY C:\USER\FILE.TXT > A:\FILE.TXT
D) COPY C:\USER\FILE.TXT

   (10) 在Windows下，当一个应用程序窗口被最小化后，该应用程序（　）。
A) 终止运行　　 B) 暂停运行　　 C) 继续在后台运行 　　D) 继续在前台运行

   (11) 在Windows环境下，下列操作中与剪贴板无关的是（　）。
A) 剪切 　　B) 复制 　　C) 粘贴 　　D) 删除

   (12) 在Windows环境下，实现窗口移动的操作是（　）。
A) 用鼠标拖动窗口中的标题栏　　　 B) 用鼠标拖动窗口中的控制按钮
C) 用鼠标拖动窗口中的边框　　　　 D) 用鼠标拖动窗口中的任何部位

   (13) 一台计算机连入计算机网络后，该计算机（　）。
A) 运行速度会加快 　　　　　B) 可以共享网络中的资源
C) 内存容量变大　　　　　　 D) 运行精度会提高

   (14) 不能作为计算机网络中传输介质的是（　）。
A) 微波　　 B) 光纤 　　C) 光盘 　　D) 双绞线

   (15) 下列各项中，不属于多媒体硬件的是（　）。
A) 声卡　　 B) 光盘驱动器　　 C) 显示器　　 D) 多媒体制作工具

   (16) 在C语言中，合法的长整型常数是（　）。
A) OL 　　　B) 4962710 　　　C) 324562& 　　　D) 216D

   (17) 以下有4组用户标识符，其中合法的一组是（　）。
A) For　　　 B) 4d　　　　 C) f2_G3 　　　D) WORD
-sub DO IF void
Case Size abc define

   (18) 以下选项中合法的字符常量是（　）。
A)“B”　　 B) ‘\010’　　 C) 68 　　D) D

   (19) 假定x和y为 double型，则表达式x=2,y=x+3/2的值是（　）。
A) 3.500000 　　B) 3　　 C) 2.000000　　 D) 3.000000

   (20) 以下合法的赋值语句是（　）。
A) x=y=100　　 B) d--;　　 C) x+y; 　　D) c=int(a+b);

   (21) 设正x、y均为整型变量，且x=10 y=3，则以下语句的输出结果是（　）。
　pprintf(”%d,%d\n”,x--,--y);
A) 10,3 　　B) 9.3 　　C) 9.2 　　D)10.2

   (22) x、y、z被定义为int型变量，若从键盘给x、y、z输入数据，正确的输入语句是
A) INPUT x、y、z;　　　　　　　 B) scanf(“%d%d%d”,&x,&y,&z);
C) scanf(“%d%d%d”,x,y,z);　　 D) read(“%d%d%d”,&x,&y,&z);

   (23) 以下程序的输出结果是（　）。
main()
{ int a=3;
　printf(“%d\n”,(a+a-=a*a) );
}
A) –6 　　B)12　　 C) 0　　 D) -12

   (24) 设 a、b、C、d、m、n均为 int型变量，且 a=5、b=6、c=7、d=8、m=2、n=2，则逻辑表达式 (m=a>b)&&(n=c>d)运算后，n的值位为（　）。
A) 0 　　　B) 1 　　　C)2 　　　D) 3

   (25) 阅读以下程序：
main()
{ int x;
scanf(“%d”,&x);
if(x--<5) printf(“%d”’x);
else printf(“%d”’x++);
}
程序运行后，如果从键盘上输人5，则输出结果是（　）。
A)3　　　 B) 4 　　C) 5 　　　D) 6

   (26) 假定w、x、y、z、m均为int型变量，有如下程序段：
w=1; x=2; y=3; z=4;
m=(w则该程序运行后，m的值是（　）。
A) 4　　 B) 3　　 C) 2 　　D) 2

   (27) t为int类型，进人下面的循环之前，t的值为0
while( t=l )
{ …… }
则以下叙述中正确的是（　）。
A) 循环控制表达式的值为0　　　　 B) 循环控制表达式的值为1
C) 循环控制表达式不合法　　　　　D) 以上说法都不对

   (28) 以下程序的输出结果是（　）。
main()
{ int num= 0;
while(num<=2)
{ num++; printf(“%d\n”,num);
}
A)1 　　B) 1　　 C)1　　 D) l
　2 　　　　2　　　 2
　3 　　　　3
　4

   (29) 以下各选项企图说明一种新的类型名，其中正确的是（　）。
A) typedef v1 int; 　　　B) typedef v2=int;
C) typedefv1 int v3;　　 D) typedef v4: int;

   (30) 在调用函数时，如果实参是简单变量，它与对应形参之间的数据传递方式是（　）。
A) 地址传递　　　　　　　　　　　　　　　 B) 单向值传递
C) 由实参传给形参，再由形参传回实参　　　 D) 传递方式由用户指定

   (31) 以下函数值的类型是（　）。
fun ( float x )
{ float y;
y= 3*x-4;
return y;
}
A) int　　　 B) 不确定　　　 C) void 　　　D) float
(32 ) 设有以下函数：
f ( int a)
{ int b=0;
　static int c = 3;
　b++; c++;
　return(a+b+c);
}
如果在下面的程序中调用该函数，则输出结果是（　）。
main()
{ int a = 2, i;
　for(i=0;i<3;i++) printf(“%d\n”,f(a));
}
A)7　　 B) 7 　　C) 7　　 D)7
　8　　　　9 　　　10　　　 7
　9 　　　11 　　　13 　　　7

   (33) 以下程序的输出结果是
main()
{ char c=’z’;
　printf(“%c”,c-25);
}
A) a　　 B) Z 　　C) z-25 　　D) y

   (34) 以下选项中，非法的字符常量是（　）。
A) ‘\t’　　 B) ‘\17’ 　　C）“n” 　　D) ‘\xaa’

   (35) 若有说明：int i, j=2，*p=&i;，则能完成i=j赋值功能的语句是（　）。
A) i=*p; 　　B) p*=*&j;　　 C) i=&j;　　 D) i=**p;

   (36) 以下定义语句中，错误的是（　）。
A) int a[]={1,2};　　　　　 B) char *a[3];
C) char s[10]=”test”; 　　D) int n=5,a[n];

   (37) 假定int类型变量占用两个字节，其有定义：int x[10]={0,2,4};，则数组x在内存中所占字节数是（　）。
A) 3 　　　B) 6 　　　C) 10 　　　D) 20

   (38) 以下程序的输出结果是（　）。
main()
{ int i, a[10];
for(i=9;i>=0;i--) a[i]=10-i;
printf(“%d%d%d”,a[2],a[5],a[8]);
}
A) 258　　　 B) 741 　　　C) 852　　　 D) 369

   (39) 以下数组定义中不正确的是（　）。
A) int a[2][3];
B) int b[][3]={0,1,2,3};
C) int c[100][100]={0};
D) int d[3][]={{1,2},{1,2,3},{1,2,3,4}};

   (40) 以下程序的输出结果是（　）。
main()
{ int a[4][4]={{1,3,5},{2,4,6},{3,5,7}};
printf(“%d%d%d%d\n”,a[0][3],a[1][2],a[2][1],a[3][0];
}
A) 0650　　　 B) 1470 　　　C) 5430 　　D) 输出值不定

   (41) 以下程序的输出结果是（　）。
main()
{ char st[20]= “hello\0\t\\\”;
　　printf(%d %d \n”,strlen(st),sizeof(st));
}
A) 9 9　　 B) 5 20　　 C) 13 20 　　D) 20 20

   (42) 以下选项中，不能正确赋值的是（　）。
A) char s1[10];s1=“Ctest”;
B) char s2[]={‘C’, ‘t’, ‘e’, ‘s’, ‘t’};
C) char s3[20]=“Ctest”;
D) char *s4=“Ctest\n”

   (43) 以下程序的输出结果是（　）。
amovep(int p, int (a)[3],int n)
{ int i, j;
　for( i=0;i<;i++)
　for(j=0;j}
main()
{ int *p,a[3][3]={{1,3,5},{2,4,6}};
　p=(int *)malloc(100);
　amovep(p,a,3);
　printf(“%d %d \n”,p[2],p[5]);free(p);
}
A) 56　　 B) 25 　　C) 34 　　D) 程序错误

   (44) 以下程序的输出结果是（　）。
struct HAR
{ int x, y; struct HAR *p;} h[2];
main()
{ h[0],x=1;h[0];y=2;
　　h[1],x=3;h[1];y=4;
　　h[0],p=&h[1],p=h;
　　printf(“%d %d \n”,(h[0],p)->x,(h[1],p)->y);
}
A) 12 　　B) 23　　 C) 14 　　D) 32

   (45) 以下程序的输出结果是（　）。
main()
{ int a, b;
　for(a=1, b=1; a<=100; a++)
{ if(b>=10) break;
　　if (b%3= =1)
{ b+=3; continue; }
}
　printf(“%d\n”,a);
}
A) 101　　 B) 6 　　C) 5 　　D) 4

   (46) 以下程序的输出结果是（　）。
union myun
{ struct
{ int x, y, z; } u;
　int k;
} a;
main()
{ a.u.x=4; a.u.y=5; a.u.z=6;
　a.k=0;
　printf(%d\n”,a.u.x);
}
A) 4 　　B) 5　　 C) 6　　 D) 0

   (47) 以下程序的输出结果是（　）。
int a, b;
void fun()
{ a=100; b=200; }
main()
{ int a=5, b=7;
fun();
printf(“%d％d \n”, a,b);
}
A) 100200　　 B) 57　　 C) 200100　　 D) 75

   (48) 以下程序的输出结果是（　）。
#define M(x,y,z) x*y+z
main()
{ int a=1,b=2, c=3;
printf(“%d\n”, M(a+b,b+c, c+a));
}
A) 19 　　B) 17　　 C) 15　　 D) 12

   (49) 整型变量x和y的值相等、且为非0值，则以下选项中，结果为零的表达式是（　）。
A) x || y 　　B) x | y　　 C) x & y　　 D) x ^ y

   (50) 下面的程序执行后，文件testt.t中的内容是（　）。
#include
void fun(char *fname.,char *st)
{ FILE *myf; int i;
　myf=fopen(fname,“w” );
　for(i=0;ifclose(myf);
}
main()
{ fun(“test”,“new world”; fun(“test”,“hello,”0;)
A）hello， 　　B）new worldhello，　　 C）new world 　　D） hello, rld


  二、填空题(每空2分，共40分)
 请将每一个空的正确答案写在答题卡【l】至【20】序号的横线上，答在试卷上不得分。
（l）为了将当前盘当前目录中的所有文本文件（扩展名为.TXT）的内容打印输出，正确的单条DOS命令为 【l】 。

   （2）设当前盘为C盘。为了在A盘的当前自录\USER下建立一个新的子目录X，正确的DOS命令为 【2】 。

   （3）在 XCOPY、COPY、TIME三个 DOS命令中，属于外部命令的是 【3】 。

   （4）在32位的计算机中，一个字长等于【4】个字节。

   （5）计算机网络分为局域网和广域网，因特网属于 【5】 。

   （6）语句：x++;?++x; x=x+1;?x=l+x; ，执行后都使变量x中的值增1，请写出一条同一功能的赋值语句（不得与列举的相同） 【6】 。

   （7）设y是int型变量，请写出判断y为奇效的关系表达 【7】 。

   （8）以下程序运行后的输出结果是 【8】 。
main()
{ int i=10, j=0;
do
{ j=j+i; i-;
　while(i>2);
　printf(“%d\n”,j);
}

   (9) 设有以下程序:
main()
{ int n1,n2;
　scanf(“%d”,&n2);
　while(n2!=0)
{ n1=n2%10;
　n2=n2/10;
　printf(“%d”,n1);
}
}
程序运行后，如果从键盘上输入1298；则输出结果为 【9】 。

   (10) 以下程序输出的最后一个值是【10】 。
int ff(int n)
{ static int f=l;
　f=f*n;
　return f;
}
main()
{ int i;
　for(I=1;I<=5;I++ printf(“%d\n”,ff(i));
}

   (11) 以下函数的功能是：求x的y次方，请填空。
double fun( double x, int y)
{ int i;
　double z;
　for(i=1, z=x; ireturn z;
}

   (12) 设有以下程序：
main()
{ int a, b, k=4, m=6, *p1=&k, *p2=&m;
　a=pl==&m;
　b=(*p1)／(*p2)+7;
　printf(“a=%d\n”,a);
　printf(“b=%d\n”,b);
}
执行该程序后，a的值为【12】 ，b的值为【13】 。

   (13) 若已定义：int a[10], i;，以下fun函数的功能是：在第一个循环中给前10个数组元素依次赋1、2、3、4、5、6、7、8、9、10；在第二个循环中使a数组前10个元素中的值对称折叠，变成1、2、3、4、5、5、4、3、2、1。请填空。
fun( int a[ ])
{ int i;
　for(i=1; i<=10; i++) 【14】=i;
　for(i=0; i<5; i++) 【15】=a[i];
}

   (14) 以下程序运行后的输出结果是 【16】 。
main()
{ char s[ ]=“9876”,*p;
　for ( p=s ; p }

   (15) 若有定义语句： char s[100],d[100]; int j=0, i=0;，且s中已赋字符串，请填空以实现字符串拷贝。（注：不得使用逗号表达式）
while([i]){ d[j]= 【17】;j++;}
d[j]=0;

   (16) 以下程序段用于构成一个简单的单向链表，请填空。
struct STRU
{ int x, y ;
　float rate;
　【18】 p;
} a, b;
　a.x=0; a.y=0; a.rate=0; a.p=&b;
　b.x=0; b.y=0; b.rate=0; b.p=NULL;

   (l7) 若有如下结构体说明：
struct STRU
{ int a, b ; char c; double d:
　struct STRU p1,p2;
};
请填空，以完成对t数组的定义，t数组的每个元素为该结构体类型
【19】 t[20];

   (18) 以下程序段打开文件后，先利用 fseek函数将文件位置指针定位在文件末尾，然后调用ftell函数返回当前文件位置指针的具体位置，从而确定文件长度，请填空。
FILE *myf; ling f1;
myf= 【20】 (“test.t”,“rb”);
fseek(myf,0,SEEK_END); f1=ftel(myf);
fclose(myf);
printf(“%d\n”,f1);


01年9月二级C语言笔试试题答案

2001年9月二级C语言笔试试题答案

选择题

1 B 2 A 3 D 4 D 5 C

6 A 7 B 8 D 9 A 10 C

11 D 12 A 13 B 14 C 15 D

16 A 17 C 18 B 19 D 20 B

21 D 22 B 23 D 24 C 25 B

26 D 27 B 28 B 29 C 30 B

31 A 32 A 33 A 34 C 35 B

36 D 37 D 38 C 39 D 40 A

41 B 42 A 43 A 44 D 45 D

46 D 47 B 48 D 49 D 50 A

填空题

1 COPY *.TXT PRN 或XCOPY *.TXT PRN

2 MD A：\USER\X MD A:X

3 XCOPY

4 4

5 广域网

6 X+=1

7 (Y%2)==1

8 52

9 8921

10 120

11 x

12 0

13 7

14 a[i-1]

15 a[9-i]

16 9876 876

17 s[i++]

18 struct STRU *

19 struct STRU

20 fopen


02年4月二级C语言笔试试题

2002年4月二级C语言笔试试题

一、选择题（（1）—（40）题每小题1分，（41）—（50）题每小题2分，共和60分）
下列各题A）、B）、C）、D）四个选项中，只有一个选项是正确的，请将正确选项涂写在答题卡相应位置上，答在试卷上不得分。
(1) 在计算机中,一个字长的二进制位数是（　）。
A) 8 　　　B) 16　　　　　 C) 32 　　　D) 随CPU的型号而定

   (2) 计算机网络的突出优点是（　）。
A) 速度快 　B) 资源共享　 C) 精度高 　　D) 容量大

   (3) 计算机网络能传送的信息是:（　）。
A) 所有的多媒体信息　　　　　 B) 只有文本信息
C) 除声音外的所有信息 　　　　D) 文本和图像信息

   (4) 切断计算机电源后,下列存储器中的信息会丢失的是:（　）。
A) RAM 　　　B) ROM　　　 C) 软盘 　　　D) 硬盘

   (5) 十进制数127转换成二进制数是（　）。
A) 11111111 　　B) 01111111　　 C) 10000000　　　 D) 11111110

   (6) 要想打印存放在当前盘当前目录上所有扩展名为.TXT 的文件内容, 应该使用的DOS命令为（　）。
A) DIR *.TXT>PRN　　　　B) TYPE *.TXT>PRN
C) COPY *.TXT PRN 　　　D) COPY *.TXT>PRN

   (7) 将当前盘当前目录及其子目录中的全部文件 (总量不足1.2MB) 复制到一张空的A盘的根目录下,应该使用的DOS命令为（　）。
A) XCOPY *.*A:\ /M 　　　B) XCOPY *.*A:\ /S
C) XCOPY *.*A:\ /P 　　　D) XCOPY *.*A:\ /A

   (8) 在C盘根目录下执行PROMPT $p$g命令之后,DOS的提示符变为（　）。
A) C:> 　　B) C:\>　　 C) C> 　　D) C:\

   (9) DOS命令 "COPY CON DISP"中的CON代表（　）。
A) 子目录 　　B) 磁盘文件　　 C) 键盘　　D) 显示器

   (10) 结构化程序设计所规定的三种基本控制结构是（　）。
A) 输入、处理、输出 　　B) 树形、网形、环形
C) 顺序、选择、循环 　　D) 主程序、子程序、函数

   (11) 要把高级语言编写的源程序转换为目标程序,需要使用（　）。
A) 编辑程序　　 B) 驱动程序　　 C) 诊断程序 　　D) 编译程序

   (12) 英文小写字母d的ASCII码为100,英文大写字母D的ASCII码为（　）。
A) 50　　 B) 66　　 C) 52　　　 D) 68

   (13) Windows环境下,PrintScreen键的作用是（　）。
A) 复制当前窗口到剪贴板　　 B) 打印当前窗口的内容
C) 复制屏幕到剪贴板 　　　　D) 打印屏幕内容

   (14) 在Windows环境下,为了终止应用程序的运行,应（　）。
A) 关闭该应用程序窗口 　　　　　　B) 最小化该应用程序窗口
C) 双击该应用程序窗口的标题栏 　　D) 将该应用程序窗口移出屏幕

   (15) 下列各带有通配符的文件名中,能代表文件XYZ.TXT的是（　）。
A) *Z.?　　 B) X*.* 　　C) ?Z,TXT　　 D) ?.?

   (16) 若有定义：int a=8，b=5，C；，执行语句C=a/b+0.4;后，c的值为（　）。
A) 1.4 　　B) 1　　 C) 2.0　　 D) 2

   (17) 若变量a是int类型，并执行了语句：a=‘A'+1.6；，则正确的叙述是（　）。
A) a的值是字符C 　　　　　　　　B) a的值是浮点型
C) 不允许字符型和浮点型相加 　　D) a的值是字符‘A’的ASCII值加上1。

   (18) 以下程序段的输出结果是（　）。
int a=1234；
printf("%2d\n",a);
A) 12 　　B) 34　　 C) 1234　　 D) 提示出错、无结果

   (19) 以下选项中不属于C语言的类型的是
A) signed short imt 　　　B) unsigned long int
C) unsigned int 　　　　　D) long short

   (20) 若有说明语句：int a,b,c,*d=&c；，则能正确从键盘读入三个整数分别赋给变量a、b、c的语句是（　）。
A) scanf("%d%d%d",&a,&b,d);　　　B) scanf("%d%d%d",&a,&b,&d);
C) scanf("%d%d%d",a,b,d); 　　　　D) scanf("%d%d%d",a,b,*d);

   (21) 在16位C编译系统上，若定义long a; ，则能给a赋40000的正确语句是（　）。
A) a=20000+20000； 　　　B) a=4000*10；
C) a=30000+10000;　　　　D) a=4000L*10L;

   (22) 以下叙述正确的是（　）。
A) 可以把define和if定义为用户标识符
B) 可以把define定义为用户标识符，但不能把if定义为用户标识符
C) 可以把if定义为用户标识符，但不能把define定义为用户标识符
D) define和if都不能定义为用户标识符

   (23) 若定义：int a=511,*b=&a;, 则printf("%d\n",*b);的输出结果为（　）。
A) 无确定值　　 B) a的地址 　　C) 512 　　D) 511

   (24) 以下程序的输出结果是（　）。
main()
{ int a=5,b=4,c=6,d;
　printf("%d\n",d=a>b?(a>c?a:c):(b));
}
A) 5 　　B) 4 　　C) 6 　　D) 不确定

   (25) 以下程序中，while循环的循环次数是（　）。
main()
{ int i=0;
　while(i<10)
{ if(i<1) continue;
　if(I==5) break;
　 i++;
}
　......
}
A) 1　　　 B) 10
C) 6 　　　D) 死循环，不能确定次数

   (26) 以下程序的输出结果是（　）。
main()
{ int a=0,i;
for(i=;i<5;i++)
{ switch(i)
{ case 0:
case 3:a+=2;
case 1:
case 2:a+=3;
default:a+=5;
}
}
printf("%d\n",a);
}
A) 31　　 B) 13　　　 C) 10　　　 D) 20

   (27) 以下程序的输出结果是（　）。
main()
{ int a=4,b=5,c=0,d;
d=!a&&!b||!c;
printf("%d\n",d);
}
A) 1 　　B) 0　　 C) 非0的数 　　D) -1

   (28) 以下程序的输出结果是（　）。
#include
main()
{ int i=0,a=0;
　while(i<20)
{ for(;;)
{ if((i%10)==0) break;
　else i--;
}
　i+=11; a+=i;
}
　printh("%d\n",a);
}
 A) 21 　　B) 32 　　C) 33　　 D) 11

   (29) 以下程序的输出结果是（　）。
char cchar(char ch)
{
　if(ch>=‘A’&&ch<=‘Z') ch=ch-‘A'+‘a';
　return ch;
}
main()
{ char s[]="ABC+abc=defDEF",*p=s;
　while(*p)
{ *p=cchar(*p);
　p++;
}
　printf("%s\n",s);
}
A) abc+ABC=DEFdef　　 B) abc+abc=defdef
C) abcaABCDEFdef　　　D) abcabcdefdef

   (30) 以下程序的输出结果是（　）。
int f()
{ static int i=0;
int s=1;
s+=i; i++;
return s;
}
 main()
{ int i,a=0;
for(i=0;i<5;i++) a+=f();
printf("%d\n",a);
}
A) 20　　 B) 24　　 C) 25 　　D) 15

   (31) 以下程序段的输出结果是（　）。
char s[]="\\141\141abc\t";
printf ("%d\n",strlen(s));
A) 9　　　 B) 12　　　 C) 13　　　 D) 14

   (32) 若有以下程序
#include
void f(int n);
main()
{ void f(int n);
 　f(5);
}
　void f(int n)
{ printf("%d\n",n); }
则以下叙述中不正确的是（　）。
A) 若只在主函数中对函数f进行说明，则只能在主函数中正确调用函数f
B) 若在主函数前对函数f进行说明，则在主函数和其后的其它函数中都可以正确调用函数f
C) 对于以上程序，编译时系统会提示出错信息：提示对对f函数重复说明
D) 函数f无返回值，所以可用void将其类型定义为无值型

   (33) 以下程序调用findmax函数返回数组中的最大值（　）。
findmax(int *a,int n)
{ int *p,*s;
　for(p=a,s=a; p-aif ( ) s=p;
　return(*s);
}
main()
{ int x[5]={12,21,13,6,18};
　printf("%d\n",findmax(x,5));
}
在下划线处应填入的是
A) p>s　　 B) *p>*s 　　C) a[p]>a[s]　　 D) p-a>p-s

   (34) 以下程序的输出结果是
main()
{ char cf[3][5]={"AAAA","BBB","CC"};
　printf("\"%s\"\n",ch[1]);
}
A) "AAAA" 　　B) "BBB" 　　C) "BBBCC" 　　D) "CC"

   (35) 在C语言中，形参的缺省存储类是（　）。
A) auto　　 B) register　　 C) static　　 D) extern

   (36) 若指针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));

   (37) 以下程序的输出结果是（　）。
main()
{ char x=040;
 　printf("%0\n",x<<1);
}
A) 100　　 B) 80 　　C) 64 　　D) 32

   (38) 若要打开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")　　　C) fopen("A:\\user\\abc.txt","w")

   (39) 以下不能正确进行字符串赋初值的语句是（　）。
A) char str[5]="good!"; B) char str[]="good!";
C) char *str="good!"; D) char str[5]={‘g',‘o',‘o',‘d'};

   (40) 若有下面的说明和定义：
struct test
{ int ml; char m2; float m3;
union uu {char ul[5]; int u2[2];} ua;
} myaa;
则sizeof(struct test )的值是（　）。
A) 12 B) 16 C) 14 D) 9

   (41) 若有定义：int aa[ 8]；。则以下表达式中不能代表数组元aa[1]的地址的是（　）。
A) &aa[0]+1 　　B) &aa[1]　　 C) &aa[0]++ 　　D) aa+1

   (42) 以下程序的输出结果是（　）。
f(int b[],int m,int n)
{ int 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

   (43) 若有以下定义和语句:
int s[4][5],(*ps)[5];
ps=s;
则对s数组元素的正确引用形式是（　）。
A) ps+1 　　B) *(ps+3)　　 C) ps[0][2] 　　D) *(ps+1)+3

   (44) 以下程序的输出结果是（　）。
main()
{ int b[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1;
 　for(i=0;i<3;i++)
 　for(j=i;j<=i;j++) t=t+b[i][b[j][j]];
　printf("%d\n",t);
}
 A) 3 　　B) 4　　 C) 1 　　D) 9

   (45) 以下程序的输出结果是（　）。
#include
#include
main()
{ char b1[8]="abcdefg",b2[8],*pb=b1+3;
while (--pb>=b1) strcpy(b2,pb);
printf("%d\n",strlen(b2));
}
A) 8 　　B) 3 　　C) 1　　 D) 7

   (46) 在说明语句：int *f();中,标识符f代表的是（　）。
A) 一个用于指向整型数据的指针变量
B) 一个用于指向一维数组的行指针
C) 一个用于指向函数的指针变量
D) 一个返回值为指针型的函数名

   (47) 不合法的main函数命令行参数表示形式是（　）。
A) main(int a,char *c[]) 　　　　B) main(int arc,char **arv)
C) main(int argc,char *argv)　　 D) main(int argv,char *argc[])

   (48) 以下程序的输出的结果是（　）。
int x=3;
main()
{ int i;
　for (i=1;i}
　ncre()
{ staic int x=1;
　x*=x+1;
　printf(" %d",x);
}
A) 3 3 　　B) 2 2　　 C) 2 6 　　D) 2 5

   (49) 若以下定义:
struct link
{ int data;
struck link *next;
}a,b,c,*p,*q;
且变量a和b之间已有如下图所示的链表结构:
a b
data next data next
┌──┬──┐ ┌──┬──┐
│ 5 │ ┼──→│ 9　│ \0│
└──┴──┘ └──┴──┘
↑p
c
data next
┌──┬──┐
│ 7　│　　│
└──┴──┘
↑q
指针p指向变量a,q指向变量c。则能够把c插入到a和b 之间并形成新的链表的语句组是:（　）。
A) a.next=c; c.next=b; 　　　　　　　B) p.next=q; q.next=p.next;
C) p->next=&c; q->next=p->next; 　　D) (*p).next=q; (*q).next=&b;

   (50) 设有以下说明语句
typedef struct
{ int n;
　char ch[8];
}PER;
则下面叙述中正确的是（　）。
A) PER 是结构体变量名 B) PER是结构体类型名
C) typedef struct 是结构体类型 D) struct 是结构体类型名


    二、填空题(每空2分，共40分)
请将每一个空的正确答案写在答案卡上，答在试卷上不得分。
(1) 为了要将当前盘目录中的可执行程序ABC.EXE的输出结果存放到当前盘当前目录中的文件OUT.TXT中,则应使用的DOS命令为【1】 。

   (2) 计算机网络分为广域网和局域网,因特网属于【2】 。

   (3) 要想在当前目录下方便地执行C盘\UCDOS目录中的程序,就应该先执行预设搜索路径的命令,该DOS命令为【3】 。

   (4) 要查看当前目录中扩展名为.DAT的所有文件目录,应该使用的DOS 命令为【4】 。

   (5) 在Windows环境下,当进行复制操作时,其复制的内容将存放在【5】中

   (6) 若从键盘输入58,则以下程序输出的结果是 【6】 。
main()
{ int a;
　scanf("%d",&a);
　if(a>50) printf("%d",a);
　if(a>40) printf("%d",a);
　if(a>30) printf("%d",a);
}

   (7) 以下程序的输出结果是【7】 。
main()
{ int a=177;
　printf("%o\n",a);
}

   (8) 以下程序的输出结果是【8】 。
 main()
{ int a=0
　a+=(a=8);
　printf("%d\n",a);
}

   (9) 以下程序输出的结果是【9】 。
main()
{ int a=5,b=4,c=3,d;
　d=(a>b>c);
　printf("%d\n",d);
}

   (10) 以下定义的结构体类型拟包含两个成员,其中成员变量info用来存入整形数据;成员变量link是指向自身结构体的指针.请将定义补充完整。
struct node
 {int info;
 【10】 link;
}

   (11) 以下程序的输出结果是【11】 。
main()
 {int s,i;
 for(s=0,i=1;i<3;i++,s+=i);
 printf("%d\n",s);
}

   (12) 以下程序的输出结果是【12】 。
main()
 { char *p="abcdefgh",*r;
 long *q;
 q=(long*)p;
 q++;
 r=(char*)q;
 printf("%s\n",r);
}

   (13) 以下程序的输出结果是【13】 。
main()
{ char s[]="abcdef";
 s[3]=‘\0';
 printf("%s\n",s);
}

   (14) 以下程序的输出结果是【14】 。
main()
{ int x=0;
　sub(&x,8,1);
　printf("%d\n",x);
}
sub(int *a,int n,int k)
{ if(k<=n) sub(a,n/2,2*k);
　*a+=k;
}

   (15) 设有如下宏定义
#define MYSWAP(z,x,y) {z=x; x=y; y=z;}
以下程序段通过宏调用实现变量a、b内容交换,请填空。
float a=5,b=16,c;
MYSWAP( 【15】 ,a,b);

   (16) 以下程序用来统计文件中字符个数。请填空。
 #include "stdio.h"
 main()
 { FILE *fp; long num=0L;
　 if((fp=fopen("fname.dat","r"))==NULL)
 { pirntf("Open error\n"); exit(0);}
 while( 【16】 )
 { fgetc(fp); num++;}
　 printf("num=%1d\n",num-1);
　 fclose(fp);
 }

   (17) 以下程序中,select 函数的功能是：在N行M列的二维数组中,选出一个最大值作为函数值返回,并通过形参传回此最大值所在的行下标。请填空。
#define N 3
#define M 3
 select(int a[N][M],int *n)
 { int i,j,row=1,colum=1;
　for(i=0;ifor(j=0;jif(a[i][j]>a[row][colum]){row=i;colum=j;}
　*n= 【17】;
　return 【18】;
 }
 main()
 {int a[N][M]={9,11,23,6,1,15,9,17,20},max,n;
　 max=select(a,&n);
　 printf("max=%d,line=%d\n",max,n);
 }

   (18) mystrlen函数的功能是计算str所指字符串的长度,并作为函数值返回。请填空。
int mystrlen(char *str)
{ int i;
　for(i=0; 【19】!=‘\0';i++);
　return(【20】);
}


02年4月二级C语言笔试试题答案

2002年4月二级C语言笔试试题答案

一、选择题（⑴-(40)题每题1分，(41)-(50)题每题2分，其60分）
(1) D (2) B (3) A (4) A (5) B
(6) C (7) B (8) B (9) C (10) C
(11) D (12) D (13) C (14) A (15) B
(16) B (17) D (18) C (19) D (20) A
(21) D (22) B (23) D (24) C (25) D
(26) A (27) A (28) B (29) B (30) D
(31) A (32) C (33) B (34) B (35) A
(36) A (37) A (38) B (39) A (40) A
(41) C (42) A (43) C (44) B (45) D
(46) D (47) C (48) C (49) C (50) B


    二、填空题答案（每空2分，共40分）
 (1) 【1】 ABC >OUT.TXT 或者 ABC.EXE>OUT.TXT

     (2) 【2】 广域网

     (3) 【3】 PATH C:\UCDOS 或其它等效命令

     (4) 【4】 DIR *.DAT 或 DIR *.DAT/P 或 DIR *.DAT/W 或带其它参数也可

     (5) 【5】 剪贴板

     (6) 【6】 585858

     (7) 【7】 261

     (8) 【8】 16

     (9) 【9】 0

     (10) 【10】 struct node *

     (11) 【11】 5

     (12) 【12】 efgh

     (13) 【13】 abc

     (14) 【14】 7

     (15) 【15】 c

     (16) 【16】 !feof(fp)

     (17) 【17】 row

     (18) 【18】 a[row][colum]

     (19) 【19】 *(str+i)str[i]

     (20) 【20】 i


02年9月二级C语言笔试试题

2002年9月二级C语言笔试试题

一、选择题（（1）—（40）每题1分，（41）—（50）每题2分，共60分）
下列各题A）、B）、C）、D）四个选项中，只有一个选项是正确的，请将正确选项涂写在答题卡相应位置上，答在试卷上不得分。

(1) 在32位计算机中，一个字长所占的字节数为（　）。
  A) 1
  B) 2
  C) 4
  D) 8

(2) 与十进制数511等值的十六进制数为（　）。
  A) 1FF
  B) 2FF
  C) 1FE
  D) 2FE

(3) 能将高级语言编写的源程序转换成目标程序的是（　）。
  A) 编程程序
  B) 编译程序
  C) 解释程序
  D) 链接程序

(4) 在计算机系统中，存储一个汉字的国标码所需要的字节数为（　）。
  A) 1
  B) 2
  C) 3
  D) 4

(5) 下列带有通配符的文件名中，能表示文件ABC.TXT的是（　）。
  A) *BC.?
  B) A?.*
  C) ?BC.*
  D) ?.?

(6) 在多媒体计算机系统中，不能用以存储多媒体信息的是（　）。
  A) 光缆
  B) 软盘
  C) 硬盘
  D) 光盘

(7) DOS命令“COPY/？”的功能是（　）。
  A) 将当前盘当前目录中的所有文件复制到当前盘的根目录下
  B) 将当前盘当前目录中所有以单个字符命名的文件复制到当前盘的根目录下
  C) 以提示方式复制文件
  D) 显示COPY命令的帮助信息

(8) 在Windows环境下，若要将当前活动窗口存入剪贴板，则可以按（　）。
  A) Ctrl+PrintScreen键
  B) Ctrl+PrintScreen键
  C) Shift+PrintScreen键
  D) PrintScreen键

(9) 在Windows环境下，单击当前应用程序窗口中的“关闭”按钮，其功能是（　）。
  A) 将当前应用程序转为后台运行
  B) 退出Windows后再关机
  C) 退出Windows后重新启动计算机
  D) 终止当前应用程序的运行

(10) 在Windows环境中，粘贴按钮是（　）。
  A) ctrl+A
  B) ctrl+C
  C) ctrl+Ｘ
  D) ctrl+Ｖ

(11) 以下叙述中正确的是（　）。
  A) 构成C程序的基本单位是函数
  B) 可以在一个函数中定义另一个函数
  C) main()函数必须放在其它函数之前
  D) 所有被调用的函数一定要在调用之前进行定义

(12) 以下选项中合法的实型常数是（　）。
  A) 5E2.0
  B) E-3
  C) .2E0
  D) 1.3E

(13) 以下选项中合法的用户标识符是（　）。
  A) long
  B) _2Test
  C) 3Dmax
  D) A.dat

(14) 已知大写字母A的ASCII码值是65，小写字母a的ASCII码是97，则用八进制表示的字符常量‘\101’是（　）。
  A) 字符A
  B）字符a
  C）字符e
  D）非法的常量

(15) 以下非法的赋值语句是（　）。
  A) n=(i=2,++i);
  B)j++;
  C) ++(i+1);
  D)x=j>0;

(16) 设a和b均为double型变量，且a=5.5、b=2.5，则表达式（int）a+b/b的值是（　）。
  A）6.500000
  B）6
  C) 5.500000
  D) 6.000000

(17) 已知i、j、k为int型变量，若从键盘输入：1，2，3<回车>，使i的值为1、j的值为2、k的值为3，以下选项中正确的输入语句是（　）。
  A) scanf(“%2d%2d%2d”,&i,&j,&k);
  B) scanf(“%d %d %d”,&i,&j,&k);
  C) scanf(“%d,%d,%d”,&i,&j,&k);
  D) scanf(“i=%d,j=%d,k=%d”,&i,&j,&k);

(18) 与数学式子 对应的C语言表达式是（　）。
  A) 3*x^n(2*x-1)
  B) 3*x**n(2*x-1)
  C) 3*pow(x,n)*(1/(2*x-1))
  D) 3*pow(n,x)/(2*x-1)

(19) 设有定义：long x=-123456L；，则以下能够正确输出变量x值的语句是（　）。
  A）printf(“x=%d\n”,x);
  B) printf(“x=%1d\n”,x);
  C）printf(“x=%8dL\n”,x);
  D）printf(“x=%LD\n”,x);

(20) 若有以下程序：
main()
{ int k=2,i=2,m;
m=(k+=i*=k);printf(“%d,%d\n”,m,i);
}
执行后的输出结果是（　）。
  A) 8，6
  B) 8，3
  C) 6，4
  D) 7，4

(21) 已有定义:int x=3,y=4,z=5；，则表达式!(x+y)+z-1 && y+z/2的值是（　）。
  A) ６
  B) ０
  C) ２
  D) １

(22) 有一函数， ,以下程序段中不能根据ｘ值正确计算出ｙ值的是（　）。
  A) if(x>0) y=1; 　　　　　B) y=0;
 else if(x==0) y=0; 　　　　if(x>0) y=1;
 else y=-1;　　　　　　　 else if(x<0) y=-1;
  C）y=0; 　　　　　　　 　D）if(x>=0)
 if(x>=0); 　　　　　　　 if(x>0) y=1;
 if(x>0) y=1 ; 　　　　　　else y=0;
 else y=-1;　　　　　　　　 else y=-1;

(23) 以下选项中，与k=n++完全等价的表达式是（　）。
  A) k=n,n=n+1
  B) n=n+1,k=n
  C) k=++n
  D) k+=n+1

(24) 以下程序的功能是：按顺序读入10名学生4门课程的成绩，计算出每位学生的平均分并输出，程序如下：
main()
{ int n,k;
float score ,sum,ave;
sum=0.0;
for(n=1;n<=10;n++)
{ for(k=1;k<=4;k++)
{ scanf(“%f”,&score); sum+=score;}
ave=sum/4.0;
printf(“NO%d:%f\n”,n,ave);
 }
}
上述程序运行后结果不正确，调试中发现有一条语句出现在程序中的位置不正确。这条语句是（　）。
  A) sum=0.0;
  B) sum+=score;
  C) ave=sun/4.0;
  D) printf(“NO%d:%f\n”,n,ave);

(25) 有以下程序段
int n=0,p;
do{scanf(“%d”,&p);n++;}while(p!=12345 &&n<3);
此处do—while循环的结束条件是（　）。
  A) P的值不等于12345并且n的值小于3
  B) P的值等于12345并且n的值大于等于3
  C) P的值不等于12345或者n的值小于3
  D) P的值等于12345或者n的值大于等于3

(26) 有以下程序
main()
{ int a=15,b=21,m=0;
switch(a%3)
{ case 0:m++;break;
case 1:m++;
 switch(b%2)
{ default:m++;
case 0:m++;break;
}
}
printf(“%d\n”,m);
}
 程序运行后的输出结果是（　）。
  A) 1
  B) 2
  C) 3
  D) 4

(27) C语言中，函数值类型的定义可以缺省，此时函数值的隐含类型是（　）。
  A) void
  B) int
  C) float
  D) double

(28) 若有说明：int n=2,*p=&n,*q=p;，则以下非法的赋值语句是（　）。
  A) p=q;
  B) *p=*q;
  C) n=*q;
  D) p=n;

(29) 有以下程序
float fun(int x,int y)
{ return(x+y); }
main()
{ int a=2,b=5,c=8;
printf(“%3.0f\n”,fun(int)fun(a+c,b),a-c));
}
程序运行后的输出结果是（　）。
  A) 编译出错
  B) 9
  C) 21
  D) 9.0

(30) 有以下程序
void fun(char *c,int d)
{ *c=*c+1;d=d+1;
printf(“%c,%c,”,*c,d);
}
main()
{ char a=’A’,b=’a’;
fun(&b,a); printf(“%c,%c\n”,a,b);
}
程序运行后的输出结果是（　）。
  A）B,a,B,a
  B) a,B,a,B
  C) A,b,A,b
  D) b,B,A,b

(31) 以下程序中函数sort的功能是对a所指数组中的数据进行由大到小的排序
void sort(int a[],int n)
    { int i,j,t;
      for(i=0;i
      for(j=i+1,j
      if(a[i]
      }
    main()
    { int aa[10]={1,2,3,4,5,6,7,8,9,10},i;
      sort(&aa[3],5);
      for(i=o;i<10;i++) print(“%d,”,aa[i]);
      printf(‘\n”);
      }
程序运行后的输出结果是（　）。
  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

(32) 有以下程序
int f(int n)
{ if (n==1) return 1;
else return f(n-1)+1;
}
main()
{ int i,j=0;
for(i=i;i<3;i++) j+=f(i);
printf(“%d\n”,j);
}
程序运行后的输出结果是（　）。
  A) 4
  B) 3
  C) 2
  D) 1

(33) 有以下程序
main()
{ char a[ ]={‘a’,‘b’,‘c’,‘d’, ‘e’, ‘f’, ‘g’,‘h’,‘\0’}; int i,j;
i=sizeof(a); j=strlen(a);
printf(“%d,%d\b”i,j);
}
程序运行后的输出结果是（　）。
  A）9，9
  B）8，9
  C）1，8
  D）9，8

(34) 以下程序中函数reverse的功能是将a所指数组中的内容进行逆置。
void reverse(int a[ ],int n)
{ int i,t;
for(i=0;i{ t=a[i]; a[i]=a[n-1-i];a[n-1-i]=t;}
}
main()
{ int b[10]={1,2,3,4,5,6,7,8,9,10}; int i,s=0;
 reverse(b,8);
 for(i=6;i<10;i++) s+=b[i];
 printf(“%d\n”,s);
}
程序运行后的输出结果是（　）。
  A) 22
  B) 10
  C) 34
  D) 30

(35) 有以下程序
main()
{ int aa[4][4]={{1,2,3,4},{5,6,7,8},{3,9,10,2},{4,2,9,6}};
int i,s=0
for(i=0;i<4;i++) s+=aa[i][1];
printf(“%d\n”,s);
}
程序运行后的输出结果是（　）。
  A) 11
  B) 19
  C) 13
  D) 20

(36) 有以下程序
#include
main()
{ char *p=“abcde\Ofghjik\0”;
printf(“%d\n”,strlen(p));
}
程序运行后的输出结果是（　）。
  A) 12
  B) 15
  C) 6
  D) 5

(37) 程序中头文件typel.h 的内容是：
#define N 5
#define M1 N*3
程序如下：
#define “type1.h”
#define M2 N*2
main()
{ int i;
i=M1+M2; printf(“%d\n”,i);
}
程序编译后运行的输出结果是：（　）。
  A) 10
  B) 20
  C) 25
  D) 30

(38) 有以下程序
#include
main()
{ FILE *fp; int i=20,j=30,k,n;
fp=fopen（“d1.dat”“w”）；
fprintf(fp,“%d\n”,i);fprintf(fp,“%d\n”j);
fclose(fp);
fp=fopen(“d1.dat”, “r”);
fp=fscanf(fp,“%d%d”，&k,&n); printf(“%d%d\n”,k,n);
fclose(fp);
}
程序运行后的输出结果是（　）。
  A) 20 30
  B) 20 50
  C) 30 50
  D) 30 20

(39) 以下叙述中错误的是（　）。
  A) 二进制文件打开后可以先读文件的末尾，而顺序文件不可以
  B) 在程序结束时，应当用fclose函数关闭已打开的文件
  C) 在利用fread函数从二进制文件中读数据时，可以用数组名给数组中所有元素读入数据
  D) 不可以用FILE定义指向二进制文件的文件指针

(40) 有以下程序
#include
main(int argc,char *argv[])
{ int i,len=0;
for(i=1;iprintf(“%d\n”,len);
}
程序编译连接后生成的可执行文件是ex1.exe，若运行时输入带参数的命令行是：
ex1 abcd efg 10<回车>
则运行的结果是：（　）。
  A) 22
  B) 17
  C) 12
  D) 9

(41) 有以下程序
int fa(int x)
{ return x*x; }
int fb(int x)
{ return x*x*x; }
int f(int (*f1)(),int (*f2)(),int x)
{ return f2(x)-f1(x); }
main()
{ int i;
i=f(fa,fb,2); printf(“%d\n”,i);
}
程序运行后的输出结果是（　）。
  A) -4
  B) 1
  C) 4
  D) 8

(42) 有以下程序
int a=3;
main()
{ int s=0;
{ int a=5; s+=a++; }
s+=a++;printf(“%d\n”,s);
}
程序运行后的输出结果是（　）。
  A) 8
  B) 10
  C) 7
  D) 11

(43) 有以下程序
void ss(char *s,char t)
{ while(*s)
{ if(*s==t) *s=t-‘a’+’A’;
 s++;
}
}
main()
{ char str1[100]=“abcddfefdbd”,c=’d’;
ss(str1,c); printf(“%s\n”,str1);
}
程序运行后的输出结果是（　）。
  A) ABCDDEFEDBD
  B) abcDDfefDbD
  C) abcAAfefAbA
  D) Abcddfefdbd

(44) 有以下程序
struct STU
{ char num[10]; float score[3]; };
main()
{ struct stu s[3]={{“20021”,90,95,85},
{“20022”,95,80,75},
{“20023”,100,95,90}},*p=s;
int i; float sum=0;
for(i=0;i<3,i++)
sum=sum+p->score[i];
printf(“%6.2f\n”,sum);
}
程序运行后的输出结果是（　）。
  A) 260.00
  B) 270.00
  C) 280.00
  D) 285.00

(45) 设有如下定义：
struck sk
{ int a;
float b;
}data;
int *p;
若要使P指向data中的a域，正确的赋值语句是（　）。
  A) p=&a;
  B) p=data.a;
  C) p=&data.a;
  D) *p=data.a;

(46) 有以下程序
#include
struct NODE
{ int num; struct NODE *next; };
main()
{ struct NODE *p,*Q,*R;
p=(struct NODE*)malloc(sizeof(struct NODE));
q=(struct NODE*)malloc(sizeof(struct NODE));
r=(struct NODE*)malloc(sizeof(struct NODE));
p->num=10; q->num=20; r->num=30;
p->next=q;q->next=r;
printf(“%d\n”,p->num+q->next->num);
}
程序运行后的输出结果是（　）。
  A) 10
  B) 20
  C) 30
  D) 40

(47) 若有以下说明和定义
typedef int *INTEGER;
INTEGER p,*q;
以下叙述正确的是（　）。
  A) P是int型变量
  B) p是基类型为int的指针变量
  C) q是基类型为int的指针变量
  D) 程序中可用INTEGER代替int类型名

(48) 有以下程序
main()
{ unsigned char a,b,c;
a=0x3; b=a|0x8; c=b<<1;
printf(“%d%d\n”,b,c);
}
程序运行后的输出结果是（　）。
  A) –11 12
  B) –6 –13
  C) 12 24
  D) 11 22

(49) 有以下程序
#include
main()
{ char *p,*q;
p=(char*)malloc(sizeof(char)*20); q=p;
scanf(“%s%s”,p,q); printf(“%s%s\n”,p,q);
}
若从键盘输入：abc def<回车>，则输出结果是：（　）。
  A) def def
  B) abc def
  C) abc d
  D) d d

(50) 以下程序中函数f的功能是将n个字符串按由大到小的顺序进行排序。
#include
void f(char p[][10],int n)
{ char t[20]; int i,j;
for(i=0;ifor(j=i+1;jif(strcmp(p[i],p[j])<0)
 { strcpy(t,p[i]);strcpy(p[i],p[j]);strcpy(p[j],t);}
}
main()
{ char p[][10]={“abc”,“aabdfg”,“abbd”,“dcdbe”,“cd”};int i;
f(p,5); printf(“%d\n”,strlen(p[0]));
}
程序运行后的输出结果是（　）。
  A) 6
  B) 4
  C) 5
  D) 3

二、填空题（每空2分，共40分）
请将答案分别写在答题卡中序号为【1】至【20】的横线上，答在试卷上不得分。

1、计算机软件分为系统软件和应用软件，操作系统属于 [1] 。

2、在DOS环境下，代表键盘和显示器的设备文件名为 [2] 。

3、支持Internet基本服务的协议是 [3] 。

4、从Windows环境进入MS-DOS方式后，返回Windows环境的DOS命令为 [4] 。

5、某微型机的运算速度为2MIPS，则该微型机每秒执行 [5] 条指令。

6、设有定义：int n,*k=&n;以下语句将利用指针变量k读写变量n中的内容，请将语句补充完整。
scanf(“%d, ” [6] );
printf(“%d\n”, [7] 。);

7、以下程序运行后的输出结果是 [8] 。
 main()
{ int x=10,y=20,t=0;
if(x==y)t=x;x=y;y=t;
printf(“%d,%d \n”,x,y);
}

8、以下程序运行后的输出结果是 [9] 。
main()
{ int x=15;
while(x>10 && x<50)
{ x++;
if(x/3){x++;break;}
else continue;
}
printf(“%d\n”,x);
}


9、有以下程序：
#include
main()
{ char c;
while((c=getchar( ))!=’?’) putchar(--c);
}
程序运行时，如果从键盘输入：Y？N？<回车>，则输出结果为 [10] 。

10、以下程序运行后的输出结果是 [11] 。
void fun(int x,int y)
{ x=x+y;y=x-y;x=x-y;
printf(“%d,%d,”,x,y); }
main()
{ int x=2,y=3;
fun(x,y);
printf(“%d,%d\n”,x,y);
}

11、以下函数的功能是计算s=1+ + +……+ ，请填空。
double fun(int n)
{ double s=0.0,fac=1.0; int i;
for(i=1,i<=n;i++)
{ fac=fac [12] ;
s=s+fac;
}
return s;
}


12 fun函数的功能是：首先对a所指的N行N列的矩阵，找出各行中的最大的数，再求这N个最大值中的最小的那个数作为函数值返回。请填空。
#include
#define N 100
int fun(int(*a)[N])
{ int row,col,max,min;
for(row=0;row{ for(max=a[row][0],col=1;colif( [13] )max=a[row][col];
 if( row==0)min=max;
 else if( [14] )min=max;
 }
return min;
}

13、函数sstrcmp()的功能是对两个字符串进行比较。当s所指字符串和t所指字符串相等时，返回值为0；当s所指字符串大于t所指字符串时，返回值大于0；当s所指字符串小于t所指字符串时，返回值小于0（功能等同于库函数strcmp()）。请填空。
#include
int sstrcmp(char *s,char *t)
{ while(*s&&*t&& *s== [15] )
{ s++;t++;}
return [16] ;
}

14、下面程序的运行结果是 [17] 。
#define N 10
#define s(x) x*x
#define f(x) (x*x)
main()
{ int i1,i2;
i1=1000/s(N); i2=1000/f(N);
printf(“%d %d\n”,i1,i2);
}

15、下面程序的运行结果是： [18] 。
void swap(int *a,int *b)
{ int *t;
t=a; a=b; b=t;
}
main()
{ int x=3,y=5,*p=&x,*q=&y;
swap(p,q);
printf(“%d%d\n”,*p,*q);
}

16、下面程序的运行结果是： [19] 。
typedef union student
{ char name[10];
long sno;
char sex;
float score[4];
}STU;
main()
{ STU a[5];
printf(“%d\n”,sizeof(a));
}

(17) 函数sstrcmp()的功能是对两个字符串进行比较。当s 所指字符串和t所指字符相等时，返回值为0；当s所指字符串大于t所指字符串时，返回值大于0；当s所指字符串小于t所指字符串时，返回值小于0(功能等同于库函数strcmp())。请填空。
#include <stdio.h>
int sstrcmp(char *s,char *t)
{while(*s&&*t&&*s==【19】)
{s++;t++; }
return 【20】;
}


02年9月二级C语言笔试试题答案

2002年9月二级C语言笔试试题答案

一、选择题（⑴-(40)题每题1分，(41)-(50)题每题2分，其60分）

 (1) C (2) A (3) B (4) B (5) C

 (6) A (7) D (8) D (9) D (10) D

 (11) A (12) D (13) B (14) A (15) C

 (16) D (17) C (18) C (19) B (20) C

 (21) D (22) C (23) A (24) A (25) D

 (26) A (27) B (28) D (29) B (30) D

 (31) C (32) B (33) D (34) A (35) B

 (36) D (37) C (38) A (39) D (40) D

 (41) C (42) A (43) B (44) B (45) C

 (46) D (47) B (48) D (49) A (50) C

二、填空题答案（每空2分，共40分）

     (1) 【1】 系统软件

 (2) 【2】 CON 或 CON:

 (3) 【3】 TCP/IP 或者 传输控制协议/网际协议

 (4) 【4】 EXIT 或者 exit

 (5) 【5】 二百万 或者 两百万 或者 2百万 或者 200万 或者 2000000 或者 2,000,000

 (6) 【6】 20,0

 (7) 【7】 17

 (8) 【8】 X

 (9) 【9】 3,2,2,3

 (10) 【10】 /i 或者 *1.0/i 或者 *1/i 或者 *(1.0/i) 或者 /(double)i

 (11) 【11】 1000 10

 (12) 【12】 3 5

 (13) 【13】 80

 (14) 【14】 "d1.dat","rb"#"d1.dat","r+b"#"d1.dat","rb+"

 (15) 【15】 k

 (16) 【16】 *k

 (17) 【17】 maxmax 或者 a[row][col]>=max

 (18) 【18】 maxmax 或者 min>=max

 (19) 【19】 *t 或者 t[0]

 (20) 【20】 *s-*t 或者 *s-t[0] 或者 s[0]-*t 或者 s[0]-t[0]


03年4月二级C语言笔试试题

2003年4月二级C语言笔试试题

一、选择题（(1)～(40)每小题1分，(41)～(55)每小题2分，共60分）
下列各题 A) 、B)、C)、D)四个选项中，只有一个选项是正确的，请将正确选项涂写在答题卡相应位置上，答在试卷上不得分。
(1) 用8位无符号二进制数能表示的最大十进制数为（　）。
  A) 127
  B) 128
  C) 255
  D) 256

(2) 在64位高档微机中，一个字长所占的二进制位数为（　）。
  A) 8
  B) 16
  C) 32
  D) 64

(3) 在Windows环境下，为了复制一个对象，在用鼠标拖动该对象时应同时按住（　）。
  A) Alt键
  B）Esc键
  C）Shift键
  D) Ctrl键

(4) 在Windows菜单中，暗淡（灰色）的命令项表示该命令（　）。
  A) 暂时不能用
  B) 正在执行
  C) 包含下一层菜单
  D) 包含对话框

(5) 在DOS环境下，为了得到TYPE命令的帮助信息，正确的DOS命令为（　）。
  A) TYPE
  B) TYPE/H
  C) TYPE/*
  D) TYPE/?

(6) 下列选项中，能作为合法DOS文件名的是（　）。
  A) ANP/A.DAT
  B) ABCCOM
  C) ECD.BASIC
  D) XY+Z.TXT


(7) 下列叙述中正确的是（　）。
  A) 在Windows环境下，最大化的窗口是不能移动的
  B) 在Windows环境下，应用程序窗口最小化后，该应用程序暂停执行
  C) 在Windows环境下，只有最小化的窗口才能关闭
  D) 在Windows环境下，不能关闭最大化的窗口

(8) 在Windows环境下，工具栏中的复制按钮是（　）。
  A) 打印机图标
  B) 剪刀标志
  C) 复制标志
  D) 粘贴标志

(9) 在Windows98环境下，若要将整个屏幕上显示的内容存入剪贴板，可以按（　）。
  A) Ctrl+PrintScreen键
  B) Alt+PrintScree键
  C) Shift+PrintScreen键
  D) PrintScreen键

(10) 目前，计算机病毒扩散最快的途径是（　）。
  A) 通过软件复制
  B) 通过网络传播
  C) 通过磁盘考贝
  D) 运行游戏软件

(11) 以下叙述中正确的是（　）。
  A) C语言比其他语言高级
  B) C语言可以不用编译就能被计算机识别执行
  C) C语言以接近英语国家的自然语言和数学语言作为语言的表达形式
  D) C语言出现的最晚，具有其他语言的一切优点

(12) C语言中用于结构化程序设计的三种基本结构是（　）。
  A) 顺序结构、选择结构、循环结构
  B) if、switch、break
  C) for、while、do-while
  D) if、for、continue

(13) 在一个C程序中（　）。
  A) main函数必须出现在所有函数之前
  B) main函数可以在任何地方出现
  C) main函数必须出现在所有函数之后
  D) main函数必须出现在固定位置

(14) 下列叙述中正确的是（　）。
  A) C语言中既有逻辑类型也有集合类型
  B) C语言中没有逻辑类型但有集合类型
  C) C语言中有逻辑类型但没有集合类型
  D) C语言中既没有逻辑类型也没有集合类型

(15) 下列关于C语言用户标识符的叙述中正确的是
  A）用户标识符中可以出现在下划线和中划线（减号）
  B）用户标识符中不可以出现中划线，但可以出现下划线
  C）用户标识符中可以出现下划线，但不可以放在用户标识符的开头
  D）用户标识符中可以出现在下划线和数字，它们都可以放在用户标识符的开头

(16) 若有以下程序段（n所赋的是八进制数）
int m=32767,n=032767
printf("%d,%o/n",m,n);
执行后输出结果是（　）。
  A) 32767，32767
  B) 32767，032767
  C) 32767，77777
  D) 32767，077777

(17) 下列关于单目运算符++、--的叙述中正确的是（　）。
  A) 它们的运算对象可以是任何变量和常量
  B) 它们的运算对象可以是char型变量和int型变量，但不能是float型变量
  C) 它们的运算对象可以是int型变量，但不能是double型变量和float型变量
  D) 它们的运算对象可以是char型变量、int型变量和float型变量

(18) 若有以下程序段
int m=0xabc,n=0xabc;
m-=n;
printf("%X\n",m);
执行后输出结果是（　）。
  A) 0X0
  B) 0x0
  C) 0
  D) 0XABC

(19) 有以下程序段
int m=0,n=0; char c='a';
 scanf("%d%c%d",&m,&c,&n);
 printf("%d,%c,%d\n",m,c,n);
若从键盘上输入：10A10<回车>，则输出结果是：（　）。
  A) 10,A,10
  B) 10,a,10
  C) 10,a,0
  D) 10,A,0

(20) 有以下程序
main()
{ int i;
 for(i=0;i<3;i++)
 switch(i)
 { case 1: printf("%d",i);
 case 2: printf("%d",i);
 default: printf("%d",i);
 }
}
执行后输出结果是（　）。
  A) 011122
  B) 012
  C) 012020
  D) 120

(21) 有以下程序
main()
{ int i=1,j=1,k=2;
 if((j++‖k++)&&i++) printf("%d,%d,%d\n",i,j,k);
}
执行后输出结果是（　）。
  A) 1，1，2
  B) 2，2，1
  C) 2，2，2
  D) 2，2，3

(22) 有以下程序
main()
{ int a=5,b=4,c=3,d=2;
 if(a>b>c)
printf("%d\n",d);
 else if((c-1>=d)==1)
printf("%d\n",d+1);
 else
printf("%d\n",d+2)
}
执行后输出结果是（　）。
  A) 2
  B) 3
  C) 4
  D) 编译时有错，无结果

(23) 有以下程序
main()
{ int p[7]={11,13,14,15,16,17,18},i=0,k=0;
 while(i<7&&p[i]%2){k=k+p[i];i++;}
 printf("%d\n",k);
}
执行后输出结果是（　）。
  A) 58
  B) 56
  C) 45
  D) 24

(24) 有以下程序
main()
{ int i=0,s=0;
do{
if(i%2){i++;continue;}
i++;
s +=i;
}while(i<7);
 printf("%d\n",s);
}
执行后输出结果是（　）。
  A) 16
  B) 12
  C) 28
  D) 21

(25) 有以下程序
main()
{ int i=10,j=1;
 printf("%d,%d\n",i--,++j);
}
执行后输出结果是（　）。
  A) 9,2
  B) 10,2
  C) 9,1
  D) 10,1

(26) 有以下程序
main()
{ char a,b,c,*d;
 a='\'; b='\xbc';
 c='\0xab'; d="\017";
 print("%c%c%c\n",a,b,c,*d);
}
编译时出现错误，以下叙述中正确的是（　）。
  A) 程序中只有a='\'；语句不正确
  B) b='\xbc'；语句不正确
  C) d="\0127";语句不正确
  D) a='\'；和c='\0xab'；语句都不正确

(27) 有以下程序
int fl(int x,int y)
{ return x>y?x:y; }
int f2(int x,int y)
{ return x>y?y:x; }
main()
{ int a=4,b=3,c=5,d,e,f；
 d=f1(a,b); d=f1(d,c);
e=f2(a,b); e=f2(e,c);
 f=a+b+c-d-e;
 printf("%d,%d,%d\n",d,f,e);
}
执行后输出结果是（　）。
  A) 3,4,5
  B) 5,3,4
  C) 5,4,3
  D) 3,5,4

(28) 有如下程序
void f(int x,int y)
{ int t;
 if(x}
main()
{ int a=4,b=3,c=5;
 f(a,b); f(a,c); f(b,c);
 printf("%d,%d,%d\n",a,b,c);
}
执行后输出结果是（　）。
  A) 3,4,5
  B) 5,3,4
  C) 5,4,3
  D) 4,3,5

(29) 若有以下定义和语句
#include
int a=4,b=3,*p,*q,*w;
p=&a; q=&b; w=q; q=NULL;
则以下选项中错误的语句是（　）。
  A) *q=0;
  B) w=p;
  C) *p=a;
  D) *p=*w;

(30) 有以下程序
int *f(int *x,int *y)
{ if(*x<*y)
 return x;
 else
 return y;
}
main()
{ int a=7,b=8,*p,*q,*r};
}
执行后输出结果是（　）。
  A) 7,8,8
  B) 7,8,7
  C) 8,7,7
  D) 8,7,8

(31) 有以下程序
main()
{ char *s[]={"one","two","three"},*p;
 p=s[1];
 printf("%c,%s\n",*(p+1),s[0]);
}
执行后输出结果是（　）。
  A) n,two
  B) t,one
  C) w,one
  D) o,two

(32) 有以下程序
main()
{ int x[8]={8,7,6,5,0,0},*s;
 s=x+3
 printf("%d\n",s[2]);
}
执行后输出结果是（　）。
  A) 随机值
  B) 0
  C) 5
  D) 6

(33) 以下能正确定义数组并正确赋初值的语句是（　）。
  A) int N=5,b[N][N];
  B) int a[1][2]={{1},{3}};
  C) int c[2][]={{1,2},{3,4}};
  D) int d[3][2]={{1,2},{34}};

(34) 有以下程序
main()
{ int m[][3]={1,4,7,2,5,8,3,6,9};
 int i,j,k=2;
 for(i=0;i<3;i++)
{ printf("%d",m[k][i]); }
}
执行后输出结果是（　）。
  A) 4 5 6
  B) 2 5 8
  C) 3 6 9
  D) 7 8 9

(35) 以下函数的功能是：通过键盘输入数据，为数组中的所有元素赋值。
#define N 10
void arrin(int x[N])
{ int i=0;
 while(i scanf("%d", );
}
在下划线处应填入的是（　）。
  A) x+i
  B）&x[i+1]
  C）x+(i++)
  D）&x[++i]

(36) 有以下程序
main()
{ char s[]="\n123\\";
 printf("%d,%d\n",strlen(s),sizeof(s));
}
执行后输出结果是（　）。
  A) 赋初值的字符串有错
  B) 6,7
  C) 5,6
  D) 6,6

(37) 阅读以下函数
fun(char *s1,char *s2)
{ int i=0;
while(s1[i]==s2[i]&& s2[i]!='\0')i++;
return(s1[i]== && s2{i}!=='\0');
}
此函数的功能是（　）。
  A) 将s2所指字符串赋给s1
  B) 比较s1和s2所指字符串的大小，若s1比s2的大，函数值为1，否则函数值为0
  C) 比较s1和s2所指字符串是否相等，若相等，函数值为1，否则函数值为0
  D) 比较s1和s2所指字符串的长度，若s1比s2的长，函数值为1，否则函数值为0

(38) 以下叙述中正确的是（　）。
  A) 全局变量的作用域一定比局部变量的作用域范围大
  B）静态（static）类别变量的生存期贯穿于整个程序的运行期间
  C）函数的形参都属于全局变量
  D）未在定义语句中赋初值的auto变量和static变量的初值都是随机值

(39) 设有如下说明
typedef struct
{ int n; char c; double x;}STD;
则以下选项中，能正确定义结构体数组并赋初值的语句是
  A) STD tt[2]={{1,'A',62},{2, 'B',75}};
  B) STD tt[2]={1,"A",62},2, "B",75};
  C) struct tt[2]={{1,'A'},{2, 'B'}};
  D)structtt[2]={{1,"A",62.5},{2, "B",75.0}};

(40) 有以下程序
main()
{ union { unsigned int n;
 unsigned char c;
 }u1;
 ul.c=｀A｀;
 printf("%c\n",u1.n);
}
 执行后输出结果是（　）。
  A) 产生语法错
  B) 随机值
  C) A
  D) 65

(41) 有以下程序
main()
{ char str[]="xyz",*ps=str;
while(*ps)ps++;
for(ps--;ps-str>=0;ps--) puts(ps);
}
执行后的输出结果是（　）。
A) yz B) z C) z D) x
xyz yz yz xy
xyz xyz
(42) 有以下程序
main()
{ int a[][3]={{1,2,3},{4,5,0}},{*pa}[3],i;
pa=a;
for(i=0;i<3;i++)
if(i<2) pa[1][i]=pa[1][i]-1;
else pa[1][i]=1;
printf("%d\n",a[0][1]+a[1][1]+a[1][2]);
}
执行后输出结果是（　）。
  A) 7
  B) 6
  C) 8
  D) 无确定值

(43) 有以下程序
void fun(int *a,int i,int j)
{ int t;
if(i { t=a[i];a[i]=a[j];a[j]=t;
 fun(a,++i,--j);
 }
}
main()
{ int a[]={1,2,3,4,5,6},i;
 fun(a,0,5)
 for(i=0;i<6;i++)
 printf("%d",a[i]);
}
执行后的输出结果是（　）。
  A) 6 5 4 3 2 1
  B) 4 3 2 1 5 6
  C) 4 5 6 1 2 3
  D) 1 2 3 4 5 6

(44) 有以下程序
main(int arge,char *argv[])
{ int n,i=0;
while(arv[1][i]!='\0'
{ n=fun(); i++;}
 printf(%d\n",n*argc);
}
int fun()
{ static int s=0;
 s+=1;
 return s;
}
假设程序经编译、连接后生成可执行文件exam.exe,若键入以下命令行
exam 123<回车>
则运行结果为（　）。
  A) 6
  B）8
  C）3
  D）4

(45) 以下程序段中，能够通过调用函数fun，使main函数中的指针变量p指向一个合法的整型单元的是（　）。
  A) main()　　　　　　　　 B) main
 { int *p; 　　　　　　　　　{ int *p;
 fun(p);　　　　　　　　　 fun(&p);
 } 　　　　　　　　　　　　 }
int fun(int *p) 　　　　　　int fun(int **p)
{ int s; p=&s;} 　　　　　　{ int s;*p=&s;}
  C) #include 　　　　　　　D) #include
 main() 　　　　　　　　　main()
 { int *p; 　　　　　　　　　{ int *p;
 fun(&p); 　　　　　　　　　fun(p);

 }　　　　　　　　　　　　 }
 int fun(int **p) 　　　　　　int fun(int *p)
{ *p=(int *)malloc(2);} 　　　{ p=(int *)malloc(sizeo(int));}

(46) 若要说明一个类型名STP，使得定义语句STP s等价于char *s，以下选项中正确的是（　）。
  A) typedef STP char *s;
  B) typedef *char STP;
  C) typedef stp *char;
  D) typedef char* STP;

(47) 设有如下定义
struct ss
{ char name[10];
 int age;
 char sex;
}std[3],*p=std;
下面各输入语句中错误的是（　）。
  A) scanf("%d",&(*p).age);
  B) scanf("%s",&std.name);
  C) scanf("%c",&std[0].sex)
  D) scanf("%c",&(p->sex));

(48) 设char型变量x中的值为10100111，则表达式（2+x）^(～3)的值是（　）。
  A) 10101001
  B) 10101000
  C) 11111101
  D) 01010101

(49) 以下叙述中不正确的是（　）。
  A）Ｃ语言中的文本文件以ASCⅡ码形式存储数据
  B）Ｃ语言中对二进制文件的访问速度比文本文件快
  C）Ｃ语言中，随机读写方式不适用于文本文件
   D）Ｃ语言中，顺序读写方式不适用于二进制文件

(50) 以下程序企图把从终端输入的字符输出到名为abc.txt的文件中，直到从终端读入字符#号时结束输入和输出操作，但程序有错。
#include
main()
{ FILE *fout; char ch;
 fout=fopen('abc.txt','w');
ch=fgetc(stdin);
while(ch!='#')
 { fputc(ch,fout);
 ch=fgetc(stdin);
 }
 fclose(fout);
}
 出错的原因是（　）。
  A) 函数fopen调用形式错误
  B) 输入文件没有关闭
  C) 函数fgetc调用形式错误
  D) 文件指针stdin没有定义

二、填空题(每空2分,共20分)
请将每空的正确答案写在答题卡上【1】-【20】序号的横线上,答在试卷上不得分。

(1) 用十六进制绘存储器中的字节地址进行编号，若地址编号从000到FFFF，则该存诸器的容量为【1】KB。

(2) 假设在当前盘的当前目录下有两个文件A.TXT和B.TXT，现要将文件B.TXT合并连接到文件A.TXT的后面。若使用COPY命令，则完整的命令为【2】。

(3) E-mail地址由用户和域名两部分组成，这两部分的分隔符为【3】。

(4) 假设在当前盘当前目录下有一个可执行程序USER.EXE。现要执行该程序，并要求在执行过程中将显示输出的结果信息存入当前盘当前目录的文件OUT.DAT中，则完整的DOS命令为【4】。

(5) 在DOS环境下，表示打印机的设备文件名为【5】 。

(6) 若有语句
int i=-19,j=i%4;
 printf("%d\n",j);
则输出结果是　【6】　。

(7) 若有程序
main()
{ int i,j;
 scanf("i=%d,j=%d";&i,&j);
 printf("i=%d,j=%d\n",i,j);
}
要求给i赋10，给j赋20，则应该从键盘输入　【７】　。

(8) 若有以下程序
main()
{ int p,a=5;
 if(p=a!=0)
 printf("%d\n",p);
 else
 printf("%d\n",p+2);
}
执行后输出结果是　【8】　。

(9) 若有以下程序
main()
{ int a=4,b=3,c=5,t=0;
 if(a if(a printf("%d %d %d\n",a,b,c);
}
执行后输出结果是 【9】 。

(10) 若有以下程序
main()
{ int a[4][4]={{1,2,-3,-4},{0,-12,-13,14},{-21,23,0,-24},{-31,32,-33,0}};
 int i,j,s=0;
 for(i=0;i<4;i++)
 { for(j=0;j<4;j++)
 { if(a[i][j]<0)continue;
 if(a[i][j]==0)break;
 s+=a[i][j];
 }
 }
 printf("%d\n",s);
}
执行后输出的结果是　【10】　。

(11) 若有以下程序
main()
{ char a;
 a='H'-'A'+'0';
 print("%c\n",a);
}
执行后的输出结果是 【11】 。

(12) 若有以下程序
int f(int x,int y)
{ return(y-x)*x; }
main()
{ int a=3,b=4,c=5,d;
 d=f(f(3,4),f(3,5));
 printf("%d\n",d);
}
执行后输出的结果是【12】。

(13) 函数YangHui的功能是把杨辉三角形的数据赋给二维数组的下半三角，形式如下
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1

其构成规律是：
第0列元素和主对角线无素均为1
其余元素为其左上方和正上方元素之和
数据的个数每行递增1
请将程序补充完整。
#defint N 6
void YangHui(int *[N][N])
{ int i,j;
 x[0][0]=1
 for(i=1;i { x[i][0]= 【13】 =1;
 for(j=1;j x[i][j]= 【14】 ;
 }
}

(14) 以下函数的功能是删除字符串s中的所有数字字符。请填空。
void dele(char *s)
{ int n=0,i;
 for(i=0,s[i];i++)
 if(【15】)
 s[n++]=s[i];
s[n]=【16】;
}


(15) 设函数findbig已定义为求3个数中的最大值。以下程序将利用函数指针调用findbig函数。请填空。
main()
{ int findbig(int,int,int);
 int (*f)(),x,yz,z,big;
 f=【17】;
 scanf("%d%d%d",&x,&y,&z);
 big=(*f)(x,y,z);
 printf("bing=%d\n",big);
}


(16) 以下程序的输出结果是【18】 。
#defint MCRA(m) 2*m
#define MCRB(n,m) 2*MCRA(n)+m
main()
{ int i=2,j=3;
 printf("%d\n",MCRB(j,MCRA(i)));
}

(17) 设有以下定义
struct ss
{ int info;struct ss *link;}x,y,z;
且已建立如下图所示链表结构：
□□ →□□→□□
X Y Z
请写出删除点y的赋值语句【19】 。

(18) 已有文本文件test.txt，其中的内容为：Hello,everyone!。以下程序中，文件test.txt已正确为"读"而打开，由文件指针fr指向该文件，则程序的输出结果是 【20】 。
#include
main()
{ FILE *fr; char str[40];
……
 fgets(str,5,fr);
 printf("%s\n",str);
 fclose(fr);
}


03年4月二级C语言笔试试题答案

2003年4月二级C语言笔试试题答案

一、选择题
 01-05：C　D　D　A　D

    06-10：B　A　C　D　B

    11-15：C　A　B　D　B

    16-20：A　D　C　A　A

    21-25：C　B　D　A　B

    26-30：D　C　D　A　B

    31-35：C　B　D　C　C

    36-40：C　C　B　A　C

    41-45：C　A　A　A　C

    46-50：D　B　D　D　A

二、填空题

  (1) 64

  (2) COPY A.TXT+B.TXT A.TXT

  (3) @

  (4) USER >OUT.DAT

  (5) PRN或LPT1或LPT2

  (6) -3

  (7) i=10,j=20

  (8) 1

  (9) 5 0 3

  (10) 58

  (11) 7

  (12) 9

  (13) x[i][i]和x[i-1][j-1]+x[i-1][j]

  (14) !(s[i]>='0'&&s[i]<='9')和'\0'

  (15) findbig

  (16) 16

  (17) x.link=y.link;

  (18) Hell


03年9月二级C语言笔试试题

2003年9月二级C语言笔试试题

  一、选择题（（1）~（40）每题1分，（41）~（50）每题2分，共60分）
（1）在计算机中，一个字节所包含二进制位的个数是（　）。
  A）2
  B）4
  C）8
  D）16

（2）在多媒体计算机中，CD-ROM属于（　）。
  A）存储媒体
  B）传输媒体
  C）表现媒体
  D）表示媒体

（3）在DOS系统中，带有通配符的文件名*.*表示（　）。
  A）硬盘上的全部文件
  B）当前盘当前目录中的全部文件
  C）当前盘上的全部文件
  D）根目录中的全部文件

（4）十六进制数100转换为十进制数为 （　）。
  A）256
  B）512
  C）1024
  D）64

（5）能将高级语言编写的源程序转换为目标程序的软件是（　）。
  A）汇编程序
  B）编辑程序
  C）解释程序
  D）编译程序

（6）在Internet中，用于在计算机之间传输文件的协议是（　）。
  A）TELNET
  B）BBS
  C）FTP
  D）WWW

（7）在Windows环境下，资源管理器左窗口中的某文件夹左边标有"＋"标记表示（　）。
  A）该文件夹为空
  B）该文件夹中含有子文件夹
  C）该文件夹中只包含有可执行文件
  D）该文件夹中包含系统文件

（8）在Windows环境下，下列叙述中正确的是（　）。
  A）在"开始"菜单中可以增加项目，也可以删除项目
  B）在"开始"菜单中不能增加项目，也不能删除项目
  C）在"开始"菜单中可以增加项目，但不能删除项目
  D）在"开始"菜单中不能增加项目，但可以删除项目

（9）从Windows环境进入DOS方式后，返回Windows环境的命令为（　）。
  A）QUIT
  B）WIN
  C）EXIT
  D）ESC

（10）下列叙述中正确的是（　）。
  A）计算机病毒只感染可执行文件
  B）计算机病毒只感染文本文件
  C）计算机病毒只能通过软件复制的方式进行传播
  D）计算机病毒可以通过读写磁盘或网络等方式进行传播

（11）以下叙述中正确的是（　）。
  A）C程序中注释部分可以出现在程序中任意合适的地方
  B）花括号"{"和"}"只能作为函数体的定界符
  C）构成C程序的基本单位是函数，所有函数名都可以由用户命名
  D）分号是C语句之间的分隔符，不是语句的一部分

（12）以下选项中可作为C语言合法整数的是（　）。
  A）10110B
  B）0386
  C）0Xffa
  D）x2a2

（13）以下不能定义为用户标识符的是（　）。
  A）scanf
  B）Void
  C）_3com_
  D）int

（14）有以下程序
main()
{ int a; char c=10;
float f=100.0; double x;
a=f/=c*=(x=6.5);
printf("%d %d %3.1f %3.1f\n",a,c,f,x);
}
程序运行后的输出结果是（　）。
  A）1 65 1 6.5
  B）1 65 1.5 6.5
  C）1 65 1.0 6.5
  D）2 65 1.5 6.5

（15）以下选项中非法的表达式是（　）。
  A）0<=x<100
  B）i=j==0
  C）(char)(65+3)
  D）x+1=x+1

（16）有以下程序
main()
{ int a=1,b=2,m=0,n=0,k;
k=(n=b>a)||(m=aprintf("%d,%d\n",k,m);
}
程序运行后的输出结果是（　）。
  A）0,0
  B）0,1
  C）1,0
  D）1,1

（17）有定义语句：int x, y;，若要通过scanf("%d,%d",&x,&y);语句使变量x得到数值11，变量y得到数值12，下面四组输入形式中，错误的是（　）。
  A）11 12<回车>
  B）11, 12<回车>
  C）11,12<回车>
  D）11,<回车>
12<回车>

（18）设有如下程序段：
int x=2002, y=2003;
printf("%d\n",(x,y));
则以下叙述中正确的是（　）。
  A）输出语句中格式说明符的个数少于输出项的个数，不能正确输出
  B）运行时产生出错信息
  C）输出值为2002
  D）输出值为2003

（19）设变量x为float型且已赋值，则以下语句中能将x中的数值保留到小数点后两位，并将第三位四舍五入的是（　）。
  A）x=x*100+0.5/100.0;
  B）x=(x*100+0.5)/100.0;
  C）x=(int)(x*100+0.5)/100.0;
  D）x=(x/100+0.5)*100.0;

（20）有定义语句：int a=1,b=2,c=3,x;，则以下选项中各程序段执行后，x的值不为3的是（　）。
  A.if (c<a) x=1; 　　　　　B.if (a<3) x=3;
    else if (b<a) x=1; 　　　　　else if (a<2) x=2;
    else x=3;　　　　　　　　 else x=1;
  C.if (a<3) x=3; 　　　　　D.if(a<b) x=b;
    if (a<2) x=2;　　　　　　 if (b<c) x=c;
    if (a<1) x=1; 　　　　　　if (c<a) x=a;

（21）有以下程序
main()
{ int s=0,a=1,n;
scanf("%d",&n);
do
{ s+=1; a=a-2; }
while(a!=n);
printf("%d\n",s);
}
若要使程序的输出值为2，则应该从键盘给n输入的值是（　）。
  A）-1
  B）-3
  C）-5
  D）0

（22）若有如下程序段，其中s、a、b、c均已定义为整型变量,且a、c均已赋值（c大于0）
s=a;
for(b=1;b<=c;b++) s=s+1;
则与上述程序段功能等价的赋值语句是（　）。
  A）s=a+b;
  B）s=a+c;
  C）s=s+c;
  D）s=b+c;

（23）有以下程序
main()
{ int k=4,n=0;
for( ; n{ n++;
if(n%3!=0) continue;
k--; }
printf("%d,%d\n",k,n);
}
程序运行后的输出结果是（　）。
  A）1,1
  B）2,2
  C）3,3
  D）4,4

（24）要求以下程序的功能是计算：s= 1+1/2+1/3+……+1/10
 main()
{ int n; float s;
s=1.0;
for(n=10;n>1;n--)
s=s+1/n;
printf("%6.4f\n",s);
}
程序运行后输出结果错误，导致错误结果的程序行是 （　）。
  A）s=1.0;
  B）for(n=10;n>1;n--)
  C）s=s+1/n;
  D）printf("%6.4f\n",s);

（25）已定义ch为字符型变量，以下赋值语句中错误的是（　）。
  A）ch='\';
  B）ch=62+3;
  C）ch=NULL;
  D）ch='\xaa';

（26）若已定义的函数有返回值，则以下关于该函数调用的叙述中错误的是（　）。
  A）函数调用可以作为独立的语句存在
  B）函数调用可以作为一个函数的实参
  C）函数调用可以出现在表达式中
  D）函数调用可以作为一个函数的形参

（27）有以下函数定义：
void fun(int n, double x) { …… }
若以下选项中的变量都已正确定义并赋值，则对函数fun的正确调用语句是（　）。
  A）fun(int y,double m);
  B）k=fun(10,12.5);
  C）fun(x,n);
  D）void fun(n,x);

（28）有以下程序
void fun(char *a, char *b)
{ a=b; (*a)++; }
main()
{ char c1='A',c2='a',*p1,*p2;
p1=&c1; p2=&c2; fun(p1,p2);
printf("%c%c\n",c1,c2);
}
程序运行后的输出结果是（　）。
  A）Ab
  B）aa
  C）Aa
  D）Bb

（29）若程序中已包含头文件stdio.h，以下选项中，正确运用指针变量的程序段是（　）。
A）int *i=NULL; B） float *f=NULL;
scanf("%d",i); *f=10.5;
C）char t='m', *c=&t; D） long *L;
*c=&t; L='\0';
（30）有以下程序
#include
main()
{ printf("%d\n",NULL); }
程序运行后的输出结果是（　）。
  A）0
  B）1
  C）-1
  D）NULL没定义，出错

（31）已定义c为字符型变量，则下列语句中正确的是（　）。
  A）c='97';
  B）c="97";
  C）c=97;
  D）c="a";

（32）以下不能正确定义二维数组的选项是（　）。
  A）int a[2][2]={{1},{2}};
  B）int a[][2]={1,2,3,4};
  C）int a[2][2]={{1},2,3};
  D）int a[2][]={{1,2},{3,4}};

（33）以下选项中不能正确把cl定义成结构体变量的是（　）。
  A）typedef struct 　　　　　B）struct color cl
{ int red; 　　　　　　　　　{ int red;
int green; 　　　　　　　　　int green;
int blue; 　　　　　　　　　 int blue;
} COLOR; };
COLOR cl;
C）struct color　　　　　 D）struct
{ int red;　　　　　　　 { int red;
int green; 　　　　　　　　int green;
int blue;　　　　　　　　　int blue;
} cl;　　　　　　　　　　 } cl;

（34）以下能正确定义一维数组的选项是（　）。
   A）int num[];　　　　　　　　　　B） #define N 100
 　　　　　　　　　　　　　　　　　　 int num[N];
   C）int num[0..100];　　　　 　　 D） int N=100;
 　　　　　　　　　　　　　　　　　 int num[N];

（35）下列选项中正确的语句组是（　）。
  A）char s[8]; s={"Beijing"};
  B）char *s; s={"Beijing"};
  C）char s[8]; s="Beijing";
  D）char *s; s="Beijing";

（36）已定义以下函数
fun(int *p)
{ return *p; }
该函数的返回值是（　）。
  A）不确定的值
  B）形参p中存放的值
  C）形参p所指存储单元中的值
  D）形参p的地址值

（37）下列函数定义中，会出现编译错误的是（　）。
  A）max(int x,int y,int *z) 　　B）int max(int x,y)
{ *z=x>y ? x:y; } 　　　　　　{ int z;
　　　　　　　　　　　　　　　z=x>y ? x:y;
　　　　　　　　　　　　　　return z;
　　　　　　　　　　　　　　}
  C）max(int x,int y) 　　　　 D）int max(int x,int y)
{ int z; 　　　　　　　　　　{ return(x>y?x:y); }
z=x>y?x:y; return(z);
}

（38）有以下程序
#include
#define F(X,Y) (X)*(Y)
main()
{ int a=3, b=4;
printf("%d\n", F(a++, b++));
}
程序运行后的输出结果是（　）。
  A）12
  B）15
  C）16
  D）20

（39）有以下程序
fun(int a, int b)
{ if(a>b) return(a);
else return(b);
}
main()
{ int x=3, y=8, z=6, r;
r=fun(fun(x,y), 2*z);
printf("%d\n", r);
}
程序运行后的输出结果是（　）。
  A）3
  B）6
  C）8
  D）12

（40）若有定义：int *p[3];，则以下叙述中正确的是（　）。
  A）定义了一个基类型为int的指针变量p，该变量具有三个指针
  B）定义了一个指针数组p，该数组含有三个元素，每个元素都是基类型为int的指针
  C）定义了一个名为*p的整型数组，该数组含有三个int类型元素
  D）定义了一个可指向一维数组的指针变量p，所指一维数组应具有三个int类型元素

（41）以下程序中函数scmp的功能是返回形参指针s1和s2所指字符串中较小字符串的首地址
#include
#include
char *scmp(char *s1, char *s2)
{ if(strcmp(s1,s2)<0)
return(s1);
else return(s2);
}
main()
{ int i; char string[20], str[3][20];
for(i=0;i<3;i++) gets(str[i]);
strcpy(string,scmp(str[0],str[1])); /*库函数strcpy对字符串进行复制*/
strcpy(string,scmp(string,str[2]));
printf("%s\n",string);
}
若运行时依次输入：abcd、abba和abc三个字符串，则输出结果为（　）。
  A）abcd
  B）abba
  C）abc
  D）abca

（42）有以下程序
struct s
{ int x,y; } data[2]={10,100,20,200};
main()
{ struct s *p=data;
printf("%d\n",++(p->x));
}
程序运行后的输出结果是（　）。
  A）10
  B）11
  C）20
  D）21

（43）有以下程序段
main()
{ int a=5,*b,**c;
c=&b; b=&a;
……
}
程序在执行了c=&b;b=&a;语句后，表达式：**c的值是（　）。
  A）变量a的地址
  B）变量b中的值
  C）变量a中的值
  D）变量b的地址

（44）有以下程序
#include
main()
{ char str[][20]={"Hello","Beijing"},*p=str;
printf("%d\n",strlen(p+20));
}
程序运行后的输出结果是（　）。
  A）0
  B）5
  C）7
  D）20

（45）已定义以下函数
fun(char *p2, char *p1)
{ while((*p2=*p1)!='\0'){ p1++;p2++; } }
函数的功能是 （　）。
  A）将p1所指字符串复制到p2所指内存空间
  B）将p1所指字符串的地址赋给指针p2
  C）对p1和p2两个指针所指字符串进行比较
  D）检查p1和p2两个指针所指字符串中是否有'\0'

（46）有以下程序
main()
{ int x=3, y=2, z=1;
printf("%d\n",x/y&~z);
}
程序运行后的输出结果是（　）。
  A）3
  B）2
  C）1
  D）0

（47）若fp已正确定义并指向某个文件，当未遇到该文件结束标志时函数feof(fp)的值为（　）。
  A）0
  B）1
  C）-1
  D）一个非0值

（48）下列关于C语言数据文件的叙述中正确的是（　）。
  A）文件由ASCII码字符序列组成，C语言只能读写文本文件
  B）文件由二进制数据序列组成，C语言只能读写二进制文件
  C）文件由记录序列组成，可按数据的存放形式分为二进制文件和文本文件
  D）文件由数据流形式组成，可按数据的存放形式分为二进制文件和文本文件

（49）有以下程序
main()
{ int a[3][3],*p,i;
p=&a[0][0];
for(i=0;i<9;i++) p[i]=i+1;
printf("%d \n",a[1][2]);
}
程序运行后的输出结果是（　）。
  A）3
  B）6
  C）9
  D）2

（50）有以下结构体说明和变量定义，如图所示，指针p、q、r分别指向一个链表中的三个连续结点。
struct node
{ int data;
struct node *next;
} *p, *q, *r;

现要将q和r所指结点的先后位置交换，同时要保持链表的连续，以下错误的程序段是（　）。
  A）r->next=q; q->next=r->next; p->next=r;
  B）q->next=r->next; p->next=r; r->next=q;
  C）p->next=r; q->next=r->next; r->next=q;
  D）q->next=r->next; r->next=q; p->next=r;

二、填空题（每空2分，共40分）

（1）计算机软件分为系统软件与应用软件，UNIX属于 〖1〗 。

（2）假设在当前盘的当前目录下有两个文件A.TXT和B.TXT，现要将文件B.TXT合并连接到文件A.TXT的后面。若使用TYPE命令，则完整的命令为 〖2〗 。

（3）Internet的信息服务方式分为基本服务和扩展服务，电子邮件属于 〖3〗 。

（4）在Windows环境下，利用菜单命令删除固定硬盘上的文件与文件夹，实际上是将需要删除的文件与文件夹移动到 〖4〗 文件夹中。

（5）在Windows环境下，为了进行"添加/删除程序"操作，首先打开 〖5〗 ，然后双击其中的相应图标。

（6）以下程序运行后的输出结果是 〖6〗 。
main()
{ int p=30;
printf("%d\n",(p/3>0 ? p/10 : p%3));
}


（7）以下程序运行后的输出结果是 〖7〗 。
main()
{ char m;
m='B'+32; printf("%c\n",m);
}


（8）以下程序运行后的输出结果是 〖8〗 。
main()
{ int a=1,b=3,c=5;
if (c=a+b) printf("yes\n");
else printf("no\n");
}

（9）以下程序运行后的输出结果是 〖9〗 。
main()
{ int i,m=0,n=0,k=0;
for(i=9; i<=11;i++)
switch(i/10)
{ case 0: m++;n++;break;
case 10: n++; break;
default: k++;n++;
}
printf("%d %d %d\n",m,n,k);
}

（10）执行以下程序后，输出'#'号的个数是 〖10〗 。
#include
main()
{ int i,j;
for(i=1; i<5; i++)
for(j=2; j<=i; j++) putchar('#');
}

（11）以下程序的功能是调用函数fun计算：m=1-2+3-4+…+9-10，并输出结果。请填空。
int fun( int n)
{ int m=0,f=1,i;
for(i=1; i<=n; i++)
{ m+=i*f;
f= 〖11〗 ;
}
return m;
}
main()
{ printf("m=%d\n", 〖12〗 ); }

（12）以下程序运行后的输出结果是 〖13〗
main()
{ int i,n[]={0,0,0,0,0};
for(i=1;i<=4;i++)
{ n[i]=n[i-1]*2+1;
printf("%d ",n[i]);
}
}

（13）以下程序运行后的输出结果是 〖14〗
main()
{ int i,j,a[][3]={1,2,3,4,5,6,7,8,9};
for(i=0;i<3;i++)
for(j=i+1;j<3;j++) a[j][i]=0;
for(i=0;i<3;i++)
{ for(j=0;j<3;j++) printf("%d ",a[i][j]);
printf("\n");
}
}

（14）以下程序运行后的输出结果是 〖15〗
int a=5;
fun(int b)
{ static int a=10;
a+=b++;
printf("%d ",a);
}
main()
{ int c=20;
fun(c);
a+=c++;
printf("%d\n",a);
}

（15）请在以下程序第一行的下划线处填写适当内容，使程序能正确运行。
〖16〗 ( double,double);
main()
{ double x,y;
scanf("%lf%lf",&x,&y);
printf("%lf\n",max(x,y));
}
double max(double a,double b)
{ return(a>b ? a:b); }

（16）以下程序运行后输入：3,abcde<回车>，则输出结果是 〖17〗
#include
move(char *str, int n)
{ char temp; int i;
temp=str[n-1];
for(i=n-1;i>0;i--) str[i]=str[i-1];
str[0]=temp;
}
main()
{ char s[50]; int n, i, z;
scanf("%d,%s",&n,s);
z=strlen(s);
for(i=1; i<=n; i++) move(s, z);
printf("%s\n",s);
}

（17）以下程序运行后的输出结果是 〖18〗
fun(int x)
{ if(x/2>0) fun(x/2);
printf("%d ",x);
}
main()
{ fun(6); }

（18）已有定义如下：
struct node
{ int data;
struct node *next;
} *p;
以下语句调用malloc函数，使指针p指向一个具有struct node类型的动态存储空间。请填空。
p = (struct node *)malloc( 〖19〗 );

（19）以下程序的功能是将字符串s中的数字字符放入d数组中，最后输出d中的字符串。例如，输入字符串：abc123edf456gh，执行程序后输出：123456。请填空。
#include
#include
main()
{ char s[80], d[80]; int i,j;
gets(s);
for(i=j=0;s[i]!='\0';i++)
if( 〖20〗 ) { d[j]=s[i]; j++; }
d[j]='\0';
puts(d);
}


03年9月二级C语言笔试试题答案

2003年9月二级C语言笔试试题答案


一、选择题
（1） C （2） A （3） B （4） A （5） D
（6） C （7） B （8） A （9） C （10）D
（11）A （12）C （13）D （14）B （15）D
（16）C （17）A （18）D （19）C （20）C
（21）B （22）B （23）C （24）C （25）A
（26）D （27）C （28）A （29）D （30）A
（31）C （32）D （33）B （34）B （35）D
（36）C （37）B （38）A （39）D （40）B
（41）B （42）B （43）C （44）C （45）A
（46）D （47）A （48）D （49）B （50）A

二、填空题

（1） 〖1〗 系统软件

（2） 〖2〗 TYPE B.TXT >> A.TXT

（3） 〖3〗 基本服务

（4） 〖4〗 回收站

（5） 〖5〗 控制面板

（6） 〖6〗 3

（7） 〖7〗 b

（8） 〖8〗 yes

（9） 〖9〗 1 3 2

（10）〖10〗 6

（11）〖11〗 -f

 〖12〗 fun(10)

（12）〖13〗 1 3 7 15

（13）〖14〗 1 2 3
 0 5 6
 0 0 9

（14）〖15〗 30 25

（15）〖16〗 double max

（16）〖17〗 cdeab

（17）〖18〗 1 3 6

（18）〖19〗 sizeof(struct node)

（19）〖20〗 s[i]>='0' && s[i]<='9'


04年4月二级C语言笔试试题

2004年4月二级C语言笔试试题

一、选择题（1-40）每题1分，（41-50）每题2分，共60分）
下列各题A）、B）、C）、D）四个选项中，只有一个选项是正确的，请将正确选项涂写在答题卡相应位置上，答在试卷上不得分。
(1) 1MB等于（　）。
A) 1000字节 　　　　　　B) 1024字节
C) 1000×1000字节　　　 D) 1024×1024字节

    (2) 与十六进制数200等值的十进制数为（　）。
A) 256 　　B) 512　　 C) 1024 　　　D) 2048

    (3) 所谓“裸机”是指（　）。
A) 单片机　　　　　　　　　　 B) 单板机
C) 不装备任何软件的计算机 　　D) 只装备操作系统的计算机

   (4) 能将高级语言编写的源程序转换成目标程序的是（　）。
A) 链接程序　　 B) 解释程序 　　C) 编译程序 　　D) 编辑程序

   (5) 在64位计算机中，一个字长所占的字节数为（　）。
A) 64 　　B) 8 　　C) 4　　 D) 1

   (6) 在Windows环境下，当一个应用程序窗口被最小化后，该应用程序（　）。
A) 继续在后台运行 　　　B) 继续在前台运行
C) 终止运行 　　　　　　D) 暂停运行

   (7) 在Windows环境下，能实现窗口移动的操作是（　）。
A) 用鼠标拖动窗口中的任何部位 　　　B) 用鼠标拖动窗口的边框
C) 用鼠标拖动窗口的控制按钮 　　　　D) 用鼠标拖动窗口的标题栏

   (8) 在Windows环境下，PrintScreen键的作用是（　）。
A) 打印当前窗口的内容　　　　　　 B) 打印屏幕内容
C) 复制屏幕到剪贴板 　　　　　　　D) 复制当前窗口到剪贴板

   (9) Internet的通信协议是（　）。
A) TCP/IP　　　 B) BBS　　 C) WWW 　　D) FTP

   (10) 下列叙述中正确的是（　）。
A) 计算机病毒只感染可执行文件
B) 计算机病毒只感染文本文件
C) 计算机病毒只能通过软件复制的方式进行传播
D) 计算机病毒可以通过网络或读写磁盘等方式进行传播

   (11) 一个算法应该具有“确定性”等5个特性，下面对另外4个特性的描述中错误的是（　）。
A) 有零个或多个输入 　　　　B) 有零个或多个输出
C) 有穷性 　　　　　　　　　D) 可行性

   (12) 以下叙述中正确的是（　）。
A) C语言的源程序不必通过编译就可以直接运行
B) C语言中的每条可执行语句最终都将被转换成二进制的机器指令
C) C源程序经编译形成的二进制代码可以直接运行
D) C语言中的函数不可以单独进行编译东方教育网提供 Http://www.eastedu.com.cn

   (13) 以下符合C语言语法的实型常量是（　）。
A) 1.2E0.5 　　B) 3.14.159E 　　　C) .5E-3 　　　D) E15

   (14) 以下4组用户定义标识符中，全部合法的一组是（　）。
A) _main 　　B) If　　 C) txt　　 D)　int
　 enclude　　　-max　　　REAL　　　　k_2
　 sin　　　　　turbo 　　3COM　　　　_001

   (15) 若以下选项中的变量已正确定义，则正确的赋值语句是（　）。
A) x1=26.8%3　　 B) 1+2=x2 　　C) x3=0x12　　 D) x4=1+2=3;

   (16) 设有以下定义
int a=0;
double b=1.25;
char c=’A’;
#define d 2
则下面语句中错误的是（　）。
A) a++; 　　B) b++　　 C) c++; 　　D) d++;

   (17) 设有定义：float a=2,b=4,h=3;,以下C语言表达式与代数式 计算结果不相符的是（　）。
A) (a+B) *h/2 　　　　　B) (1/2)*(a+B) *h
C) (a+B) *h*1/2 　　　　D) h/2*(a+B)

   (18) 有以下程序
main( )
{
 int x=102，y=012;
 printf(“%2d,%2d\n”,x,y);
}
执行后输出结果是（　）。
A) 10,01 　　　B) 02,12 　　C) 102,10　　 D) 02,10

   (19) 以下4个选项中，不能看作一条语句的是（　）。
A) {;} 　　B) a=0,b=0,c=0; 　　C) if(a>0); 　　D) if(b==0) m=1;n=2;

   (20) 设有定义：int a,*pa=&a;以下scanf语句中能正确为变量a读入数据的是（　）。
A) scanf(“%d”,pA) ;　　　　 B) scanf(“%d”,A) ;
C) scanf(“%d”,&pA) ;　　　　D) scanf(“%d”,*pA) ;

   (21) 以下程序段中与语句k=a>b?(b>c?1:0):0；功能等价的是（　）。
A) if((a>B) &&(b>C) ) k=1; 　　　B) if((a>B) ||(b>C) ) k=1
　　else k=0;　　　　　　　　　　　　 else k=0;
C) if(a<=B) k=0;　　　　　　　　　 D) if(a>B) k=1;
 else if(b<=C) k=1;　　　　　　　　　 else if(b>C) k=1;

(22) 有以下程序
main( )
{ char k; int I;
　 for(i=1;i<3;i++)
 　{ scanf(“%c”,&k);
 　　switch(k)
 　　　{ case ‘0’: printf(“another\n”);
　　　　 case ‘1’: printf(“number\n”);
 　　　}
　 }
}
程序运行时，从键盘输入：01<回车>，程序执行后的输出结果是（　）。
A) another 　　B) another　　 C) another 　　D) number
　　number　　　　 number 　　　　number　　　　 number
 　another 　　　　number

   (23) 有以下程序
main( )
{ 　int x=0,y=5,z=3;
 　　while(z-->0&&++x<5) y=y-1;
　　　　 printf(“%d,%d,%d\n”,x,y,z);
}
程序执行后的输出结果是（　）。
A) 3,2,0 　　B) 3,2,-1 　　C) 4,3,-1 　　D) 5,-2,-5

   (24) 有以下程序
main( )
{ int i,s=0;
 for(i=1;i<10;i+=2) s+=i+1;
 printf(“%d\n”,s);
}
程序执行后的输出结果是（　）。
A) 自然数1～9的累加和 　　　　B) 自然数1～10的累加和
C) 自然数1～9中的奇数之和 　　D) 自然数1～10中的偶数之和

   (25) 有以下程序东方教育网提供 Http://www.eastedu.com.cn
main( )
{ int i,n=0;
 for(i=2;i<5;i++)
 { do
 { if(i%3) continue;
　　 　n++;
 } while(!i);
　　　n++;
 }
 printf(“n=%d\n”,n);
}
程序执行后的输出结果是（　）。
A) n=5 　　B) n=2　　 C) n=3 　　D) n=4

   (26) 若程序中定义了以下函数
 double myadd(double a,double B)
 { return (a+B) ;}
并将其放在调用语句之后，则在调用之前应该对该函数进行说明，以下选项中错误的说明是（　）。
A) double myadd(double a,B) ;
B) double myadd(double,double);
C) double myadd(double b,double A) ;
D) double myadd(double x,double y);

   (27) 有以下程序
char fun(char x , char y)
{ if(x return y;
}
　main( )
　{ int a=’9’,b=’8’,c=’7’;
　　 printf(“%c\n”,fun(fun(a,B) ,fun(b,C) ));
　}
程序的执行结果是（　）。
A) 函数调用出错　 　B）8 　　C）9 　　D）7

   (28) 设有定义：int n=0,*p=&n,**q=&p;则以下选项中，正确的赋值语句是（　）。
A) p=1;　　 B) *q=2; 　　C) q=p; 　　D) *p=5;

   (29) 有以下程序
void f(int v , int w)
{ int t;
　 t=v;v=w;w=t;
}
main( )
{ int x=1,y=3,z=2;
 if(x>y) f(x,y);
 else if(y>z) f(y,z);
 else f(x,z);
 printf(“%d,%d,%d\n”,x,y,z);
}
执行后输出结果是（　）。
A) 1,2,3 　　B) 3,1,2 　　C) 1,3,2　　 D) 2,3,1

  (30) 有以下程序段
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

   (31)有以下程序
main( )
{ char a[]=”abcdefg”,b[10]=”abcdefg”;
 printf(“%d %d\n”,sizeof(A) ,sizeof(B) );
}
执行后输出结果是（　）。
A) 7 7 　　　B) 8 8 　　　C) 8 10　　 D) 10 10

   (32) 有以下程序
void swap1(int c[])
{ int t;
 t=c[0];c[0]=c[1];c[1]=t;
}
void swap2(int c0,int c1)
{ int t;
 t=c0;c0=c1;c1=t;
}
main( )
{ int a[2]={3,5},b[2]={3,5};
 swap1(A) ; swap2(b[0],b[1]);
 printf(“%d %d %d %d\n”,a[0],a[1],b[0],b[1]);
}
其输出结果是（　）。
A) 5 3 5 3 　　B) 5 3 3 5　　 C) 3 5 3 5　　 D) 3 5 5 3

   (33) 有以下程序
void sum(int *A)
{ a[0]=a[1];}
main( )
{ int aa[10]={1,2,3,4,5,6,7,8,9,10},i;
 for(i=2;i>=0;i--) &nb
 sp; sum(&aa[i]);
 printf(“%d\n”,aa[0]);
}
执行后的输出结果是（　）。
A) 4 　　B) 3 　　C) 2　　 D) 1

   (34) 有以下程序
int f(int b[][4])
{ int i,j,s=0;
 for(j=0;j<4;j++)
 { i=j;
 if(i>2) i=3-j;
 s+=b[i][j];
 }
return s;
}
main( )
{ int a[4][4]={{1,2,3,4},{0,2,4,5},{3,6,9,12},{3,2,1,0}};
printf(“%d\n”,f(A) );
}
执行后的输出结果是（　）。
A) 12　　　 B) 11　　 C) 18 　　　D) 16

   (35) 有以下定义
#include
char a[10],*b=a;
不能给数组a输入字符串的语句是（　）。
A) gets(A)　　 B) gets(a[0])　　 C) gets(&a[0]);　　 D) gets(B) ;

   (36) 有以下程序
main( )
{ char *p[10]={“abc”,”aabdfg”,”dcdbe”,”abbd”,”cd”};
 printf(“%d\n”,strlen(p[4]));
}
执行后输出结果是（　）。
A) 2　　 B) 3 　　C) 4　　 D) 5

   (37) 有以下程序
int a=2;
int f(int *A)
{return (*A) ++;}
main( )
{ int s=0;
 { int a=5;
 s+=f(&A) ;
 }
 s+=f(&A) ;
 printf(“%d\n”,s);
}
执行后输出结果是（　）。
A) 10 　　B) 9　　 C) 7 　　D) 8

   (38) 有以下程序
#define f(x) x*x
main( )
{ int i;
 i=f(4+4)/f(2+2);
 printf(“%d\n”,i);
}
执行后输出结果是（　）。
A) 28　　 B) 22 　　C) 16 　　D) 4

   (39) 设有以下语句
typedef struct S
{ int g; char h;} T;
则下面叙述中正确的是（　）。
A) 可用S定义结构体变量 　　B）可以用T定义结构体变量
C）S是struct类型的变量 　　D）T是struct S类型的变量

   (40) 有以下程序
struc STU
{ char name[10];
 int num;
};
void f1(struct STU C)
{ struct STU b={“LiSiGuo”,2042};
 c=b;
}
void f2(struct STU *C)
{ struct STU b={“SunDan”,2044};
 *c=b;
}
main( )
{ struct STU a={“YangSan”,2041},b={“WangYin”,2043};
 f1(A) ;f2(&B) ;
 printf(“%d %d\n”,a.num,b.num);
}
执行后的输出结果是（　）。
A）2041 2044　　 B）2041 2043　　 C）2042 2044 　　D）2042 2043

   (41) 有以下程序
main( )
{ unsigned char a,b;
 a=4|3;
 b=4&3;
 printf(“%d %d\n”,a,b(;
}
执行后输出结果是（　）。
A) 7 0 　　B) 0 7　　 C) 1 1　　 D) 43 0

   (42) 下面程序的功能是输出以下形式的金字塔图案是：
 *
 ***
 *****
 *******
main( )
{ int i,j;
 for(i=1;i<=4;i++)
 { for(j=1;j<=4-i;j++) printf(“ “);
 for(j=1;j<=_______;j++) printf(“*”);
 printf(“\n”);
}
 }
在下划线处应填入的是（　）。
A) i 　　B) 2*i-1　　 C) 2*i+1 　　D) i+2

   (43) 有以下程序
void sort(int a[],int n)
{ int i,j,t;
 for(i=0;i for(j=i+2;j if(a[i]}
main()
{ int aa[10]={1,2,3,4,5,6,7,8,9,10},i;
 sort(aa,10);
 for(i=0;i<10;i++) printf(“%d”,aa[i]);
 printf(“\n”);
}
其输出结果是（　）。
A) 1,2,3,4,5,6,7,8,9,10, 　　B) 10,9,8,7,6,5,4,3,2,1,
C) 9,2,7,4,5,6,3,8,1,10, 　　D) 1,10,3,8,5,6,7,4,9,2,

   (44) 以下程序段中，不能正确赋字符串（编译时系统会提示错误）的是
A) char s[10]=”abcdefg”;　　　 B) char t[]=”abcdefg”,*s=t;
C) char s[10];s=”abcdefg”;　　 D) char s[10];strcpy(s,”abcdefg”);

   (45) 有以下程序
#include
main(int argc ,char *argv[ ])
{ int i,len=0;
 for(i=1;i printf(“5d\n”,len);
}
经编译链接后生成的可执行文件是ex.exe，若运行时输入以下带参数的命令行
ex abcd efg h3 k44
执行后输出结果是（　）。
A) 14　　 B) 12 　　C) 8　　 D) 6

   (46) 有以下程序
void f(int a[],int i,int j)
{ int t;
 if(i { t=a[i]; a[i]=a[j];a[j]=t;
 f(a,i+1,j-1);
 }
}
main( )
{ int i,aa[5]={1,2,3,4,5};
 f(aa,0,4);
 for(i=0;i<5;i++) printf(“%d,”,aa[i]); printf(“\n”);
 }
执行后输出结果是（　）。
A) 5,4,3,2,1,　　 B) 5,2,3,4,1, 　　C) 1,2,3,4,5,　　 D) 1,2,3,4,5,

   (47) 有以下程序
struct STU
{ char name[10];
 int num;
 int Score;
};
main( )
{ struct STU s[5]={{“YangSan”,20041,703},{“LiSiGuo”,20042,580},
 {“wangYin”,20043,680},{“SunDan”,20044,550},
 {“Penghua”,20045,537}},*p[5],*t;
 int i,j;
 for(i=0;i<5;i++) p[i]=&s[i];
 for(i=0;i<4;i++)
 for(j=i+1;j<5;j++)
 if(p[i]->Score>p[j]->Score)
 { t=p[i];p[i]=p[j];p[j]=t;}
 printf(“5d %d\n”,s[1].Score,p[1]->Score);
}
执行后输出结果是（　）。
A) 550 550 　　B) 680 680　　 C) 580 550　　 D) 580 680

   (48) 有以下程序
#include
struct NODE{
int num;
struct NODE *next;
};
main( )
{ struct NODE *p,*q,*r;
int sum=0;
p=(struct NODE *)malloc(sizeof(struct NODE));
q=(struct NODE *)malloc(sizeof(struct NODE));
r=(struct NODE *)malloc(sizeof(struct NODE));
p->num=1;q->num=2;r->num=3;
p->next=q;q->next=r;r->next=NULL;
sum+=q->next->num;sum+=p->num;
printf(“%d\n”,sum);
}
执行后的输出结果是（　）。
A) 3　　 B) 4 　　C) 5 　　D) 6

   (49) 有以下程序
#include
main( )
{ FILE *fp; int i,k=0,n=0;
 fp=fopen(“d1.dat”,”w”);
 for(i=1;i<4;i++) fprintf(fp,”%d”,i);
 fclose(fp);
 fp=fopen(“d1.dat”,”r”);
 fscanf(fp,”%d%d”,&k,&n); printf(“%d %d\n”,k,n);
 fclose(fp);
}
执行后输出结果是（　）。
A) 1 2　　 B) 123 0　　 C) 1 23　　 D) 0 0

   (50) 有以下程序（提示：程序中fseek(fp,-2L*sizeof(int),SEEK_END) ;语句的作用是使位置指针从文件尾向前移　　　　　　2*sizeof(int)字节）
#include
main( )
{ FILE *fp; int i,a[4]={1,2,3,4},b;
 fp=fopen("data.dat","wb");
 for(i=0;i<4;i++) fwrite(&a[i],sizeof(int),1,fp);
 fclose(fp);
fp=fopen("data.dat

","rb")；
fseek(fp,-2L*sizeof(int).SEEK_END) ;
fread(&b,sizeof(int),1,fp);/*从文件中读取sizeof(int)字节的数据到变量b中*/
fclose(fp);
printf("%d\n",B) ;
}
执行后输出结果是（　）。
A) 2　　 B) 1　　 C) 4　　 D) 3


  二、填空题（每空2分，共40分）
请将每一个空的正确答案写在答题卡【1】至【20】序号的横线上, 答在试卷上不得分.

   (1) E-mail地址由用户名和域名两部分组成，这两部分的分隔符为【1】 。

   (2) 计算机网络分为广域网和局域网，因特网属于【2】 。
 
   (3) 从Windows环境进入MS－DOS方式后，返回Windows环境的DOS命令为【3】 。

   (4) 在Windows环境下，只要在“开始”菜单中单击【4】选项，就可以查阅最近打开过的文档清单。

   (5) 计算机的运算速度可以用MIPS来描述，1MIPS是指每秒执行【5】条指令。

   (6) 已知字符A的ACSII码值为65，以下语句的输出结果是【6】
　　char ch=’B’;
　　printf(“%c %d\n”,ch,ch);

   (7) 有以下语句段
　　int n1=10,n2=20;
　　printf(“ 【7】 ”,n1.n2);
　　要求按以下格式输出n1和n2的值，每个输出行从第一列开始，请填空。
　　n1=10
　　n2=20

   (8) 有以下程序
　main( )
　　{ int t=1,i=5;
　　 for(;i>=0;i--) t*=i;
 　　printf(“%d\n”,t);
　　}
执行后输出结果是【8】 。

   (9) 有以下程序
　main( )
　　{ int n=0,m=1,x=2;
　　 if(!n) x-=1;
　　 if(m) x-=2;
　　 if(x) x-=3;
　　 printf(“%d\n”,x);
　　}
执行后输出结果是【9】 。

   (10) 有以下程序
#include
main( )
{ char ch1,ch2; int n1,n2;
 ch1=getchar(); ch2=getchar();
 n1=ch1-‘0’; n2=n1*10+(ch2-‘0’);
 printf(“%d\n”,n2);
}
程序运行时输入：12<回车>，执行后输出结果是【10】 。

   (11) 有以下程序
　void f( int y,int *x)
　　{y=y+*x; *x=*x+y;}
　　　main( )
　　　{ int x=2,y=4;
　　　　 f(y,&x);
　　　　 printf(“%d %d\n”,x,y);
　　}
执行后输出的结果是【11】 。

   (12) 函数fun的功能是计算xn
　double fun(double x,int n)
　　{ int i; double y=1;
　　　 for(i=1;i<=n;i++) y=y*x;
 　　　return y;
　　}
主函数中已经正确定义m,a,b变量并赋值，并调用fun函数计算：m=a4+b4-(a+B) 3。实现这一计算的函数调用语句为【12】 。

   (13) 下面rotate函数的功能是：将n行n列的矩阵A转置为A’，例如：
 1 2 3 4 1 5 9 13
 5 6 7 8 2 6 10 14
 当 A＝ 9 10 11 12 则 A’= 3 7 11 15
 13 14 15 16 4 8 12 16
请填空
#define N 4
void rotate(int a[][N])
{ int i,j,t;
 for(i=0;i for(j=0;【13】;j++)
 { t=a[i][j];
 【14】 ；
 a[j][i]=t;
 }
}

   (14) 以下sstrcpy( )函数实现字符串复制，即将t所指字符串复制到s所指向内存空间中，形成一个新的字符串s。请填空
void sstrcpy(char *s,char *t)
{ while(*s++=【15】)；}
main( )
{ char str1[100],str2[]=”abcdefgh”;
 sstrcpy(str1,str2);
 printf(“%s\n”,str1);
}

   (15) 下列程序的运行结果是：【16】
#include
char *ss(char *s)
{ return s+strlen(s)/2;}
main( )
{ char *p,*str=”abcdefgh”;
 p=ss(str); printf(“%s\n”,p);
}

   (16) 下面程序的运行结果是：【17】
int f( int a[], int n)
{ if(n>1) return a[0]+f(&a[1],n-1);
 else return a[0];
}
main ( )
{ int aa[3]={1,2,3},s;
 s=f(&aa[0],3); printf(“%d\n”,s);
}

   (17) 以下程序中给指针p分配三个double型动态内存单元，请填空。
# include
main ( )
{ double *p;
 p=(double *) malloc(【18】);
 p[0]=1.5;p[1]=2.5;p[2]=3.5;
 printf(“%f%f%f\n”,p[0],p[1],p[2]);
}

   (18) 以下程序的运行结果是【19】
# include
typedef struct student{
 char name[10];
 long sno;
 float score;
 }STU;
main( )
{ STU
a={“zhangsan”,2001,95},b={“Shangxian”,2002,90},c={“Anhua”,2003,95},d,*p=&d;
 d=a;
 if(strcmp(a.name,b.name)>0) d=b;
 if(strcmp(c.name,d.name)>0) d=c;
 printf(“%ld%s\n”,d.sno,p->name);
 }

   (19) 以下sum函数的功能是计算下列级数之和。
 S=1＋x+x2/2!+x3/3!+........+xn/n!
 请给函数中的各变量正确赋初值。
 double sum( double x, int n )
 { int i; double a,b,s;
 【20】
 for( i=1;i<=n;i++)
 { a=a*x; b=b*i; s=s+a/b; }
 return s;
 }


04年4月二级C语言笔试试题答案

2004年4月二级C语言笔试试题答案

    选择题
     01～10：DBCCB ADCAD

     11～20：BBCAC DBCDA

     21～30: ACBDD ADDCD

     31～40: CBADB ACADA

     41～50: ABCCD ACBBD

   填空题：
 1、@

     2、广域网

     3、EXIT或exit

     4、文档

     5、百万条或一百万条或1000000条

     6、B 66

     7、n1=%d\nn2=%d

     8、0

     9、－4

     10、12

     11、8 4

     12、fun(a,4)+fun(b,4)-fun(a+b,3);

     13、j<=i

     14、a[i][j]=a[j][i]

     15、*t++

     16、6

     17、efgh

     18、3*sizeof(double)

     19、2002Shangxian

     20、a=1.0;b=1.0;s=1.0;



04年9月二级C语言笔试试题

2004年9月二级C语言笔试试题

一、选择题

1.与十进制数200等值的十六进制数为 （　）。
A)A8
B)A4
C)C8
D)C4

2.DOS文件系统的组织结构属于（　）。
A)星形结构
B)网形结构
C) 环形结构
D)树形结构

3. 对存储器按字节进行编址，若某存储器芯片共有10根地址线，则该存储器芯片的存储容量为（　）。
A)1KB
B)2KB
C)4KB
D)8KB

4. 在DOS环境下，代表键盘和显示器的设备文件名为 （　）。
A)PRN
B)CON
C)NUL
D)LPT

5. 计算机网络的主要特点是（　）。
A) 运算速度快
B)运算精度高
C)资源共享
D)人机交互

6.磁盘处于写保护状态时其中的数据（　）。
A)不能读出,不能删改
B)可以读出，不能删改
C)不能读出，可以删改
D)可以读出，可以删改

7.从Windows环境进入MS-DOS方式后，返回Windows环境的DOS命令为（　）。
A)EXIT
B)QUIT
C)RET
D)MSDO

8. 在Windows环境下，若资源管理器左宣传品中的某文件夹左边标有“＋”标记，则表示（　）。
A)该文件夹为空
B)该文件夹中含有子文件夹
C)该文件夹中只包含有可执行文件
D)该文件夹中包含系统文件

9.在Windows菜单中，暗淡的命令名项目表示该命令（　）。
A)暂时不能用
B)正在执行
C)包含下一层菜单
D)包含对话框

10.在Windows环境下，单击当前窗口中的按钮“× ”（右上角的关闭按钮），其功能是（　）。
A)将当前应用程序转为后台运行
B)退出Windows后再关机
C)终止当前应用程序的运行
D)退出Windows后重新启动计算机

11.用C语言编写的代码程序（　）。
A)可立即执行
B)是一个源程序
C)经过编译即可执行
D)经过编译解释才能执行

12.结构化程序由三种基本结构组成，三种基本结构组成的算法（　）。
A)可以完成任何复杂的任务
B)只能完成部分复杂的任务
C)只能完成符合结构化的任务
D)只能完成一些简单的任务 13. 以下定义语句中正确的是

13. 以下定义语句中正确的是（　）。
A)char a='A'b='B';
B)float a=b=10.0;
C)int a=10,*b=&a;
D)float *a,b=&a;

14.下列选项中，不能用作标识符的是（　）。
A)_1234_
B)_1_2
C)int_2_
D)2_int_

15.有以下定义语句
double a,b; int w; long c;
若各变量已正确赋值，则下列选项中正确的表达式是（　）。
A)a=a+b=b++
B)w%(int)a+b)
C)(c+w)%(int)a
D)w=a==b;

16.有以下程序
 main()
 { int m=3,n=4,x;
 x=-m++;
 x=x+8/++n;
 printf("%d\n",x);
 }
 程序运行后的输出结果是（　）。
A)3
B)5
C)-1
D)-2

17.有以下程序
 main()
 { char a='a',b;
 print("%c,",++a);
 printf("%c\n",b=a++);
 }
 程序运行后的输出结果是（　）。
A)b,b
B)b,c
C)a,b
D)a,c

18.有以下程序
 main()
 { int m=0256,n=256;
 printf("%o %o\n",mn,n);
 }
 程序运行后的输出结果是（　）。
A)0256 0400
B)0256 256
C)256 400
D)400 400

19.有以下程序
 main()
 { int a=666,b=888;
 printf("%d\n",a,b);
 }
 程序运行后的输出结果是（　）。
A)错误信息
B)666
C)888
D)666,888

20.有以下程序
 main()
 { int i;
 for(i=0;i<3;i++)
 switch(i)
 {
 case 0:printf("%d",i);
 case 2:printf("%d",i);
 default:printf("%d",i);
 }
 }
 程序运行后的输出结果是 （　）。
A)022111
B)021021
C)000122
D)012

21.若x和y代表整型数，以下表达式中不能正确表示数学关系|x-y|<10的是 （　）。
A)abs(x-y)<10
B)x-y>-10&& x-y<10
C)@(x-y)<-10||!(y-x)>10
D)(x-y)*(x-y)<100

22.有以下程序
 main()
 {
 int a=3,b=4,c=5,d=2;
 if(a>b)
 if(b>c)
 printf("%d",d++ +1);
 else
 printf("%d",++d +1);
 printf("%d\n",d);
 }
 程序运行后的输出结果是（　）。
A)2
B)3
C)43
D)44

23.下列条件语句中，功能与其他语句不同的是 （　）。
A) if(a) printf("%d\n",x); else printf("%d\n",y);
B) if(a==0) printf("%d\n",y); else printf("%d\n",x);
C) if (a!=0) printf("%d\n",x); else printf("%d\n",y);
D) if(a==0) printf("%d\n",x); else printf("%d\n",y);

24.有以下程序
 main()
 { int i=0,x=0;
 for (;;)
 {
 if(i==3||i==5) continue;
 if (i==6) break;
 i++;
 s+=i;
 };
 printf("%d\n",s);
 }
 程序运行后的输出结果是 （　）。
A)10
B)13
C)21
D)程序进入死循环

25.若变量已正确定义，要求程序段完成求5!的计算，不能完成此操作的程序段是（　）。
A)for(i=1,p=1;i<=5;i++) p*=i;
B)for(i=1;i<=5;i++){ p=1; p*=i;}
C)i=1;p=1;while(i<=5){p*=i; i++;}
D)i=1;p=1;do{p*=i; i++; }while(i<=5);

26.有以下程序
 main()
 { char a,b,c,d;
 scanf("%c,%c,%d,%d",&a,&b,&c,&d);
 printf("c,%c,%c,%c\n",a,b,c,d);
 }
 若运行时从键盘上输入：6,5,65,66<回车>。则输出结果是（　）。
A)6,5,A,B
B)6,5,65,66
C)6,5,6,5
D)6,5,6,6

27)以下能正确定义二维数组的是（　）。
A)int a[][3];
B)int a[][3]=2{2*3};
C)int a[][3]={};
D)int a[2][3]={{1},{2},{3,4}};

28. 有以下程序
 int f(int a)
 { return a%2; }
 main()
 { int s[8]={1,3,5,2,4,6},i,d=0;
 for (i=0;f(s);i++) d+=s;
 printf("%d\n",d);
 }
 程序运行后的输出结果是 （　）。
A)9
B)11
C)19
D)21 

29.若有以下说明和语句，int c[4][5],(*p)[5];p=c;能正确引用c数组元素的是（　）。
A)p+1
B)*(p+3)
C)*(p+1)+3
D)*(p[0]+2])

30.有以下程序
 main()
 { int a=7,b=8,*p,*q,*r;
 p=&a;q=&b;
 r=p; p=q;q=r;
 printf("%d,%d,%d,%d\n",*p,"q,a,b);
 }
 程序运行后的输出结果是 （　）。
A)8,7,8,7
B)7,8,7,8
C)8,7,7,8
D)7,8,8,7

31.s12和s2已正确定义并分别指向两个字符串。若要求：当s1所指串大于s2所指串时，执行语句S;则以下选项中正确的是
（　）。
A)if(s1>s2)S;
B)if(strcmp(s1,s2))S;
C)if(strcmp(s2,s1)>0)S;
D)if(strcmp(s1,s2)>0)S;

32.设有定义语句
int x[6]={2,4,6,8,5,7},*p=x,i;
要求依次输出x数组6个元素中的值，不能完成此操作的语句是（　）。
A)for(i=0;i<6;i++) printf("%2d",*(p++));
B)for(i=0;i<6;i++) printf("%2d",*(p+i));
C)for(i=0;i<6;i++) printf("%2d",*p++);
D)for(i=0;i<6;i++) printf("%2d",(*p)++);

33.有以下程序
 #include
 main()
 {int a[]={1,2,3,4,5,6,7,8,9,10,11,12,},*p=a+5,*q=NULL;
 *q=*(p+5);
 printf("%d %d\n",*p,*1);
 }
 程序运行后的输出结果是（　）。
A)运行后报错
B)6 6
C)6 11
D)5 10

34有以下定义和语句
int a[3][2]={1,2,3,4,5,6,},*p[3];
p[0]=a[1];
则*p[0]+1)所代表的数组元素是（　）。
A)a[0][1]
B)a[1][0]
C)a[1][1]
D)a[1][2]

35.有以下程序
 main()
 {char str[][10]={"China","Beijing"},*p=str;
 printf("%s\n",p+10);
 }
 程序运行后的输出结果是（　）。
A) China
B)Bejing
C)ng
D)ing 

36. 有以下程序
 main()
 {char s[]="ABCD",*p;
 for(p=s+1;p<S+4;P++)PRINTF("%S\N",P);
 }
 程序运行后的输出结果是（　）。
A) ABCD
 BCD
 CD
 D
B)A
  B
  C
  D
C)B
  C
  D
D)BCD
  CD
  D

37.在函数调用过程中，如果函数funA调用了函数 funB,函数funB又调用了函数funA，则（　）。
A)称为函数的直接递归调用
B)称为函数的间接递归调用
C)称为函数的循环调用
D)C语言中不允许这样的递归调用

38.已有定义：int i,a[10],*p;,则合法的赋值语句是（　）。
A)p=100;
B)p=a[5];
C)p=a[2]+2;
D)p=a+2;

39.以下叙述中正确的是 （　）。
A)局部变量说明为static存储数，其生存期将得到延长
B)全局变量说明为static存储类，其作用域将被扩大
C)任何存储类的变量在未赋初值时，其值都是不确定的
D)形参可以使用的存储类说明符与局部变量完全相同

40.设有定义语句：char c1=92,c2=92;,则以下表达式中值为零的是（　）。
A)c1^c2
B)c1&c2
C)~c2
D)c1|c2

41.程序中对fun函数有如下说明
 void *fun();
 此说明的含义是：（　）。
A)fun了数无返回值
B)fun函数的返回值可以是任意的数据类型
C)fun函数的返回值是无值型的指针类型
D)指针fun指向一个函数，该函数无返回值 

42.有以下程序
 main()
 { char s[]"Yes\n/No",*ps=s;
 puts(ps+4);
 *(ps+4)=0;
 puts(s);
 }
 程序运行后的输出结果是 （　）。
A)n/No /No
B)/No /No
C)n/NO Yes
D) Yes Yes Yes /No

43.有以下程序
 main()
 { unsigned int a;
 int b=-1;
 a=b;
 printf("%u",a);
 }
 程序运行后的输出结果是（　）。
A)-1
B)65535
C)32767
D)-32768

44.有以下程序
 void fun(int *a,int i,int j)
 { int t;
 if(i<J)
 { t=a;a=a[j];a[j]=t;
 i++; j--;
 fun(a,i,j);
 }
 }
 main()
 { int x[]={2,6,18},i;
 fun(x,0,3);
 for(i=0;i<4;i++) printf("%2d",x);
 printf("\n");
 }
 程序运行后的输出结果是 （　）。
A)1 2 6 8
B) 8 6 2 1
C) 8 1 6 2
D)8 6 1 2

45.有以下说明和定义语句
 struct student
 { int age; char num[8];};
 struct student stu[3]={{20,"200401"},{21,"200402"},{10\9,"200403"}};
 struct student *p=stu;
 以下选项中引用结构体变量成员的表达式错误的是 （　）。
A) (p++)->num
B)p->num
C)(*p).num
D)stu[3].age

46.有以下程序
 main()
 { int x[]={1,3,5,7,2,4,6,0},i,j,k;
 for(i=0;i<3;i++)
 for (j=2;j>=i;j--)
 if(x[j+1]>x[j]){ k=x[j];x[j]=x[j+1];x[j+1]=k;}
 for(i=0;i<3;i++)
 for(j=4;j<7-i;j++)
 if(x[j+1]>x[j]){ k=x[j];x[j]=x[j+1];x[j+1]=k;}
 for (i=0;i<3;i++)
 for(j=4;j<7-i;j++)
 if(x[j]>x[j+1]){ k=x[j];x[j]=x[j+1];x[j+1]=k;}
 for (i=0;i<8;i++) printf("%d",x);
 printf("\n");
 }
 程序运行后的输出结果是：（　）。
A)75310246
B)01234567
C)76310462
D)13570246

47.有如下程序
 #include
 main()
 {FILE *fp1;
 fp1=fopen("f1.txt","w");
 fprintf(fp1,"abc");
 fclose(fp1);
 }
 若文本文件f1.txt中原有内容为：good，则运行以上程序后文件f1.txt中的内容为（　）。
A)goodabc
B)abcd
C)abc
D)abcgood

48~50.以下程序的功能是：建立一个带有头结点的单向链表，并将存储在数组中的 字符依次转储到链表的各个结点中，请从与下划线处号码对应的一组选若中选择出 正确的选项。
 #include
 stuct node
 { char data; struct node *next;};
 (48) CreatList(char *s)
 { struct node *h,*p,*q);
 h=(struct node *) malloc(sizeof(struct node));
 p=q=h;
 while(*s!='\0')
 { p=(struct node *) malloc(sizeof(struct node));
 p->data= (49) ;
 q->next=p;
 q= (50) ;
 s++;
 }
 p->next='\0';
 return h;
 }
 main()
 { char str[]="link list";
 struct node *head;
 head=CreatList(str);
 ...
 }
(48)
A)char *
B)struct node
C) struct node*
D) char

(49)
A)*s
B)s
C)*s++
D)(*s)++

(50)
A)p->next
B)p
C)s
D)s->next

二、填空题：（每空2分 ，共40分）

1.在64位高档微机中，CPU能同时处理 _____ 个字节的二进制数据。

2.E-mail地址由域名和用户名两部分组成，它们之间用@分隔，其中在@后面的部分 是 _______

3.Windows窗口一般由标题栏、菜单栏、控制按钮等部分组成。为了移动窗口，则要 用鼠标拖动 _____

4.计算机软件分为系统软件和应用软件，UNIX系统属于 ________ 。

5.在Windows环境下，为了将屏幕内容存入剪贴板，应按 ________ 键。

6.以下程序段的输出结果是 _____
 int i=9;
 printf("%o\n",i);

7.以下程序运行后的输出结果是 _______ 。
 main()
 { int a,b,c;
 a=25;
 b=025;
 c=0x25;
 printf("%d %d %d\n',a,b,c);
 }

8.以下程序运行后的输出结果是 ______ 。
 main()
 { int p[7]={11,13,14,15,16,17,18};
 int i=0,j=0;
 while(i<7 && p%2==1) j+=p[i++];
 printf("%d\n",j);
 }

9.以下程序运行后的输出结果是 _______ 。
 main()
 { int x=1,y=0,a=0,b=0;
 switch(x)
 {case 1:switch(y)
 { case 0:a++; break;
 case 1:b++; break;
 }
 case 2:a++;b++; break;
 }
 printf("%d %d\n",a,b);
 }

10.以下程序运行后的输出结果是 _______ 。
 main()
 { int a[4][4]={{1,2,3,4},{5,6,7,8},{11,12,13,14},{15,16,17,18}};
 int i=0,j=0,s=0;
 while(i++<4)
 {
 if(i==2||i==4) continue;
 j=0;
 do{ s+= a[j]; j++; } while(j<4);
 }
 printf("%d\n",s);
 }

11.以下程序运行后的输出结果是 _____ 。
 main ()
 { char a[]="Language",b[]="Programe";
 char *p1,*p2; int k;
 p1=a; p2=b;
 for(k=0;k<=7;k++)
 if(*p1+k)==*(p2+k)) printf("%c",*(p1+k));
 }


12.以下程序运行后的输出结果是 _______ 。
 main()
 { char a[]="123456789",*p; int i=0;
 p=a;
 while(*p)
 { if(i%2==0) *p='*";
 p++;i++;
 }
 puts(a);
 }


13.以下程序中， for循环体执行的次数是 _____ 。
 #define N 2
 #define M N+1
 #define K M+1*M/2
 main()
 { int i;
 for(i=1;i<K;I++)
 { ... ]
 ...
 }

14、通过函数求f(x)的累加和，其中f（x）＝x2＋1
main()
{
printf("The sum=%d\n",SunFun(10));
}
SunFun(int n)
{
int x,s=0;
for(x=0;x<=n;x++) s+=F（________）;
return s;
}
F( int x)
{ return ____________;}

15. 以下程序从终端读入数据到数组中，统计其中正数的个数，并计算它们之和。
 请填空。
 main()
 { int i,a[20],sun,count;
 suum=count=0;
 for(i=0;i<20;i++) scanf("%d", _____ );
 fro(i=0;i<20;i++)
 { if(a>0)
 { count++;
 sum+= ______ ;
 }
 }
 printf("sum=%d,count=%d\n",sum,count);
 }

16.以下程序中，函数
sumColumM的功能是：求出M行N列二维数组每列元素中的最小值，并计算它们的和值。和值通过形参传回主函数输出。请填空。
 #define M 2
 #define N 4
 void SumColumMin(int a[M][N],int *sum)
 { int i,j,k,s=0;
 for(i=0;i<N;I++)
 { k=0;
 for(j=1;j<M;J++)
 if(a[k]>a[j])k=j;
 s+= _______ ;
 }
 [*sum] =s;
 }
 main()
 { int x[M][N]={3,2,5,1,4,1,8,3},s;
 SumColumMin( _______ );
 printf("%d\n",s);
 }


04年9月二级C语言笔试试题答案

2004年9月二级C语言笔试试题答案

选择题

1-5 C D A B C

 6-10 B A B A C

11-15 B C C D C

16-20 D A C B C

21-25 C A D D B

26-30 A C A D C

31-35 D D A C B

36-40 D B D A A

41-45 C B B C D

46-50 A C C A B

填空题

1. 8
2. 域名
3. 标题栏
4. 系统软件
5. PEINTSCREEN
6. 11
7. 25 21 37
8. 24
9. 21
10 . 92
11. gae
12. 1*3*5*7*9
13. 4
14. x x*x+1
15. &a[i] a[i]
16. a[k][i] *sum x,&s


05年4月二级C语言笔试试题

2005年4月二级C语言笔试试题

一、选择题（（1）~（10）每小题2分，（11）~（50）每小题1分，共60分）
    下列各题A）、B）、C）、D）四个选项中，只有一个选项是正确的。请将正确选项真涂在答题卡相应位置上，答在试卷上不得分。
（1）数据的存储结构是指 （　）。
  A）存储在外存中的数据
  B）数据所占的存储空间量
  C）数据在计算机中的顺序存储方式
  D）数据的逻辑结构中计算机中的表示

（2）下列关于栈的描述中错误的是 （　）。
  A）栈是先进后出的线性表
  B）栈只能顺序存储
  C）栈具有记忆作用
  D）对栈的插入与删除操作中，不需要改变栈底指针

（3）对于长度为n的线性表，在最坏情况下，下列各排序法所对应的比较次数中正确的是 （　）。
  A）冒泡排序为n/2
  B）冒泡排序为n
  C）快速排序为n
  D）快速排序为n(n-1)/2

（４）对长度为n的线性表进行顺序查找，在最坏情况下所需要的比较次数为 （　）。
  A）log2n
  B) n/2
  C) n
  D) n+1

（５）下列对于线性链表的描述中正确的是 （　）。
  A）存储空间不一定是连续，且各元素的存储顺序是任意的
  B）存储空间不一定是连续，且前件元素一定存储在后件元素的前面
  C）存储空间必须连续，且前件元素一定存储在后件元素的前面
  D）存储空间必须连续，且各元素的存储顺序是任意的

（６）下列对于软件的描述中正确的是（　）。
  A）软件测试的目的是证明程序是否正确
  B）软件测试的目的是使程序运行结果正确
  C）软件测试的目的是尽可能多地发现程序中的错误
  D）软件测试的目的是使程序符合结构化原则

（7）为了使模块尽可能独立，要求 （　）。
  A）模块的内聚程序要尽量高，且各模块间的耦合程序要尽量强
  B）模块的内聚程序要尽量高，且各模块间的耦合程序要尽量弱
  C）模块的内聚程序要尽量低，且各模块间的耦合程序要尽量弱
  D）模块的内聚程序要尽量低，且各模块间的耦合程序要尽量强

（8）下列描述中正确的是 （　）。
  A）程序就是软件
  B）软件开发不受计算机系统的限制
  C）软件既是逻辑实体，又是物理实体
  D）软件是程序、数据与相关文档的集合

（9）数据独立性是数据库技术的重要特点之一。所谓数据独立性是指 （　）。
  A）数据与程序独立存放
  B）不同的数据被存放在不同的文件中
  C）不同的数据只能被对应的应用程序所使用
  D）以上三种说法都不对

（10）用树形结构表示实体之间联系的模型是 （　）。
  A）关系模型
  B）网状模型
  C）层次模型
  D）以上三个都是

（11）算法具有五个特性，以下选项中不属于算法特性的是 （　）。
  A）有穷性
  B）简洁性
  C）可行性
  D）确定性

（12）以下选项中可作为C语言合法常量的是 （　）。
  A）-80.
  B）-080
  C）-8e1.0
  D）-80.0e

(13)以下叙述中正确的是 （　）。
  A）用C程序实现的算法必须要有输入和输出操作
  B）用C程序实现的算法可以没有输出但必须要有输入
  C）用C程序实现的算法可以没有输入但必须要有输出
  D）用C程序实现的算法可以既没有输入也没有输出

14.以下不能定义为用户标识符的是（　）。
  A）Main
  B）_0
  C）_int
  D）sizeof

(15)以下选项中,不能作为合法常量的是 （　）。
  A）1.234e04
  B）1.234e0.4
  C）1.234e+4
  D）1.234e0

(16)数字字符0的ASCII值为48,若有以下程序
main()
{ char a='1',b='2';
printf("%c,",b++);
printf("%d ",b-a);
}
程序运行后的输出结果是 （　）。
  A）3,2
  B）50,2
  C）2,2
  D）2,50

(17)有以下程序
main()
{ int m=12,n=34;
printf("%d%d",m++,++n);
printf("%d%d ",n++,++m);
}
程序运行后的输出结果是（　）。
  A）12353514
  B）12353513
  C）12343514
  D）12343513

(18)有定义语句:int b;char c[10]; ,则正确的输入语句是 （　）。
  A）scanf("%d%s",&b,&c);
  B）scanf("%d%s",&b,c);
  C）scanf("%d%s",b,c);
  D）scanf("%d%s",b,&c);

(19)有以下程序
main()
{ int m,n,p;
scanf("m=%dn=%dp=%d",&m,&n,&p);
printf("%d%d%d ",m,n,p);
}
若想从键盘上输入数据,使变量m中的值为123,n中的值为456,p中的值为789,则正确的输入是（　）。
  A）m=123n=456p=789
  B）m=123 n=456 p=789
  C）m=123,n=456,p=789
  D）123 456 789

(20)有以下程序
main()
{
int a,b,d=25;
a=d/10%9;
b=a&&(-1);
printf("%d,%d ",a,b);
}
程序运行后的输出结果是 （　）。
  A）6,1
  B）2,1
  C）6,0
  D）2,0

(21)有以下程序
main()
{ int i=1,j=2,k=3;
if(i++==1&&(++j==3||k++==3))
printf("%d %d %d ",i,j,k);
}
程序运行后的输出结果是 （　）。
  A）1 2 3
  B）2 3 4
  C）2 2 3
  D）2 3 3

(22)若整型变量a、b、c、d中的值依次为：1、4、3、2。则条件表达式a<b?a:c<d?c:d的值 （　）。
  A)1
  B)2
  C)3
  D)4

(23)有以下程序
main()
{
int p[8]={11,12,13,14,15,16,17,18}，i=0,j=0;
while(i++<7) if(p[i]%2) j+=p[i];
printf("%d ",j);
}
程序运行后的输出结果是 （　）。
  A）42
  B）45
  C）56
  D）60

（24）有以下程序
main()
{ char a[7]="a0a0";int i,j;
i=sizeof(a); j=strlen(a);
printf("%d %d ",i,j);
}
程序运行后的输出结果是 （　）。
  A）2 2
  B）7 6
  C）7 2
  D）6 2

(25)以下能正确定义一维数组的选项是 （　）。
  A）int a[5]={0,1,2,3,4,5};
  B）char a[]={0,1,2,3,4,5};
  C）char a={'A','B','C'};
  D）int a[5]="0123";

(26)有以下程序
int f1(int x,int y){return &nbsp;x>y?x:y;}
int f2(int x,int y){return x>y?y:x;}
main()
{ int a=4,b=3,c=5,d=2,e,f,g;
e=f2(f1(a,b),f1(c,d));
f=f1(f2(a,b),f2(c,d));
g=a+b+c+d-e-f;
printf("%d,%d%d ",e,f,g);
}
程序运行后的输出结果是 （　）。
  A）4，3，7
  B）3，4，7
  C）5，2，7
  D）2，5，7

（27）已有定义：char a[]="xyz",b[]={'x','y','z'};,以下叙述中正确的是 （　）。
  A）数组a和b的长度相同
  B）a数组长度小于b数组长度
  C）a数组长度大于b数组长度
  D）上述说法都不对

（28）有以下程序
void f(int *x,int *y)
{ int t;
t=*x;*x=*y;*y=t;
}
main()
{ int a[8]={1,2,3,4,5,6,7,8},i,*p,*q;
p=a;q=&a[7];
while(p<q)
{
f(p,q);
p++;
q--;
}
for(i=0;i<8;i++)
printf("%d,",a[i]);
}
程序运行后的输出结果是 （　）。
  A）8，2，3，4，5，6，7，1，
  B）5，6，7，8，1，2，3，4，
  C）1，2，3，4，5，6，7，8，
  D）8，7，6，5，4，3，2，1，

（29）有以下程序
main()
{
int a[3][3],*p,i;
p=&a[0][0];
for(i=0;i<9;i++)
p[i]=i;
for(i=0;i<3;i++)
printf("%d ",a[1][i]);
}
程序运行后的输出结果是 （　）。
  A）0 1 2
  B）1 2 3
  C）2 3 4
  D）3 4 5

(30)以下叙述中错误的是 （　）。
  A）对于double类型数组，不可以直接用数组名对数组进行整体输入或输出
  B）数组名代表的是数组所占存储区的首地址，其值不可改变
  C）当程序执行中，数组元素的下标超出所定义的下标范围时，系统将给出“下标越界”的出错信息
  D）可以通过赋初值的方式确定数组元素的个数

（31）有以下程序
#define N 20
fun(int a[],int n,int m)
{ int i,j;
for(i=m;i>=n;i--)
a[i+1]=a[i];
}
main()
{
int i,a[N]={1,2,3,4,5,6,7,8,9,10};
fun(a,2,9);
for(i=0;i<5;i++)
printf("%d",a[i]);
}
程序运行后的输出结果是 （　）。
  A）10234
  B）12344
  C）12334
  D）12234

（32）有以下程序
main()
{ int a[3][2]={0},(*ptr)[2],i,j;
for(i=0;i<2;i++)
{ ptr=a+i;
scanf("%d",ptr);
ptr++;
}
for(i=0;i<3;i++)
{
for(j=0;j<2;j++)
printf("%2d",a[i][j]);
printf(" ");
}
}
若运行时输入:1 2 3<回车>,则输出结果为 （　）。
  A）产生错误信息
  B）1 0
    2 0
    0 0
  C）1 2
    3 0
    0 0
  D）1 0
     2 0
    3 0

(33)有以下程序
prt(int *m,int n)
{
int i;
for(i=0;i<n;i++)
m[i]++;
}
main()
{
int a[]={1,2,3,4,5},i;
prt(a,5);
for(i=0;i<5;i++)
printf("%d,",a[i]);
}
程序运行后的输出结果是： （　）。
  A）1，2，3，4，5，
  B）2，3，4，5，6，
  C）3，4，5，6，7，
  D）2，3，4，5，1，

（34）有以下程序
main()
{ int a[]={1,2,3,4,5,6,7,8,9,0},*p;
for(p=a;p<a+10;p++)
printf("%d,",*p);
}
程序运行后的输出结果是 （　）。
  A）1，2，3，4，5，6，7，8，9，0，
  B）2，3，4，5，6，7，8，9，10，1，
  C）0，1，2，3，4，5，6，7，8，9，
  D）1，1，1，1，1，1，1，1，1，，1，

（35）有以下程序
#define P 3
#define F(int x) { return (P*x*x);}
main()
{
printf("%d ",F(3+5));
}
程序运行后的输出结果是 （　）。
  A）192
  B）29
  C）25
  D）编译出错

（36）有以下程序
main()
{
int c=35; printf("%d ",c&c);
}
程序运行后的输出结果是 （　）。
  A） 0
  B） 70
  C） 35
  D） 1

（37）以下叙述中正确的是（　）。
  A）预处理命令行必须位于源文件的开头
  B）在源文件的一行上可以有多条预处理命令
  C）宏名必须用大写字母表示
  D）宏替换不占用程序的运行时间

（38）若有以下说明和定义
union dt
{
int a; char b; double c;
}data;
以下叙述中错误的是 （　）。
  A）data的每个成员起始地址都相同
  B）变量data所占内存字节数与成员c所占字节数相等
  C）程序段：data.a=5;printf("%f ",data.c);输出结果为5.000000
  D）data可以作为函数的实参

（39）以下语句或语句组中，能正确进行字符串赋值的是（　）。
  A）char *sp; *sp="right!";
  B）char s[10]; s="right!";
  C）char s[10]; *s="right!";
  D）char *sp="right!";

(40)设有如下说明
typedef struct ST
{
long a;
int b;
char c[2];
} NEW;
则下面叙述中正确的是 （　）。
  A）以上的说明形式非法
  B）ST是一个结构体类型
  C）NEW是一个结构体类型
  D）NEW是一个结构体变量

（41）有以下程序
main()
{
int a=1,b;
for(b=1;b<=10;b++)
{
if(a>=8) break;
if(a%2==1) { a+=5; continue;}
a-=3;
}
printf("%d ",b);
}
程序运行后的输出结果是 （　）。
  A）3
  B）4
  C）5
  D）6

（42）有以下程序
main()
{
char s[]="159",*p;
p=s;
printf("%c",*p++);
printf("%c",*p++);
}
程序运行后的输出结果是 （　）。
  A）15
  B）16
  C）12
  D）59

（43）有以下函数
fun(char *a,char *b)
{
while((*a!='')&&(*b!='')&;&(*a==*b))
{ a++; b++;}
return (*a-*b);
}
该函数的功能是 （　）。
  A）计算a和b所指字符串的长度之差
  B）将b所指字符串复制到a所指字符串中
  C）将b所指字符串连接到a所指字符串后面
  D）比较a和b所指字符串的大小

（44）有以下程序
main()
{
int num[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}},i,j;
for(i=0;i<4;i++)
{
for(j=1;j<=i;j++) printf("%c",' ');
for(j= j<4;j++) printf("%4d",num[i][j]);
printf(" ");
}
}
若要按以下形式输出数组右上半三角
1 2 3 4
6 7 8
11 12
16
则在程序下划线处应填入的是 （　）。
  A） i-1
  B） i
  C） i+1
  D） 4-i

(45)有以下程序
point(char *p)
{
p+=3;
}
main()
{ char b[4]={'a','b','c','d'},*p=b;
point(p); printf("%c ",*p);
}
程序运行后的输出结果是 （　）。
  A）a
  B）b
  C）c
  D）d

(46)程序中若有如下的说明和定义语句
char fun(char *);
main()
{
char *s="one",a[5]={0},(*f1)()=fun,ch;
……
}
以下选项中对函数fun的正确调用语句是（　）。
  A）（*f1）(a);
  B）*f1(*s);
  C）fun(&a);
  D）ch=*f1(s)

(47)有以下结构体说明和变量定义，如图所示，指针pqr分别指向此链表中三个连续结点。
struct node
{
int data;
struct node *next;
} *p,*q,*r;
现要将q所指结点从链表中删除，同时保持链表的连续,以下不能完成指定操作的语句是 （　）。
  A）p->next=q->next;
  B）p->next=p->next->next;
  C）p->next=r;
  D）p=q->next;

(48)以下对结构体类型变量td的定义中，错误的是 （　）。
  A）typedef struct aa
    {
    int n;
     float m;
       }AA;
     AA td;
  B）struct aa
    {
    int n;
     float m;
      } td;
    struct aa td;
  C）struct
    {
    int n;
     float m;
        }aa;
      struct aa td;
  D）struct
    {
     int n;
    float m;
      }td;

(49)以下与函数fseek(fp,0L,SEEK_SET)有相同作用的是（　）。
  A）feof(fp)
  B）ftell(fp)
  C）fgetc(fp)
  D）rewind(fp)

(50)有以下程序
#include "stdio.h"
void WriteStr(char *fn,char *str)
{
FILE *fp;
fp=fopen(fn,"W");
fputs(str,fp);
fclose(fp);
}
main()
{
WriteStr("t1.dat","start");
WriteStr("t1.dat","end");
}
程序运行后,文件t1.dat中的内容是 （　）。
  A）start
  B）end
  C）startend
  D）endrt

填空题（每空2分，共40分）

（1）某二*树中，度为2的结点有　　个，则该二*树中有 　 个叶子结点。

（2）在面向对象的方法中，类的实例称为 。

（3）诊断和改正程序中错误的工作通常称为 。

（4）在关系数据库中，把数据表示成二维表，每一个二维表称为 。

（5）问题处理方案的正确而完整的描述称为 .

（6）以下程序运行时若从键盘输入：10 20 30<回车>。输出结果是
    #include <stdio.h>
    main()
    { int i=0,j=0,k=0;
      scanf("%d%*d%d",&i,&j,&k);
      printf("%d%d%d ",i,j,k);
    }

  (7)以下程序运行后的输出结果是
    #define S(x) 4*x*x+1
    main()
  {
    int i=6,j=8;
    printf("%d ",S(i+j));
  }

  (8)以下程序运行后的输出结果是
      main()
      {
        int a=3,b=4,c=5,t=99;
        if(b<a&&a<c) t=a;a=c;c=t;
        if(a<c&&b<c) t=b;b=a;a=t;
        printf("%d%d%d ",a,b,c);
      }

  (9)以下程序运行后的输出结果是
    main()
    {
      int a,b,c
      a=10;b=20;c=(a%b<1)||(a/b>1);
      printf("%d %d %d ",a,b,c);
    }

  (10)以下程序运行后的输出结果是0918273645
    main()
    {
      char c1,c2;
      for(c1='0',c2='9';c1<c2;c1++,c2--)
      printf("%c%c",c1,c2);
      printf(" ");
    }

  (11)已知字符A的ASCII代码值为65,以下程序运行时若从键盘输入:B33<回车>.输出结果是
    #include "stdio.h"
    main()
    {
      char a,b;
      a=getchar(); scanf("%d",&b);
      a=a-'A'+'0';
      b=b*2;
      printf("%c %c ",a,b);
    }

  (12)以下程序中,fun函数的功能是求3行4列二维数组每行元素中的最大值.请填空. br[i]
      void fun(int, int, int (*)[4],int *)
      main()
        {
          int a[3][4]={{12,41,36,28},{19,33,15,27},{3,27,19,1}},b[3],i;
          fun(3,4,a,b);
          for(i=0;i<3;i++)
          printf("%4d",b[i]);
          printf(" ");
        }
      void fun(int m,int n,int ar[][4],int *br)
        {
          int i,j,x;
          for(i=0;i<m;i++)
        { x=ar[i][0];
          for(j=0;j<n;j++)
          if(x<ar[i][j]) x=ar[i][j];
          【12】 =x;
        }

  (13)以下程序运行后的输出结果是
      void swap(int x,int y)
      { int t;
      t=x;x=y;y=t;
      printf("%d %d ",x,y);
      }
      main()
    { int a=3,b=4;
    swap(a,b);
    printf("%d %d ",a,b);
    }

  (14)以下程序运行后的输出结果是
    #include "string.h"
    void fun(char *s,int p,int k)
    { int i;
    for(i=p;i<k-1;i++)
    s[i]=s[i+2];
    }
    main()
    { char s[]="abcdefg";
    fun(s,3,strlen(s));
    puts(s);
    }

  (15)以下程序运行后的输出结果是
    #include "string.h"
      main()
    {
    char ch[]="abc",x[3][4]; int i;
    for(i=0;i<3;i++) strcpy(x[i],ch);
    for(i=0;i<3;i++) printf("%s",&x[i][i]);
    printf(" ");
    }

  (16)以下程序运行后的输出结果是
    fun(int a)
      {
        int b=0;static int c=3;
          b++; c++;
        return (a+b+c);
      }
    main()
      {
      int i,a=5;
      for(i=0;i<3;i++)
      printf("%d %d ",i,fun(a));
      printf(" ");
      }

  (17)以下程序运行后的输出结果是
    struct NODE
    { int k;
      struct NODE *link;
    };
    main()
    {
      struct NODE m[5],*p=m,*q=m+4;
      int i=0;
      while(p!=q)
    { p->k=++i; p++;
      q->k=i++; q--;
    }
      q->k=i;
      for(i=0;i<5;i++)
      printf("%d",m[i].k);
      printf(" ");
    }

(18)以下程序中函数huiwen的功能是检查一个字符串是否是回文,当字符串是回文时,函数返回字符串:yes　yes!,否则函数返回字符串:no!,并在主函数中输出.所谓回文即正向与反向的拼写都一样,例如:adgda.请填空.
    #include "string.h"
    char *huiwen(char *str)
    {
      char *p1,*p2; int i,t=0;
      p1=str; p2= ①
      for(i=0;i<=strlen(str)/2;i++)
      if(*p1++!=*p2--)
      { t=1; break; }
      if( ②) return ("yes!");
      else return ("no!");
      }
    main()
{
    char str[50];
    printf("Input:"); scanf("%s",str);
    printf("%s ", ③ );
}
    ①
    ②
    ③
[完]


05年4月二级C语言笔试试题答案

2005年4月二级C语言笔试试题答案

一、选择题
　1-5 D　　B　　D　　C　　A
　6-10C　　B　　D　　D　　C
11-15 B　　A　　C　　D　　B
16-20 C　　A　　B　　A　　B
21-25 D　　A　　B　　C　　B
26-30 A　　C　　D　　D　　C
31-35 C　　B　　B　　A　　D
36-40 C　　D　　C　　D　　C
41-45 B　　A　　D　　B　　A
46-50 A　　D　　C　　D　　B

     二、填空题
(1) 【1】19
(2) 【2】 对象
(3) 【3】程序调试
(4) 【4】关系
(5) 【5】算法
(6) 【6】 10 30 0
(7) 【7】 81
(8) 【8】 4599
(9) 【9】 10 20 0
(10) 【10】 0918273645
(11) 【11】 1B
(12) 【12】br[i]
(13) 【13】 4 3 3 4
(14) 【14】 abcfg
(15) 【15】abcbcc
(16) 【16】 0 10 1 11 2 12
(17) 【17】 13431
(18) 【18】str+strlen(str)-1【19】t==0或!t【20】huiwen(str)


05年9月二级C语言笔试试题

2005年9月二级C语言笔试试题

一、选择题（（1）—（10）每题2分，（11）—（50）每题1分，共60分）
 下列各题A）、B）、C）、D）四个选项中，只有一个选项是正确的，请将正确选项涂写在答题卡相应位置上，答在试卷上不得分。

（1）下列叙述中正确的是（　）。
A）程序设计就是编制程序 　　　　　　　B）程序的测试必须由程序员自己去完成
C）程序经调试改错后还应进行再测试 　　D）程序经调试改错后不必进行再测试

（2）下列数据结构中，能用二分法进行查找的是（　）。
A）顺序存储的有序线性表 　　　　　　B）线性链表
C）二叉链表 　　　　　　　　　　　　D）有序线性链表

（3）下列关于栈的描述正确的是（　）。
A）在栈中只能插入元素而不能删除元素
B）在栈中只能删除元素而不能插入元素
C）栈是特殊的线性表，只能在一端插入或删除元素
D）栈是特殊的线性表，只能在一端插入元素，而在另一端删除元素

（4）下列叙述中正确的是（　）。
A）一个逻辑数据结构只能有一种存储结构
B）数据的逻辑结构属于线性结构，存储结构属于非线性结构
C）一个逻辑数据结构可以有多种存储结构，且各种存储结构不影响数据处理的效率
D）一个逻辑数据结构可以有多种存储结构，且各种存储结构影响数据处理的效率

（5）下列描述中正确的是（　）。
A）软件工程只是解决软件项目的管理问题
B）软件工程主要解决软件产品的生产率问题
C）软件工程的主要思想是强调在软件开发过程中需要应用工程化原则
D）软件工程只是解决软件开发中的技术问题

（6）在软件设计中，不属于过程设计工具的是（　）。
A）PDL(过程设计语言) 　　　B）PAD图 　　　C）N-S图 　　　D）DFD图

     （7）下列叙述中正确的是（　）。
A）软件交付使用后还需要进行维护
B）软件一旦交付使用就不需要再进行维护
C）软件交付使用后其生命周期就结束
D）软件维护是指修复程序中被破坏的指令

（8）数据库设计的根本目标是要解决（　）。
 A）数据共享问题　　　　　 B）数据安全问题
 C）大量数据存储问题 　　　D）简化数据维护

（9）设有如下关系表:
R S T
A B C A B C A B C
1 1 2 3 1 3 1 1 2
2 2 3 2 2 3
 3 1 3
则下列操作中正确的是（　）。
A）T＝R∩S　　　 B）T＝R∪S 　　　　　C）T＝R×S 　　　D）T＝R/S

（10）数据库系统的核心是（　）。
 A）数据模型 　　B）数据库管理系统　　 C）数据库 　　　D）数据库管理员

（11）以下叙述中错误的是（　）。
 A）用户所定义的标识符允许使用关键字
 B）用户所定义的标识符应尽量做到“见名知意”
 C）用户所定义的标识符必须以字母或下划线开头
 D）用户定义的标识符中，大、小写字母代表不同标识

（12）以下叙述中错误的是（　）。
 A）C语句必须以分号结束
 B）复合语句在语法上被看作一条语句
 C）空语句出现在任何位置都不会影响程序运行
 D）赋值表达式末尾加分号就构成赋值语句

（13）以下叙述中正确的是（　）。
 A）调用printf函数时，必须要有输出项
 B）使用putchar函数时，必须在之前包含头文件stdio.h
 C）在C语言中，整数可以以十二进制、八进制或十六进制的形式输出
 D）调用getchar函数读入字符时，可以从键盘上输入字符所对应的ASCII码

   （14）以下关于函数的叙述中正确的是（　）。
 A）每个函数都可以被其它函数调用（包括main函数）
 B）每个函数都可以被单独编译
 C）每个函数都可以单独运行
 D）在一个函数内部可以定义另一个函数

（15）若有语句：char *line[5];，以下叙述中正确的是（　）。
 A）定义line是一个数组，每个数组元素是一个基类型为char的指针变量
 B）定义line是一个指针变量，该变量可以指向一个长度为5的字符型数组
 C）定义line是一个指针数组，语句中的*号称为间址运算符
 D）定义line是一个指向字符型函数的指针

（16）有以下程序段
 typedef struct NODE
 { int num; struct NODE *next;
 } OLD;
以下叙述中正确的是（　）。
 A）以上的说明形式非法 　　　　 B）NODE是一个结构体类型
 C）OLD是一个结构体类型 　　　　D）OLD是一个结构体变量

（17）以下叙述中错误的是（　）。
 A）C语言中对二进制文件的访问速度比文本文件快
 B）C语言中，随机文件以二进制代码形式存储数据
 C）语句 FILE fp; 定义了一个名为fp的文件指针
 D）C语言中的文本文件以ASCII码形式存储数据

（18）当把以下四个表达式用作if语句的控制表达式时，有一个选项与其它三个选项含义不同，这个选项是（　）。
 A）k%2　　　 B）k%2==1　　　 C）(k%2)!=0 　　　D）!k%2==1

（19）以下不能正确计算代数式 值的C语言表达式是（　）。
 A）1/3*sin(1/2)*sin(1/2)　　　　 B）sin(0.5)*sin(0.5)/3
 C）pow(sin(0.5),2)/3 　　　　　　D）1/3.0*pow(sin(1.0/2),2)

（20）以下能正确定义且赋初值的语句是（　）。
 A）int n1=n2=10;　　　　　　 B）char c=32;
 C）float f=f+1.1; 　　　　　　D）double x=12.3E2.5;

（21）以下程序的功能是：给r输入数据后计算半径为r的圆面积s。程序在编译时出错。
 main()
 /* Beginning */
 { int r; float s;
 scanf("%d",&r);
 s=*p*r*r; printf("s=%f\n",s);
 }
 出错的原因是（　）。
 A）注释语句书写位置错误 　　　　B）存放圆半径的变量r不应该定义为整型
 C）输出语句中格式描述符非法 　　D）计算圆面积的赋值语句中使用了非法变量

（22）设有定义：int k=1,m=2; float f=7;，则以下选项中错误的表达式是（　）。
 A）k=k>=k 　　B）-k++　　　 C）k%int(f)　　　 D）k>=f>=m

（23）设有定义：int a=2,b=3,c=4;，则以下选项中值为0的表达式是（　）。
 A）(!a==1)&&(!b==0)　　 B）(a　　 C）a && b　　 D）a||(b+b)&&(c-a)

（24）有以下程序段
 int k=0,a=1,b=2,c=3;
 k=ac ? c:k;
执行该程序段后，k的值是（　）。
 A）3　　 B）2　　　 C）1 　　　D）0

（25）设变量a、b、c、d和y都已正确定义并赋值。若有以下if语句
 if (a if(c==d) y=0;
 else y=1;
该语句所表示的含义是（　）。
 A）　　　 B）
 C）　　　 D）

（26）有以下程序段
 int n,t=1,s=0;
 scanf("%d",&n);
 do{ s=s+t; t=t-2; }while (t!=n);
为使此程序段不陷入死循环，从键盘输入的数据应该是（　）。
 A）任意正奇数 B）任意负偶数 C）任意正偶数 D）任意负奇数

（27）设变量已正确定义，则以下能正确计算f = n!的程序段是（　）。
 A） f=0;　　　　　　　　 B） f=1;
 for(i=1;i<=n;i++)　　　　　　 f*=i; for(i=1;i>=2;i--)
 C） f=1; 　　　　　　　　　D） f=1;
 for(i=n;i>1;i++) 　　　　　　f*=i; for(i=n;i>=2;i--)


（28）设有定义：int n1=0,n2,*p=&n2,*q=&n1;，以下赋值语句中与n2=n1;语句等价的是（　）。
 A）*p=*q; B）p=q; C）*p=&n1; D）p=*q;

（29）若有定义：int x=0, *p=&x;，则语句printf("%d\n",*p);的输出结果是（　）。
 A）随机值 B）0 C）x的地址 D）p的地址

（30）设函数fun的定义形式为
 void fun(char ch, float x ) { … }
则以下对函数fun的调用语句中，正确的是（　）。
 A）fun("abc",3.0);　　　 B）t=fun('D',16.5);
 C）fun('65',2.8); 　　　D）fun(32,32);

（31）有以下程序
 main()
 { int a[10]={1,2,3,4,5,6,7,8,9,10}, *p=&a[3], *q=p+2;
 printf("%d\n", *p + *q);
 }
程序运行后的输出结果是（　）。
 A）16 　　　B）10　　　 C）8　　　 D）6

（32）有以下程序
 main()
 { char p[]={'a', 'b', 'c'}, q[]="abc";
 printf("%d %d\n", sizeof(p),sizeof(q));
 };
程序运行后的输出结果是（　）。
 A）4 4 　　　B）3 3　　　 C）3 4　　 D）4 3

（33）有以下程序
 # define f(x) (x*x)
 main()
 { int i1, i2;
 i1=f(8)/f(4) ; i2=f(4+4)/f(2+2) ;
 printf("%d, %d\n",i1,i2);
 }
程序运行后的输出结果是（　）。
 A）64, 28 B）4, 4 C）4, 3 D）64, 64

（34）有以下程序
 main()
 { char a1='M', a2='m';
 printf("%c\n", (a1, a2) ); }
以下叙述中正确的是（　）。
 A）程序输出大写字母M 　　　　　　 　B）程序输出小写字母m
 C）格式说明符不足，编译出错 　　　　D）程序运行时产生出错信息

（35）有以下程序
 #include
 main()
 { char c1='1',c2='2';
 c1=getchar(); c2=getchar(); putchar(c1); putchar(c2);
 }
当运行时输入：a<回车> 后，以下叙述正确的是（　）。
 A）变量c1被赋予字符a，c2被赋予回车符
 B）程序将等待用户输入第2个字符
 C）变量c1被赋予字符a，c2中仍是原有字符2
 D）变量c1被赋予字符a，c2中将无确定值

（36）有以下程序
 main()
 { int k=5,n=0;
 while(k>0)
 { switch(k)
 { default : break;
 case 1 : n+=k;
 case 2 :
 case 3 : n+=k;
 }
 k--;
 }
 printf("%d\n",n);
 }
程序运行后的输出结果是（　）。
 A）0 　　　B）4 　　　C）6 　　　D）7

（37）有以下程序
 main()
 { int a[]={2,4,6,8,10}, y=0, x, *p;
 p=&a[1];
 for(x= 1; x<3; x++) y += p[x];
 printf("%d\n",y);
 }
程序运行后的输出结果是（　）。
 A）10 　　　B）11　　 C）14　　 D）15

（38）有以下程序
 void sort(int a[], int n)
 { int i, j ,t;
 for (i=0; i for (j=i+1; j if (a[i] }
 main()
 { int aa[10]={1,2,3,4,5,6,7,8,9,10}, i;
 sort(aa+2, 5);
 for (i=0; i<10; i++) printf("%d,",aa[i]);
 printf("\n");
 }
程序运行后的输出结果是（　）。
 A）1,2,3,4,5,6,7,8,9,10,　　 B）1,2,7,6,3,4,5,8,9,10,
 C）1,2,7,6,5,4,3,8,9,10, 　　D）1,2,9,8,7,6,5,4,3,10,

（39）有以下程序
 void sum(int a[])
 { a[0] = a[-1]+a[1]; }
 main()
 { int a[10]={1,2,3,4,5,6,7,8,9,10};
 sum(&a[2]);
 printf("%d\n", a[2]);
 }
程序运行后的输出结果是（　）。
 A）6 　　B）7　　　 C）5　　 D）8

（40）有以下程序
 void swap1(int c0[], int c1[])
 { int t ;
 t=c0[0]; c0[0]=c1[0]; c1[0]=t;
 }
 void swap2(int *c0, int *c1)
 { int t;
 t=*c0; *c0=*c1; *c1=t;
 }
 main()
 { int a[2]={3,5}, b[2]={3,5};
 swap1(a, a+1); swap2(&b[0], &b[1]);
 printf("%d %d %d %d\n",a[0],a[1],b[0],b[1]);
 }
程序运行后的输出结果是（　）。
 A）3 5 5 3 　　　B）5 3 3 5　　 C）3 5 3 5 　　D）5 3 5 3

（41）有以下程序
 #include
 main()
 { char p[]={'a', 'b', 'c'}, q[10]={'a', 'b', 'c'};
 printf("%d %d\n", strlen(p), strlen(q));
 }
以下叙述中正确的是（　）。
 A）在给p和q数组置初值时，系统会自动添加字符串结束符，故输出的长度都为3
 B）由于p数组中没有字符串结束符，长度不能确定；但q数组中字符串长度为3
 C）由于q数组中没有字符串结束符，长度不能确定；但p数组中字符串长度为3
 D）由于p和q数组中都没有字符串结束符，故长度都不能确定

（42）有以下程序，其中函数f的功能是将多个字符串按字典顺序排序
 #include
 void f(char *p[], int n)
 { char *t; int i,j;
 for(i=0; i for(j=i+1; j if(strcmp(p[i],p[j])>0){ t=p[i]; p[i]=p[j]; p[j]=t; }
 }
 main()
 { char *p[5]={"abc","aabdfg","abbd","dcdbe","cd"};
 f(p, 5);
 printf("%d\n", strlen(p[1]));
 }
程序运行后的输出结果是（　）。
 A）2 　　B）3　　 C）6　　 D）4

（43）有以下程序
 # include
 void f(char *s, char *t)
 { char k;
 k=*s; *s=*t; *t=k;
 s++; t--;
 if (*s) f(s, t);
 }
 main()
 { char str[10]="abcdefg", *p ;
 p=str+strlen(str)/2+1;
 f(p, p-2);
 printf("%s\n",str);
 }
程序运行后的输出结果是（　）。
 A）abcdefg 　　B）gfedcba 　　C）gbcdefa 　　D）abedcfg

（44）有以下程序
 float f1(float n)
 { return n*n; }
 float f2(float n)
 { return 2*n; }
 main()
 { float (*p1)(float),(*p2)(float),(*t)(float), y1, y2;
 p1=f1; p2=f2;
 y1=p2( p1(2.0) );
 t = p1; p1=p2; p2 = t;
 y2=p2( p1(2.0) );
 printf("%3.0f, %3.0f\n",y1,y2);
 }
程序运行后的输出结果是（　）。
 A）8, 16 　　B）8, 8　　 C）16, 16　　　 D）4, 8
（45）有以下程序
 int a=2;
 int f(int n)
 { static int a=3;
 int t=0;
 if(n%2){ static int a=4; t += a++; }
 else { static int a=5; t += a++; }
 return t+a++;
 }
 main()
 { int s=a, i;
 for( i=0; i<3; i++) s+=f(i);
 printf("%d\n", s);
 }
程序运行后的输出结果是（　）。
 A）26 　　B）28 　　C）29 　　D）24

（46）有以下程序
 # include
 struct STU
 { int num;
 float TotalScore; };
 void f(struct STU p)
 { struct STU s[2]={{20044,550},{20045,537}};
 p.num = s[1].num; p.TotalScore = s[1].TotalScore;
 }
 main()
 { struct STU s[2]={{20041,703},{20042,580}};
 f(s[0]);
 printf("%d %3.0f\n", s[0].num, s[0].TotalScore);
 }
程序运行后的输出结果是（　）。
 A）20045 537 　　B）20044 550　　 C）20042 580　　 D）20041 703

（47）有以下程序
 # include
 struct STU
 { char name[10];
 int num; };
 void f(char *name, int num)
 { struct STU s[2]={{"SunDan",20044},{"Penghua",20045}};
 num = s[0].num;
 strcpy(name, s[0].name);
 }
 main()
 { struct STU s[2]={{"YangSan",20041},{"LiSiGuo",20042}},*p;
 p=&s[1]; f(p->name, p->num);
 printf("%s %d\n", p->name, p->num);
 }
程序运行后的输出结果是（　）。
 A）SunDan 20042 　 　B）SunDan 20044
 C）LiSiGuo 20042 　　D）YangSan 20041

（48）有以下程序
 struct STU
 { char name[10]; int num; float TotalScore; };
 void f(struct STU *p)
 { struct STU s[2]={{"SunDan",20044,550},{"Penghua",20045,537}}, *q=s;
 ++p ; ++q; *p=*q;
 }
 main()
 { struct STU s[3]={{"YangSan",20041,703},{"LiSiGuo",20042,580}};
 f(s);
 printf("%s %d %3.0f\n", s[1].name, s[1].num, s[1].TotalScore);
 }
程序运行后的输出结果是（　）。
 A）SunDan 20044 550 　　　 B）Penghua 20045 537
 C）LiSiGuo 20042 580 　　　D）SunDan 20041 703

（49）以下程序的功能是进行位运算
 main()
 { unsigned char a, b;
 a=7^3; b= ~4 & 3;
printf("%d %d\n",a,b);
 }
程序运行后的输出结果是（　）。
 A）4 3 　　　B）7 3 　　C）7 0 　　D）4 0

（50）有以下程序
 #include
 main()
 { FILE *fp; int i, k, n;
 fp=fopen("data.dat", "w+");
 for(i=1; i<6; i++)
 { fprintf(fp,"%d ",i);
 if(i%3==0) fprintf(fp,"\n");
 }
 rewind(fp);
 fscanf(fp, "%d%d", &k, &n); printf("%d %d\n", k, n);
 fclose(fp);
 }
程序运行后的输出结果是（　）。
 A）0 0 　　　B）123 45　　 C）1 4　　 D）1 2

二、填空题（每空2分，共40分）
 请将每一个空的正确答案写在答题卡【1】至【20】序号的横线上，答在试卷上不得分。

（1）数据管理技术发展过程经过人工管理、文件系统和数据库系统三个阶段，其中数据独立性最高的阶段是 【1】 。

（2）算法复杂度主要包括时间复杂度和 【2】 复杂度。

（3）在进行模块测试时，要为每个被测试的模块另外设计两类模块：驱动模块和承接模块（桩模块）。其中 【3】 的作用是将测试数据传送给被测试的模块，并显示被测试模块所产生的结果。

（4）一棵二叉树第六层（根结点为第一层）的结点数最多为 【4】 个。

（5）数据结构分为逻辑结构和存储结构，循环队列属于 【5】 结构。

（6）以下程序运行后的输出结果是 【6】 。
 main()
 { int x=0210; printf("%X\n",x);
 }

（7）以下程序运行后的输出结果是 【7】 。
 main()
 { int a=1,b=2,c=3;
 if(c=a) printf("%d\n",c);
 else printf("%d\n",b);
 }

（8）已有定义：double *p;，请写出完整的语句，利用malloc函数使p指向一个双精度型 的动态存储单元 【8】 。

（9）以下程序运行后的输出结果是 【9】 。
 main()
 { char c; int n=100;
 float f=10; double x;
 x=f*=n/=(c=50);
 printf("%d %f\n",n,x);
 }

（10）以下程序的功能是计算：s=1+12+123+1234+12345。请填空。
 main()
 { int t=0,s=0,i;
 for( i=1; i<=5; i++)
 { t=i+ 【10】 ; s=s+t; }
 printf("s=%d\n",s);
 }

（11）已知字母A的ASCII码为65。以下程序运行后的输出结果是 【11】 。
 main()
 { char a, b;
 a='A'+'5'-'3'; b=a+'6'-'2' ;
 printf("%d %c\n", a, b);
 }

（12）有以下程序
 int sub(int n) { return (n/10+n%10); }
 main()
 { int x,y;
 scanf("%d",&x);
 y=sub(sub(sub(x)));
 printf("%d\n",y);
 }
若运行时输入：1234<回车>，程序的输出结果是 【12】 。
（13）以下函数sstrcat()的功能是实现字符串的连接，即将t所指字符串复制到s所指字符串的尾部。例如：s所指字符串为abcd，t所指字符串为efgh，函数调用后s所指字符串为abcdefgh。请填空。
 # include
 void sstrcat(char *s, char *t)
 { int n;
 n= strlen(s);
 while (*(s+n)= 【13】 ){s++; t++;}
 }

（14）以下程序运行后的输出结果是 【14】 。
 #include
 char *ss(char *s)
 { char *p, t;
 p=s+1; t=*s;
 while(*p) { *(p-1) = *p; p++;}
 *(p-1)=t;
 return s;
 }
 main()
 { char *p, str[10]="abcdefgh";
 p = ss(str) ;
 printf("%s\n",p);
 }

（15）以下程序运行后的输出结果是 【15】 。
 int f(int a[], int n)
 { if (n >= 1) return f(a, n-1)+a[n-1];
 else return 0;
 }
 main()
 { int aa[5]={1,2,3,4,5}, s;
 s=f(aa, 5); printf("%d\n", s);
 }

（16）以下程序运行后的输出结果是 【16】 。
 struct NODE
 { int num; struct NODE *next;
 } ;
 main()
 { struct NODE s[3]={{1, '\0'},{2, '\0'},{3, '\0'}}, *p, *q, *r;
 int sum=0;
 s[0].next=s+1; s[1].next=s+2; s[2].next=s;
 p=s; q=p->next; r=q->next;
 sum+=q->next->num; sum+=r->next->next->num;
 printf("%d\n", sum);
 }

（17）以下程序的功能是输出如下形式的方阵：
 13 14 15 16
 9 10 11 12
 5 6 7 8
 1 2 3 4
请填空。
 main()
 { int i,j,x;
 for(j=4; j 【17】 ; j--)
 { for(i=1; i<=4; i++)
 { x=(j-1)*4 + 【18】 ;
 printf("%4d",x);
 }
 printf("\n");
 }
 }

（18）以下函数rotate的功能是：将a所指N行N列的二维数组中的最后一行放到b所指二维数组的第0列中，把a所指二维数组中的第0行放到b所指二维数组的最后一列中，b所指二维数组中其他数据不变。
 # define N 4
 void rotate(int a[][N], int b[][N])
 { int i, j;
 for (i=0; i { b[i][N-1] = 【19】 ; 【20】 = a[N-1][i]; }
 }


05年9月二级C语言笔试试题答案

2005年9月二级C语言笔试试题答案

 一、答案题
（1）—（10） CACDC　DAABB
（11）—（20）ACBBA　CCDAB
（21）—（30）DCABC　DDABD
（31）—（40）BCCAA　DCCAA
（41）—（50）BCBAC　DABAD
二、填空题
（1） 数据库系统
（2） 空间
（3） 驱动模块
（4） 32
（5） 存储结构
（6） 88
（7） 1
（8） p=(double * ) malloc (sizeof(double))
（9） 2 20
（10） t*10
（11） 67 G
（12） 10
（13） *t
（14） bcdefgha
（15） 15
（16） 5
（17） >0
（18） 6
（19） a[0][i]
（20） b[i][0]


06年4月二级C语言笔试试题

2006年4月二级C语言笔试试题

一选择题（（1）-（10）每题2分，（11）-（50）每题1分，共60分）

下列各题A）、B）、C）、D）四个选项中，只有一个选项是正确的，请将正确选项涂写在答题卡相应位置上，答在试卷上不得分。

1）下列选项中不属于结构化程序设计方法的是

  A) 自顶向下

  B）逐步求精

  C）模块化

  D）可复用

2）两个或两个以上模块之间关联的紧密程度称为

  A）耦合度

  B）内聚度

  C）复杂度

  D）数据传输特性

3）下列叙述中正确的是

  A）软件测试应该由程序开发者来完成

  B）程序经调试后一般不需要再测试

  C）软件维护只包括对程序代码的维护

  D）以上三种说法都不对

4）按照“后进先出”原则组织数据的数据结构是

  A）队列

  B）栈

  C）双向链表

  D）二叉树

5）下列叙述中正确的是

  A）线性链表是线性表的链式存储结构

  B）栈与队列是非线性结构

  C）双向链表是非线性结构

  D）只有根结点的二叉树是线性结构

6）对如下二叉树

进行后序遍历的结果为

  A) ABCDEF

  B) DBEAFC

  C) ABDECF

  D) DEBFCA

7）在深度为7的满二叉树中，叶子结点的个数为

  A）32

  B）31

  C）64

  D）63

8）“商品”与“顾客”两个实体集之间的联系一般是

  A）一对一

  B）一对多

  C）多对一

  D）多对多

9）在E-R图中，用来表示实体的图形是

  A）矩形

  B）椭圆形

  C）菱形

  D）三角形

10）数据库DB，数据库系统DBS，数据库管理系统DBMS之间的关系是

  A）DB包含DBS和DBMS

  B）DBMS包含DB和DBS

  C）DBS包含DB和DBMS

  D）没有任何关系

11）以下不合法的用户标识符是

  A）j2_KEY

  B）Double

  C) 4d

  D) _8_

12)以下不合法的数值常量是

  A）011

  B）lel

  C) 8.0 E0.5

  D) 0xabcd

13)以下不合法的字符常量是

  A）'\018'

  B '\”'

  C) '\\'

  D) ‘\xcc'

14）表达式3.6-5/2+1.2+5%2的值是

  A）4.3

  B) 4.8

  C) 3.3

  D) 3.8

15）以下能正确定义字符串的语句是

  A）char str[]={‘\064'};

  B) char str=”\x43”;

  C) char str=”;

  D) char str[]=”\0”;

16)以下数组定义中错误的是

  A) int x[][3]={0};

  B) int x[2][3]={{1,2},{3,4},{5,6}};

  C) nt x[][3]={{1,2,3},{4,5,6}};

  D)int x[2][3]={1,2,3,4,5,6};

17)若要求从键盘读入含有空格字符的字符串，应使用函数

  A）getc()

  B) gets()

  C) getchar()

  D) scanf()

18) 下四个程序中，完全正确的是

  A）#include 　　　　　　 　　　B)#include

      main(); 　　　　　　 　　　　main()

    {/*programming*/ 　　　　　　　{/*/programming/*/

    printf(“programming!\n”);　　　} printf(“programming!\n”);}

  C) #include 　　　　　　　　　 D) include

      main() 　　　　　　　　　　　　main()

    {/*/*programming*/*/ 　　　　　{/*programming*/

    printf(“programming!\n”);} 　printf(“programming!\n”);}

19）若有定义：float x=1.5; int a=1,b=3,c=2;则正确的switch语句是

  A）switch(x) 　　　　　　　　　B) switch((int)x);

    {case 1.0: printf(“*\n”); {case 1: printf(“*\n”);

     Case 2.0: printf(“**\n”); } case 2: printf(“**\n”);}

  C) switch(a+b) 　　　　　　　　D) switch(a+b)

    { case 1: printf(“*\n”); 　{case 1: printf(*\n”);

    case 2+1: printf(“**\n”);} 　case c: printf(“**\n”);}

20)若各选项中所用变量已正确定义，函数fun中通过return语句返回一个函数值，以下选项中错误的程序是

  A）main() 　　　　 　　　　　　B) float fun(int a,int b){……}

    {……x=fun(2,10);……} 　　　　　main()

    float fun(int a,int b){……} 　　{……x=fun(i,j);……}

  C)float fun(int,int); 　　　　 D) main()

    main() 　　　　　　　　　　　　{ float fun(int i,int j);

    {……x=fun(2,10);……} 　　　　　……x=fun(i,j);……}

    float fun(int a,int b){……} 　　 float fun(int a,int b){……}

21)在以下给出的表达式中，与while(E)中的（E）不等价的表达式是

  A）（!E=0）

  B) (E>0||E<0)

  C) (E==0)

  D) (E!=0)

22)要求通过while循环不断读入字符，当读入字母N时结束循环。若变量已正确定义，以下正确的程序段是

  A） while((ch=getchar())!='N') printf(“%c”,ch);

  B） while(ch=getchar()!='N') printf(“%c”,ch);

  C） while(ch=getchar()==N') printf(“%c”,ch);

  D） while((ch=getchar())=='N') printf(“%c”,ch);

23)已定义以下函数

int fun(int *p)

{return *p;}

fun 函数返回值是

  A)不确定的值

  B）一个整数

  C）形参p中存放的值

  D）形参p的地址值

24）若有说明语句：double *p,a;则能通过scanf语句正确给输入项读入数据的程序段是

  A）*p=&a; scanf(“%lf”,p);

  B)*p=&a; scanf(“%f”,p);

  C) p=&a; scanf(“%lf”,*p);

  D)p=&a; scanf(“%lf”,p);

25)现有以下结构体说明和变量定义，如图所示，指针p,q,r分别指向一个链表中连续的三个结点。

struct node

{

char data;

struct node *next;

}*p,*q,*r;

现要将q和r所指结点交换前后位置，同时要保持链表的连续，以下不能完成此操作的语句是

  A）q->next=r->next; p->next=r; r->next=q;

  B) p->next=r; q->next=r->next; r-.next=q;

  C) q->next=r->next; r->next=q; p->next=r;

  D) r->next=q; p-next=r; q-next=r->next;

26)有以下程序段

struct st

{ int x; int *y;}*pt:

int a[]={1,2}，b[]={3,4};

struct st c[2]={10,a,20,b};

pt=c;

以下选项中表达式的值为11的是

  A) *pt->y

  B) pt->x

  C) ++pt->x

  D) (pt++)->x

27)设fp为指向某二进制文件的指针，且已读到此文件末尾，则函数feof（fp）的返回值为

  A）EOF

  B）非0值

  C) 0

  D）NULL

28）设有以下语句

int a=1,b=2,c;

c=a^(b<<2);

执行后，c的值为

  A）6

  B） 7

  C） 8

  D） 9

29）有以下程序

#include

main()

{

char c1,c2,c3,c4,c5,c6;

scanf(“%c%c%c%c”,&c1,&c2,&c3,&c4);

c5=getchar(); c6=getchar();

putchar(c1); putchar(c2);

printf(“%c%c\n”,c5,c6);

}

程序运行后，若从键盘输入（从第1列开始）

123<回车>

45678<回车>

则输出结果是

  A）1267

  B）1256

  C） 1278

  D）1245

30）若有以下程序

main()

{int y=10;

while(y- -); printf(“y=%d\n”y);

}

程序运行后的输出结果是

  A）y=0

  B)y=-1

  C) y=1

  D)while构成无限循环

31）有以下程序

main()

{

int a=0,b=0,c=0,d=0;

if(a=1) b=1;c=2;

else d=3;

printf(“%d,%d,%d,%d\n”,a,b,c,d);

}

程序输出

  A）0,1,2,0

  B) 0,0,0,3

  C)1,1,2,0

  D)编译有错

32）有以下程序

main()

{

int i,j,x=0;

for(i=0;i<2;i++)

{ x++;

for(j=0;j<=3;j++)

{

if(j%2) continue;

x++;

}

x++;

}

printf(“x=%d\n”,x);

}

程序执行后的输出结果是

  A）x=4

  B) x=8

  C) x=6

  D) x=12

33)有以下程序

int fun1(duoble a){return a*=a;}

int fun2(dpuble x,double y)

{

double a=0,b=0;

a=fun1(x); b=fun1(y); return (int)(a+b);

}

main()

{double w; w=fun2(1.1,2.0);……}

程序执行后变量w中的值是

  A）5.21

  B) 5

  C) 5.0

  D) 0.0

34)有以下程序

main()

{

int i,t[][3]={9,8,7,6,5,4,3,2,1};

for(i=0;i<3;i++) printf(“%d”,t[2-i][i]);

}

程序的执行后的输出结果是

  A）7 5 3

  B） 3 5 7

  C）3 6 9

  D）7 5 1

35）有以下程序

fun(char p[][10])

{int n=0,i;

for(i=0;i<7;i++)

if(p[i][0]=='T') n++;

return n;

}

main()

{

char str[][10]={“Mon”, “Tue”, “Wed”, “Thu”,”Fri”,”Sat”,”Sun”};

printf(“%d\n”,fun(str));

}

程序执行后的输出结果是

  A）1

  B） 2

  C）3

  D） 0

36有以下程序

main()

{

int i,s=0,t[]={1,2,3,4,5,6,7,8,9};

for(i=0;i<9;i+=2) s+=*(t+i);

printf(“%d\n”,s);

}

程序执行后的输出结果是

  A）45

  B）20

  C）25

  D）36

37）有以下程序

void fun1(char *p)

{

char *q;

q=p;

while(*q!='\0')

{ (*q)++; q++; }

}

main()

{ char a[]={“Program”},*p;

p=&a[3]; fun1(p); printf(“%s\n”,a);

}

程序执行后的输出结果是

  A）P rohsbn

  B)Prphsbn

  C)Progsbn

  D)Program

38)有以下程序

void swap(char *x,char *y)

{

char t;

t=*x; *x=*y; *y=t;

}

main()

{

char *s1=”abc”,*s2=”123”;

swap(s1,s2); printf(“%s,%s\n”,s1,s2);

}

程序执行后的输出结果是

  A）123，abc

  B) abc,123

  C)1bc,a23

  D) 321,cba

39）有以下程序

int fun(int n)

{

if(n==1) return 1;

else

return (n+fun(n-1));

}

main()

{

int x;

scanf(“%d”,&x); x=fun(x); printf(“%d\n”,x);

}

程序执行时，给变量x输入10，程序的输出结果是

  A）55

  B) 54

  C) 65

  D) 45

40)有以下程序

int fun(int x[],int n)

{static int sum=0,i;

for(i=0;i sum+=x[i];

return sum;

}

main()

{int a[]={1,2,3,4,5},b[]={6,7,8,9},s=0;

s=fun(a,5)+fun(b,4); printf(“%d\n”,s);

}

程序执行后的输出结果是

  A）45

  B）50

  C）60

  D）55

41）有以下程序

main()

{

union {

char ch[2];

int d;

}s;

s.d=0x4321;

printf(“%x,%x\n”,s.ch[0],s.ch[1]);

}

在16位编译系统上，程序执行后的输出结果是

  A）21，43

  B）43，21

  C）43，00

  D）21，00

42）有以下程序

main()

{

char *p[]={“3697”,”2584”};

int i,j; long num=0;

for(i=0;i<2;i++)

{j=0;

while(p[i][j]!='\0')

{ if((p[i][j]-‘0')%2)num=10*num+p[i][j]-‘0';

j+=2;

} }

printf(“%d\n”num);

}

程序执行后的输出结果是

  A）35

  B）37

  C）39

  D）3975

43）执行以下程序后，test.txt文件的内容是（若文件能正常打开）

#include

main()

{

FILE *fp;

char *s1=”Fortran”,*s2=”Basic”;

if((fp=fopen(“test.txt”,”wb”))==NULL)

{ printf(“Can't open test.txt file\n”); exit(1);}

fwrite(s1,7,1,fp); /*把从地址s1开始的7个字符写到fp所指文件中*/

fseek(fp,0L,SEEK_SET); /*文件位置指针移到文件开头*/

fwrite(s2,5,1,fp);

fclose(fp);

}

  A)Basican

  B)BasicFortran

  C)Basic

  D)FortranBasic

44)以下叙述中错误的是

  A）C语言源程序经编译后生成后缀为.obj的目标程序

  B）C语言经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件

  C）用C语言编写的程序称为源程序，它以ASCII代码形式存放在一个文本文件中

  D）C语言的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令

45）以下叙述中错误的是

  A）算法正确的程序最终一定会结束

  B）算法正确的程序可以有零个输出

  C）算法正确的程序可以有零个输入

  D）算法正确的程序对于相同的输入一定有相同的结果

46）以下叙述中错误的是

  A）C程序必须由一个或一个以上的函数组成

  B）函数调用可以作为一个独立的语句存在

  C）若函数有返回值，必须通过return语句返回

  D）函数形参的值也可以传回对应的实参

47）设有以下定义和语句

char str[20]=”Program”,*p;

p=str;

则以下叙述中正确的是

  A）*p与str[0]中的值相等

  B）str与p的类型完全相同

  C）str数组长度和p所指向的字符串长度相等

  D）数组str中存放的内容和指针变量p中存放的内容相同

48）以下叙述中错误的是

  A）C程序中的#include和#define行均不是C语句

  B）除逗号运算符外，赋值运算符的优先级最低

  C）C程序中，j++；是赋值语句

  D）C程序中，+、-、*、/、%号是算术运算符，可用于整型和实型数的运算

49）以下叙述中正确的是

  A）预处理命令行必须位于C源程序的起始位置

  B）在C语言中，预处理命令行都以“#”开头

  C）每个C程序必须在开头包括预处理命令行：#include

  D)C语言的预处理不能实现宏定义和条件编译的功能

50）以下叙述中错误的是

  A）可以通过typedef增加新的类型

  B）可以用typedef将已存在的类型用一个新的名字来代表

  C）用typedef定义新的类型名后，原有类型名仍有效

  D）用typedef可以为各种类型起别名，但不能为变量起别名

二：填空题（每空2分，共40分）

请将每一个空的正确答案写在答题卡[1]至[20]序号的横线上，答在试卷上不得分

1）对长度为10的线性表进行冒泡排序，最坏情况下需要比较的次数为_______[1]________。

2）在面向对象方法中，_____[2]______描述的是具有相似属性与操作的一组对象。

3）在关系模型中，把数据看成是二维表，每一个二维表称为一个___[3]_____。

4）程序测试分为静态分析和动态测试，其中__[4]______是指不执行程序，而只是对程序文本进行检查，通过阅读和讨论，分析和发现程序中的错误。

5）数据独立性分为逻辑独立性与物理独立性，当数据的存储结构改变时，其逻辑结构可以不变，因此，基于逻辑结构的应用程序不必修改，称为_[5]______。

6）若变量a,b已定义为int类型并赋值21和55，要求用printf函数以a=21,b=55的形式输出，请写出完整的输出语句__[6]____。

7）以下程序用于判断a,b,c能否构成三角形，若能输出YES，若不能输出NO。当a,b,c输入三角形三条边长时，确定a,b,c能构成三角形的条件是需要同时满足三条件：a+b>c,a+c>b,b+c>a。 请填空。

main()

{

float a,b,c;

scanf(“%f%f%f”,&a,&b,&c);

if(__[7]__)printf(“YES\n”);/*a,b,c能构成三角形*/

else printf(“NO\n”);/*a,b,c不能构成三角形*/

}

8）以下程序的输出结果是__[8]_____

main()

{ int a[3][3]={{1,2,9},{3,4,8},{5,6,7}},i,s=0;

for(i=0;i<3;i++) s+=a[i][i]+a[i][3-i-1];

printf(“%d\n”,s);

}

9)当运行以下程序时，输入abcd，程序的输出结果是：_[9]____。

insert(char str[])

{ int i;

i=strlen(str);

while(i>0)

{ str[2*i]=str[i]; str[2*i-1]='*';i--;}

printf(“%s\n”,str);

}

main()

{char str[40];

scanf(“%s”,str ); insert(str);

}

10)以下程序的运行结果是：__[10]____

fun(int t[],int n)

{ int i,m;

if(n==1) return t[0];

else

if(n>=2) {m=fun(t,n-1); return m;}

}

main()

{

int a[]={11,4,6,3,8,2,3,5,9,2};

printf(“%d\n”,fun(a,10));

}

11)现有两个C程序文件T18.c和myfun.c同时在TC系统目录（文件夹）下，其中T18.c文件如下：

#include

#include”myfun.c”

main()

{ fun(); printf(“\n”); }

myfun.c文件如下：

void fun()

{ char s[80],c; int n=0;

while((c=getchar())!='\n') s[n++]=c;

n--;

while(n>=0) printf(“%c”,s[n--]);

}

当编译连接通过后，运行程序T18时，输入Thank!则输出的结果是：___[11] 。

12)以下函数fun的功能是返回str所指字符串中以形参c中字符开头的后续字符串的首地址，例如：str所指字符串为Hello!, c中的字符为e，则函数返回字符串：ello!的首地址。若str所指字符串为空串或不包含c中的字符，则函数返回NULL。请填空。

char *fun(char *str,char c)

{ int n=0;char *p=str;

if(p!=NULL)

while(p[n]!=c&&p[n]!='\0') n++;

if(p[n]=='\0' return NULL;

return (_[12]_);

}

13)以下程序的功能是：输出100以内（不含100）能被3整除且个位数为6的所有整数，请填空。

main()

{ int i,j;

for(i=0;__[13]__;i++)

{ j=i*10+6;

if(_[14]____) continue;

printf(“%d ”,j);

}

}

14)以下isprime函数的功能是判断形参a是否为素数，是素数，函数返回1,否则返回0，请填空

int isprime(int a)

{ int i;

for(i=2;i<=a/2;i++)

if(a%i==0) __[15]___;

__[16]___;

}

15）以下程序的功能是输入任意整数给n后，输出n行由大写字母A开始构成的三角形字符阵列图形，例如，输入整数5时（注意：n不得大于10），程序运行结果如下：

A B C D E

F G H I

J K L

M N

O

请填空完成该程序。

main()

{ int i,j,n; char ch='A';

scanf(“%d”,&n);

if(n<11)

{

for(i=1;i<=n;i++)

{ for(j=1;j<=n-i+1;j++)

{ printf(“%2c”,ch);

___[17]____;

}

【18】

}

}

else printf(“n is too large!\n”);

printf(“\n”);

}

16)以下程序中函数fun的功能是：构成一个如图所示的带头结点的单向链表，在结点数据域中放入了具有两个字符的字符串。函数disp的功能是显示输出该单链表中所有结点中的字符串。请填空完成函数disp。

#include

typedef struct node /*链表结点结构*/

{ char sub[3];

Struct node *next;

}Node;

Node fun(char s) /*建立链表*/

{ …… }

void disp(Node *h)

{

Node *p;

p=h->next;

While(【19】)

{

printf(“%s\n”,p->sub); p=【20】;}

}

main()

{

Node *hd;

hd=fun(); disp(hd); printf(“\n”);
}


06年4月二级C语言笔试试题答案

6

2006年4月二级C语言笔试试题答案

一、选择题
1-10 : DADBA DCDAC
11-20:CCADD DBBCA
21-30:CABDD CDDDB
31-40:DBABB CACAC
41-50:ACADB DCDBA

二、填空题
1、45
2、类
3、关系
4、静态分析
5、物理独立性
6、printf("a=%d,b=%d",a,b)
7、a+b>c&&a+c>b&&b+c>a
8、30
9、a*b*c*d*
10、11
11、ahT
12、p+n 或 str+n
13、i<=9 或 i<10
14、j%3!=0
15、return 0
16、return 1
17、ch=ch+1
18、printf("\n")
19、p!=NULL
20、p->next