江苏省高校计算机等级考试命题研究院 江苏省高校计算机等级考试辅导
2018年秋季江苏省计算机二级C语言真题1

 

1.         根据不同的应用需求,数字音频采用的编码方法有多种,文件格式也各不相同。下列的音频格式中,由微软公司开发的,采用未压缩方法编码的是____

A. WAV

B. MP3

C. AAC

D. WMA

A

解析:MP3是一种音频压缩技术,由于这种压缩方式的全称叫MPEG Audio Layer3,所以人们把它简称为MP3,WMA是微软制订的音频压缩文件格式,比mp3标准晚,比mp3还小,比mp3音质还好, WAV是微软公司(Microsoft)开发的一种声音文件格式, 采用未压缩编码方式。

5

2.         下列有关IP地址(IPv4)和路由器的叙述中,错误的是_____

A. 每个IP地址使用32个字节的二进制数表示,在使用中通常写成“点分十六进制”的形式

B. IP地址分为五类,其中A类、B类和C类是三个基本类,每类有不同长度的网络号和主机号

C. IP地址空间的分配由国际组织ICANN负责,目前IP地址空间已分配完毕

D. 路由器是连接异构网络的关键设备,一台路由器会拥有(使用)多个不同的IP地址

A

解析: 每个IP地址使用32个字节的二进制数表示,在使用中通常写成“点分十进制”的形式 

4

3.         字符集及其编码是计算机中表示、存储、处理和交换文本信息的基础,但由于历史原因,目前不同系统或应用中使用的字符编码方案并不统一。下列编码方案中,所有字符均采用等长编码(编码长度相同)的是______

A. GB2312

B. GB18030

C. UTF-8

D. UTF-16

A

解析: GB2312编码:是我国1981年颁布的第一个国标,该标准选出6763个常用汉字和682个非汉字字符,所有字符采用2字节编码; GB18030:包含汉字23940,GB2312GBK保持兼容。同时与UCS也接轨,在我国信息处理产品中强制执行,ASCII采用1字节编码,汉字采用2字节编码,其他采用4字节编码; UCS:国际标准化组织(ISO)制定了一个将全世界所有文字与符号集中进行统一编码,称为UCS,与其等同的是由微软等公司共同制定的工业标准Unicode,UCS有两种标准UTF-8UTF-16,UTF-8采用ASCII码用1个字节编码,拉丁字母,标点符号等采用2字节编码,汉字采用3个字节编码,其他极少字符采用4字节编码,UCS-16是指ASCII和汉字都采用2字节编码,其他不常用字符采用4字节编码,Windows中文版上现在使用UTF-16,也是Java,.NET软件开发环境等默认的编码标准

5

4.         TCP/IP模型将计算机网络分成下列4层,每一层都包含若干个协议。在TCP/IP模型中,HTTP协议工作在______

A. 接口层

B. 互连层

C. 传输层

D. 应用层

D

解析: TCP/IP包括了100多个协议,将通信问题划分为四个层次,从高到低依次是应用层、传输层、网络互连层、网络接口与硬件层,应用层规定了运行在不同主机上的应用程序之间如何通过互连的网络进行通信,包括的协议如HTTP,SMTP,FTP,TELNET;传输层规定了怎样进行端-端的数据传输,TCPUDP两个协议,TCP协议负责可靠的完成数据从发送计算机到接收计算机的传输,UDP是不可靠的数据传输协议, 例如音频和视频数据的传输;网络互连层规定了在整个互连的网络中所有计算机统一使用的编址方案和数据包格式(称为IP数据报),以及IP数据报的转发机制;网络接口与硬件层规定了怎样与各种不同的网络进行接口,并负责将IP包转换成适合在特定网络中传输的帧格式 

4

5.         下列有关计算机网络组成、分类和工作模式等叙述中,错误的是______

A. 按网络所覆盖的地域范围来分,人们常将计算机网络分为LANATMWLAN等类型

B. 有些广域网是一些机构或组织自行构建的专用网,有些是网络运营商构建的公用数据网

C. 网络协议是计算机网络的重要组成部分,目前互联网主要采用TCP/IP协议系列

D. 计算机网络有两种基本工作模式,即P2P工作模式和C/S工作模式

A

解析: 按网络所覆盖的地域范围来分分为局域网(LAN)、城域网(MAN)、广域网(WAN) 

4

6.         下列有关计算机的逻辑组成和分类的叙述中,错误的是______

A. 一台计算机中往往有多个处理器,它们各有其不同的处理任务,其中CPU是核心部件

B. 主存储器与CPU高速连接,用来存放已经启动运行的程序代码和需要处理的数据

C. 人们提及PC时,泛指台式机、笔记本电脑、智能手机和平板电脑等个人使用的计算机

D. 嵌入式计算机是内嵌在其他设备中的专用计算机,许多嵌入式计算机都把软件固化在芯片中

C

解析: 人们提及PC时,泛指台式机、笔记本电脑等个人使用的计算机  (: 一台计算机中往往有多个处理器,CPU,图形处理器等)

2

7.         字符集及其编码是计算机中表示、存储、处理和交换文本信息的基础,但由于历史原因,目前不同系统或应用中使用的字符编码方案并不统一。下列编码方案中,目前在我国信息处理产品中强制贯彻执行的是____

A. GB 2312

B. GBK

C. GB 18030

D. UCS/Unicode

C

解析: GB18030:包含汉字23940,GB2312GBK保持兼容。同时与UCS也接轨,在我国信息处理产品中强制执行。

5

8.         在现代通信系统中,为了能有效地提高数据链路的利用率、降低通信成本,一般使用多路复用技术让多路信号同时共用一条传输线进行传输。用户通过电话线使用ADSL技术接入互联网时,ADSL技术接入方式主要是使用了______

A. TDM

B. WDM

C. FDM

D. CDM

C

解析:时分多路复用(TDM)是各终端设备按不同时间来轮流使用同一线路来传输数据,是计算机网络传输使用的主要方式,频分多路复用(FDM)是将不同信源发出的信号调制在不同频率的载波上,波分多路复用(WDM)是在一根光纤传输不同波长的光波。码分是指每个用户分配一个地址码,各个码型互不重叠,通信各方之间不会相互干扰,且抗干拢能力强 

4

9.         光盘是目前常见的辅助存储器。下列相关叙述中,错误的是____

A. 光盘存储器由光盘驱动器和光盘片两部分组成,光盘的基片是铝合金材料

B. 从接口来看,目前内置DVD光驱与主机的接口主要是SATA,外置的主要是USB

C. DVD光盘分为单面单层、单面双层等多种类型,目前最常用的是单面单层的盘片

D. BD光驱采用波长较短的蓝色激光在光盘上进行数据读写,因而提高了光盘存储容量

A

解析: 光盘的基片是耐热的有机玻璃

2

10.     在微软公司的Office软件中内置了一种程序设计语言,用户可以使用它来编写程序以扩展功能。该语言是_____

A. VBA

B. VBScript

C. Java

D. C#

A

解析: VBA用于编写程序来扩展Office软件的功能,VBScript用于嵌入到Html文档中以扩充网页的功能,Java用于网络编程,包括编写安卓智能手机的App,Object-C语言是iPhoneiPad编程的语言, Lisp语言与PROLOG语言主要用于人工智能,Ada语言用于飞行器控制,MATLAB是一种面向向量和矩阵运算的数值计算语言。

3

1(单选题):

若有预处理命令“#include"和声明“char sl[80]=world cup,s2[80]=2018;”,则以下库函数调用中错误的是________

A. strlen(s1);

B. strcpy(s1,s2);

C. strcat(s1,s2);

D. strcmp(s1[0],s2[0]);

D

解析: A选项返回s1内存空间中字符个数9,B选项将s2中内存空间的值拷贝给s1内存空间,C选项表示将s2内存空间的值放到s1内存空间原有数值第1个结束标志符\0的后面,题目中s1内存空间形成world cup2018,D选项错误,strcmp(表达式1,表达式2)的作用是比较表达式1指向的内存空间中的字符串与表达式2指向的内存空间中的字符串是否相等,因为strcmp要求表达式必须是内存编号,s1[0]返回的是w,s2[0]返回的是2,不是内存编号,如果修改为strcmp(s1,s2)就对了,因为在C语言中,只写数组的名字表示该数组的起始内存编号;strlen,strcpy,strcat,strcmp都要求参数是内存编号, 因文字解析不如视频清晰,详细见视频详细讲解。

7

己有声明“double a=1.23456int i;”,现要求使变量a中实数的十进制表示经过四舍五入处理后仅保留2位小数(即将a值变为1.23000),以下表达式中能实现该功能的是_______

A. i=a*100+0.5,a=i/100.0

B. a = (a*100+0.5)/100.0

C. a=((int)a*100+0.5)/100.0

D. a=(a/100+0.5)/100.0

A

解析:因为i是整型,所以i=a*100+0.5得到i=123.456+0.5,得到i=123,然后执行a=i/100.0后得到1.23000,注意这里的i/100.0不能写成i/100,因为i是整型,100是整型,整型除以整型得到整型,所以i/100的结果是1而不是1.23 ,100.0才表示双精度型,所以i/100.0才正确,另外C选项首先执行(int)a得到1,然后(1*100+0.5)/100.0得到结果1.005000

4

以下声明中正确的是______

A. int a[];

B. int a[10]=0;

C. int a[10+1]={0};

D. int a[3l={1,2,3,4};

C

解析:声明数组时,数组大小必须是常量,A选项错误,修改为 int a[]={1,2,3};这类格式就对了;B选项错误,int,double,float类型初始化数组赋值时,不能直接不加{}就赋值,修改为int a[10]; 或者int a[10]={1,2};这类格式就对了;D选项错误, int a[3]大小是3块内存空间,{1,2,3,4}4个值了。

7

若有声明“int a=lx=3y=4:”,则下列语句中除_______外,其他三条语句功能均相同。

A.  if(a) printf("%d ",x);  else  printf("%d",y);

B. if(a == 0) printf("%d",y);  else  printf("%d”,x);

C. if(a! =0) printf("%d",x); else printf('%d",y);

D. if(a==0) printf("%d",x); else printf(“%d”,y);

D

解析:C语言中,0表示假值,0表示真值,因为a=1,所以ABC选项直接输出x值。

5

若有声明“int a[4],j;”及语句“for(j=0;j<4;j++) p[j]=a+j;”,则标识符p应声明为_______

A. int p[4];

B. int (*p)[4]

C. int **p[4]

D. int *p[4]

D

解析:A选项是指普通数组,声明可以盛放4int型数值的内存空间区;B选项是指向一维数组的指针变量;C选项是二级指针数组,里面盛放的是一级指针的内存编号;D选项是指针数组, 声明可以盛放4int型内存编号的内存空间区, 因文字解析不如视频清晰,详细见视频详细讲解 

10

 

 

6(填空题 <3> ) :

以下程序运行时输出结果中第一行是____________   ,第二行是____________   ,第三行是____________  

#include

void change(int x, int m)

{

    char ch[]={"0123456789ABCDEF"},b[80];

    int i=0,r;

    while(x)

    {

        r=x%m;  

        x/=m;

        b[i++]=ch[r];

    }

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

        printf("%c",b[i]);

}

int main()

{

    change(10,2);  printf("\n");

    change(20,8);  printf("\n");

    change(30,16);    

    return 0;

}

 

1010@24@1E

 

7 (填空题 <2> ) :

以下程序运行时输出结果中第一行是____________   ,第二行是____________  

#include

int func(int a)

{

    static int c=1;

    c*=a;   

    return c;

}

int main()

{

    int  b=1, i;

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

    {

        b=b+func(i);

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

    }

    return 0;

}

 

3@9

 

 

8(填空题 <2> ) :

以下程序运行时输出结果中第一行是____________   ,第二行是____________  

#include

int f(int a,int b);

int main( )

{

    printf("%d\n%d",f(3,5), f(9,6));

    return 0;

}

int f(int a,int b)

{

    if(a==b)

        return a;

    else

        if(a>b)

            return f(a-b,b);

        else 

            return f(a,b-a);

}

 

1@3

 

9 (填空题 <3> ) :

以下程序运行时输出结果中第一行是____________   ,第二行是____________   ,第三行是____________  

#include

int main( )

{

    int a[3][3]={0},i,j,k,n=3;

    j=n/2;  i=n-1; 

    a[i][j]=1;

    for(k=2;k<=n*n;k++)

    {

        i++;j++;

        if(i>n-1&&j>n-1)

        {

            i=i-2;  j--;

        }

        else

        {

            if(i>n-1) i=0;      

            if(j>n-1) j=0;  

        }

        if(a[i][j]==0) 

            a[i][j]=k;

        else 

        {

            i=i-2; j--; a[i][j]=k;

        }

    }

    printf("%d\n%d\n%d ",a[2][1], a[0][2], a[1][1]);

    return 0;

}

1@2@5

 

 

1(完善程序):

完善程序12每空3

【要求】

1.打开T盘中文件myf0.c,按以下程序功能完善文件中的程序。

2.修改后的源程序仍保存在Tmyf0.c文件中,请勿改变myf0.c的文件名。

【程序功能】

函数f的功能是计算并返回F(x)值,其中x不等于0

计算F(x)中的无穷级数时,当通项(-1)nx2n/(2n)!的绝对值小于等于10-6时停止累加。

【测试数据与运行结果】

测试数据:x = 1

 输出:f(1.000000)=1.278868

【待完善的源程序】

#include

#include

#include

double f(double x)

{

    int n=1,sign=-1;

    double term=    1     ,sum=term;         

    while(    2    >1e-6)             

    {

        term=term*sign*x*x/   3    ; 

        sum=sum+term;   

        n++;

    }

    sum=3.14159/2-cos(x)/x*    4   ;   

    return sum;

}

int main()

{

    double x=1;  

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

    getch();

    return 0;

}

 

1@fabs(term)@((2*n-1)*(2*n))@sum

 

(1)1

(2)fabs(term)

(3)((2*n-1)*(2*n))

(4)sum

 

 

 

2(改错题):

改错(共16分,每错4分)

【要求】

1.打开T盘中文件myf1.c,按以下程序功能改正文件中程序的错误。

2.可以修改语句中的一部分内容,调整语句次序,增加变量声明或预处理命令,但不能增加其他语句,也不能删去整条语句。

3.修改后的源程序仍保存在Tmyf1.c文件中,请勿改变myf1.c的文件名。

【程序功能】

 在一个一维数组中存储的N个互不相同的整数中找出最小值和最大值,将最小值移到第一个数之前,将最大值移到最后一个数之后,其他数保持相对位置不变。

【测试数据与运行结果】

测试数据:8,5,6,9,4,1,-1,7,3,2

输出:-1,8,5,6,4,1,7,3,2,9

【含有错误的源程序】

#include

#include

#define N 10

void crl(int *a)

{

    int i,j,max=0,min=0,temp;

    for(i=1;i

        if(a[min]>a[i]) min=i;

    temp=a[min];

    j=min;

    while(j<0)

    {

        a[j]=a[j-1];

        j--;

    }

    a[0]=temp;

    for(i=1;i

        if(a[max]

    temp=a[max];

    j=max;

    while(j

    {

        a[j]=a[j-1];

        j++;

    }

    a[N-1]=temp;

}

int main()

{

    int a[N]={8,5,6,9,4,1,-1,7,3,2};

    int i;

    crl(int a);

    for(i=0;i

       printf("]",*a+i);

    printf("\n");

    getch();

    return 0;

}

 

while(j<0)   修改为   while(j>0)@ a[j]=a[j-1];   修改为  a[j]=a[j+1];@ crl(int a);    修改为   crl(a);@ printf("]",*a+i);   修改为  printf("]",*(a+i));

 

 

(1) while(j<0)   修改为   while(j>0)

(2) a[j]=a[j-1];   修改为  a[j]=a[j+1];

(3) crl(int a);    修改为   crl(a);

(4) printf("]",*a+i);   修改为  printf("]",*(a+i));

 

 

3(编程题):

编程(共22分)

【要求】

1.打开T盘中文件myf2.c,在其中输入所编写的程序。

2.数据文件的打开、使用、关闭均用C语言标准库中缓冲文件系统的文件操作函数实现。

3.请勿改变myf2.c的文件名。

【程序功能】

  在一个字符串中所有数字子串前插入指定字符。例如,原字符串为"AB1CD12EF123GH",在所有数字字符子串前插入一个指定字符'-'后字符串变为"AB-1CD-12EF-123GH"

【编程要求】

1.编写void insert(char *p)函数。函数功能:在p指向的字符串中所有数字字符子串前插入一个字符-

2.编写main函数。函数功能:声明1个一维数组并用测试数据初始化,用数组作实参调用insert函数对数组中字符串做处理,将处理后的字符串输出到显示器屏幕及文件myf2.out中。最后将考生本人的准考证号输出到文件myf2.out中。

【测试数据与运行结果】

测试数据:"AB1CD12EF123GH"

 输出:AB-1CD-12EF-123GH

 

#include

 

void insert(char *p)

{

  char *t,*q;

  int  judge=0;

  q=p;

  while(*p)

  {

     if(*p>='0' && *p<='9' && judge==0)

    {       

       while(*q) q++;

             

       for(t=p;t

       {         

         *q=*(q-1);

       }

       *t='-';       

       judge=1;

 

     }

    if(*p>='A' && *p<='Z' || *p>='a' && *p<='z')

   {

      judge=0;

    }

    p++;

  }

}

 

int main()

{

   FILE *fp;

   char c[100]={"AB1CD12EF123GH"};

   insert(c);

   fp=fopen("myf2.out","w+");

   printf("%s",c);

   fprintf(fp,"%s\n",c);

   fprintf(fp,"My Exam is 001122");

   fclose(fp);

}