江苏省高校计算机等级考试命题研究院 江苏省高校计算机等级考试辅导
2016年3月江苏省计算机二级C真实考题

20163月江苏省高校计算机等级考试真题

1、单选题

1.         最大的10位无符号二进制整数转换成八进制数是__________

A.1000

B.1023

C.1024

D.1777

D

解析:最大10位无符号二进制整数是1111111111,根据转换的关系,从右向左每三位1组转换成一个8进制数,不足三位时左边补0, 001 111 111 111对应的8进制数是1777

1

2.         打印机的性能指标主要是打印精度、打印速度、色彩数目和打印成本等。打印机精度也就是打印机的分辨率,它用dpi来表示,是衡量图像清晰程度最重要的指标。dpi的含义是_______

A.每厘米可打印的点数

B.每平方厘米可打印的点数

C.每英寸可打印的点数

D.每平方英寸可打印的点数

C

解析:dip的含义是每英寸可打印的点数

2

3.         下面对于网络信息安全的认识正确的是___________

A.只要加密技术的强度足够高,就能保证数据不被非法窃取

B.访问控制的任务是对每个(类)文件或信息资源规定不同用户对它们的操作权限

C.数字签名在效力法律上还不明确,所以尚未推广使用

D.根据人的生理特征(如指纹、人脸)进行身份鉴别在单机环境下还无法使用

B

解析:A,加密强度足够高,增加了数据被非法窃取后破解的难度,但不能保证不被非法窃取。

C,数字签名的效力在法律上已经明确,已经推广。D,根据人的生理特征进行身份鉴别在1台计算机环境下可以使用。

3

4.         下列关于计算机动画的叙述中,错误的是_______________

A.计算机动画是用计算机制作可供实时演播的一系列连续画面的一种技术

B.计算机动画的基础是计算机图形学,涉及景物的造型、运动控制和描述、视频生成等技术

C.计算机动画的制作要借助于动画制作软件,如二维动画软件Animator Pro和三维动画软件Adobe Director

D.在国际上,目前计算机动画的设计与制作已经形成了一个年产值达几亿美元的动漫产业

D

解析: 目前计算机动画的设计与制作已经形成了一个年产值达上千亿美元的动漫产业

5

5.         在下列有关Windows操作系统的多任务处理功能叙述中,正确的是__________

A.在多任务处理过程中,前台任务与后台任务都能得到CUP的响应(处理)

B.由于CPU具有并行执行指令的功能,所以操作系统才能同时进行多个任务的处理

C.如果用户只启动一个应用程序,那么该程序就可以自始至终的独占CPU

D.Windows操作系统采用协作方式支持多个任务的处理

A

解析:B,多任务处理是操作系统的功能,CPU是否具有并行执行指令的功能没有关系。C,使用CPU是由操作系统来管理的,即使只有一个应用程序,如果应用程序没有计算的任务,也不会使用CPUD, Windows操作系统采用时间片轮转方式支持多个任务的处理

3

6.         下列关于字符编码标准的叙述中,错误的是____________

A.ASCII标准是美国制定的标准,也是目前使用最为广泛的西文字符编码标准

B.GB2312GBKGB18030都是我国制定的标准,在这些标准中所有字符均采用双字节编码

C.目前在台港澳等地区广泛使用BIG5编码标准,它与GB2312不兼容

D.UCSISO制定的标准,相应的工业标准称为Unicode

B

解析:GB18030采用单字节,双字节与四字节编码。单字节用于ASCII字符,双字节编码表示汉字,GBK兼容,用四字节表示UCS中的其他字符。

5

7.         下列关于移动通信的叙述中,错误的是______________

A.1代个人移动通信采用的是模拟传输技术,从第2代开始均采用了数字传输技术

B.目前仍在使用的GSMCDMA都是第2代移动通信

C.我国的3G通信目前有三种技术标准,这三种标准的网络不能互通,但终端设备互相兼容

D.目前第4代移动通信(4G)已广泛使用,我国三大电信运营商均已经开展4G业务

C

解析:3G通信三种网络可以互通,但终端设备不兼容。

4

8.         在下列有关算法的叙述中,错误的是_____________

A.通俗地说,算法就是解决问题的方法和步骤

B.算法总是在执行了有限步的操作后终止

C.程序是算法的实现,程序与算法是一一对应的

D.算法解决的往往是一类问题而不是一个特定的问题

C

解析:程序是算法的具体实现,算法是抽象的,程序是具体的,两者无法做到一一对应。

3

9.         下列关于CPU及指令系统的叙述中,错误的是_____________

A.CPU中的ALU可能有多个,有的负责完成整数运算、有的负责完成浮点数运算

B.目前CPU芯片不仅包含逻辑CPU,往往还包含有高速缓存、存储控制器等其他一些部件

C.不同指令的操作要求不同,但被处理的操作数类型、个数和来源通常一样

D.CPU所执行的全部指令称为CPU的指令系统,通常指令系统中有数以百计的不同指令

C

解析: 不同指令的操作要求不同,被处理的操作数类型、个数和来源也不同。

2

10.     所说的TCP/IP协议,是指由100多个协议组成的协议系列(包含下列几个协议),在下列协议中所发送电子邮件主要依赖________

A.     HTTP协议

B.      FTP协议

C.      Telnet协议

D.     SMTP协议

D

解析:HTTP协议用于服务器与客户端网页传输协议,FTP协议用于两台计算机之间传输文件,Telnet协议用于远程登录,SMTP用于发送电子邮件, POP3用于接收电子邮件。

4

 

 

C程序设计部分

11.     已知"int x=3,y=5,z,*p=&y; void f(int, int *);"以下语句中语法正确的是_________

A.f(x,y);

B.z=f(x,p);

C.f(x,&p);

D.f(x,&y);

D

解析:f函数中有2个参数,1个参数是int类型,2个参数是int *类型,A错在yint类型不是int *类型。B,f函数返回void类型,没有返回值,无法给z赋值。C错在&p返回的是二级指针int **类型,不是指针int *类型。

10

12.     已知有说明和定义"unsigned x=2; int y; float z=5; enum  A{m,n,k}; "以下表达式中错误的是_________

A. y=(int)z%x

B. y=sqrt(z-k)

C.m++

D.x=x-z

C

解析:enum类型无法自增, 枚举型是一个集合,集合中的元素(枚举成员)是一些命名的整型常量。

11

13.     以下选项中能表示C语言合法常量的是__________

A.1/2

B.-e-3

C.0fd

D.'\045'

D

解析:1/2是一个表达式。B错在e的左边必须要有值,2e-3C,0开始的表示是8进制数,8进制的取值范围在0—7,fd不在0-7之间。D表示8进制45所对应的ASCII字符,%这个字符。

2

14.     已知有结构定义及声明:

typedef struct

{

  char title[50];

  char author[50];

  int pub_date;

}BOOK;

BOOK bookarr[10]= {{"Fourier Series", "Tolstov",1962},

                    {"Quantum Physics", "Gasiorowicz",1974}};

以下表达式中有语法错误的是__________

A.bookarr.title[0]

B.bookarr[0].title

C.(*bookarr).title

D.bookarr->title

A

解析:bookarr返回操作系统分配的内存编号,如果用内存编号,那么要求必须用->符号来表示。A选项修改为(*bookarr).title[0]或修改为bookarr->title[0]就对了。

11

15.     以下能正确输出字符串"hello"的是__________

A.char *s; s="hello"; puts(s);

B.char s[]; s="hello"; puts(s);

C.char s[5]="hello"; puts(s);

D.char *s; strcpy(s,"hello"); puts(s);

A

解析:B, 声明时如果s[]这种格式,要求必须要初始化,B选项修改为char s[ ]="hello"就正确。C,char s[5]声明了5个内存单元,因为"hello"这种格式存放时,会在末尾自动增加一个'\0',实际是6个字符,无法存放到5个内存单元中。D, char *s;声明s是一个指针变量,因为s没有初始化,所以s中的内存单元是一个随机的数字编号如果执行后边的strcpy(s,"hello"),因为s中存放的是一个实际不存在的内存编号,执行时会报错。

10

 

6.

程序运行时,输出结果中第一行是__________,第二行是__________

#include <stdio.h>

 

int main()

{

  int x=1;

int  i,j;

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

  {

    x=2*x;

    for(j=3;j>0;j--)

      x=x+1;

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

  }

  return 0;

}

5@13

解析: 因为文字描述不如视频讲解清楚,详细见视频讲解

8

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

题目要将 内的 个整数填入a数组

 

#include <stdio.h>

#define N 5

void filla(int a[][N], int n)

{

  int i,j,tep,k=1;

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

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

        a[i][j]=k++;

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

  {

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

     {

       tep=a[j][i];

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

       a[n-j-1][n-i-1]=tep;

     }

  }

}

 

int main()

{

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

 filla(a,n);

 for(i=0;i<n;i++,putchar('\n'))

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

     printf("%5d",a[i][j]);

 return 0;

}

 

9  2  7@6  5  4 @3  8  1

解析: 因为文字描述不如视频讲解清楚,详细见视频讲解

8

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

#include <stdio.h>

int fun(int x)

{

  static int y=3;

  x+=y++;

  return x;

}

 

int main()

{

  int x;

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

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

  return 0;

}

 

5@7

解析: 因为文字描述不如视频讲解清楚,详细见视频讲解

8

程序运行时,输出结果中第一行是_____________,第二行是___________

#include <stdio.h>

int swap1(int a,int b)

{

  int temp=a;

  a=b;

  b=temp;

}

 

int swap2(int a[], int b[])

{

  int temp=a[0];

  a[0]=b[0];

  b[0]=temp;

}

 

int swap3(int*a,int *b)

{

  int temp=*a;

  *a=*b;

  *b=temp;

}

 

int main()

{

  int a[2]={1,2};

  int b[2]={4,5};

  swap1(a[0],a[1]);

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

  swap2(a,b);

  swap3(&b[0],&b[1]);

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

  return 0;

}

1 2@5 1

解析: 因为文字描述不如视频讲解清楚,详细见视频讲解

8

程序运行时,输出结果是____________

#include <stdio.h>

void dream(int n)

{

  if(n==1)

  {

    printf("w");

    return;

  }

  if(n>1) 

  {

     printf("e");

     dream(n-1);

     printf("p");

   }

}

 

int main()

{

  dream(3);

  return 0;

}

eewpp

解析: 因为文字描述不如视频讲解清楚,详细见视频讲解

8

1(完善程序)

【要求】

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

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

【程序功能】

   验证一个大于等于6的偶数可分解为两个素数之和。函数guess的功能是将[mn]内每个偶数i分解成两个素数kj的和(得到验证即可,如果有多个答案,只取一个),将ijk依次写到a指向的二维数组一行的三个元素中,函数返回实际写入二维数组中数据的行数。

【测试数据与运行结果】

  输出:

  6=3+3

  8=3+5

 10=3+7

 12=5+7

14=3+11

16=3+13

18=5+13

20=3+17

 

【待完善的源程序】

#include <stdio.h>

#include <conio.h>

#include <math.h>

int guess(int a[][3], int m,int n);

int prime(int m);

int main()

{

  int a[100][3],m,i;

  m=guess(a,6,20);

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

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

  getch();

  return 0;

}

 

int guess(int a[][3], int m, int n)

{

  int i,k,j,count=0;

  i=(m%2==0)?m:m+1;

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

  {

    for(k=3;k<=i/2;k+=2)

      if( ______(1)______  )

      {

         j= ______ (2) ______  ;

         if(prime(j))

         {

            a[count][0]=i;

            a[count][1]=k;

            a[count][2]=j;

            count++;

            break;

         }

      }

  }

  return  ______ (3) ______  ;

}

int prime(int m)

{

  int g,h; h=sqrt(m);

  for(______ (4) ______ ;g<=h;g++)

    if(m%g==0)

       return 0;

  return 1;

}

 

prime(k)@i-k@count@g=2

解析:

(1) prime(k)

(2) i-k

(3) count

(4) g=2

 

因为文字描述不如视频讲解清楚,详细见视频讲解

8

2(改错题)

【要求】

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

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

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

【程序功能】

函数saveword的功能是:在s指向的由若干英文单词组成的字符串中搜索包含t指向字符串的单词,将找到的所有包含t字符串的单词复制到ch指向的二维数组中,函数返回找到单词个数。

s字符串为“被搜索字符串”,t字符串为“搜索字符串”。

函数searchsub的功能是判断s指向的字符串中是否包含t指向的字符串,若包含则函数返回1,否则函数返回0

【测试数据与运行结果】

被搜索字符串:"Life is an onion and one cries while peeling it."

搜索字符串:"on"

输出:

 ch[0]:onion

 ch[1]:one

 k=2

【含有错误的源程序】

#include <stdio.h>

#include <string.h>

#include <ctype.h>

#include <conio.h>

int searchsub(char s[], char t[])

{

  int i,j,k;

  for(i=0;s[i]!='\0';i++)

  {

    j=0,k=i;

    while(t[j]!='\0'&&t[j]==s[k]&&s[k])

    {j++; k++;}

    if(t[j]!='\0')

       return 1;

  }

  return 0;

}

int saveword(char s[],char t[],char ch[][20])

{

  int i=0,j,k=0;

  char str[20];

  while(s[i])

  {

    while(!isalpha(s[i]))

      if(s[i]!='\0') i++;

      else  break;

    for(j=0;isalpha(s[i]);j++;i++)

      str[j]=s[i];

    str[j]='\0';

    if(searchsub(str,t))

      strcpy(str,ch[k++]);

  }

  return k;

}

 

int main()

{

  char s[80]="Life is an onion and one cries while peeling it.";

  char t[20]="on", ch[40][20];

  int i,k;

  k=saveword(s,t);

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

    printf("ch[%d]:%s\n",i,ch[i]);

 

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

  getch();

  return 0;

}

 

(1) 13if(t[j]!='\0') 修改成 if(t[j]=='\0')@ for(j=0;isalpha(s[i]);j++;i++)  修改为for(j=0;isalpha(s[i]);j++,i++)@ strcpy(str,ch[k++]);  修改为 strcpy(ch[k++],str);@ sk=saveword(s,t);  修改为 sk=saveword(s,t,ch);

解析:

错误1:13if(t[j]!='\0') 修改成 if(t[j]=='\0')

错误2: for(j=0;isalpha(s[i]);j++;i++)  修改为for(j=0;isalpha(s[i]);j++,i++)

错误3: strcpy(str,ch[k++]);  修改为 strcpy(ch[k++],str);

错误4: sk=saveword(s,t);  修改为 sk=saveword(s,t,ch);

 

因为文字描述不如视频讲解清楚,详细见视频讲解

8

 

3编程题

【要求】

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

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

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

【程序功能】

  给定一个存放于一维数组中的整数序列,统计序列中每个整数被该序列中多少个其他较大的整数字面包含。所谓一个大整数字面包含一个小整数,是指小整数从字面上是大整数的一部分。两个相等的整数不算字面包含。

例如,在整数序列{2131535315,121,31,1,2115,2}中,211212115字面包含,因此21被该序列中的其他整数数字包含2次。

【编程要求】

1、  编写函数void fcount(int data[],int ct,int x[])。函数功能是统计data指向的包含ct个整数的一维数组中每个整数被其他整数字面包含的次数,统计结果依次存放于x指向的一维数组中。

2、  编写main函数,函数功能是声明一维数组resa并用测试数据初始化a数组,用ares作为实参调用fcount函数,将统计结果输出到屏幕及文件myf2.out中,最后将考生本人准考证号输出到文件myf2.out

【测试数据与运行结果】

 测试数据:21,3,15,35,315,121,31,1,2115,2

      输出:2  3  2   0  0   0  1  6   0   3

 

 

参考答案:

 

#include <stdio.h>

void fcount(int data[], int ct, int x[])

{

  int i,j;

  int k1,k2,temp;

 

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

  {

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

        if(data[i]!=data[j])

        {              

           k2=data[j];

                 while(k2)

                 { k1=data[i];

                   temp=k2;

             while(k1)

                      {

              if(k1%10!=temp%10)

                              break;

                k1=k1/10;

                            temp=temp/10;

                      }

                      k2=k2/10;

                      if(k1==0)

             {x[i]++; break;

                      }

                 }

          

        }

  }

}

 

int main()

{

  int res[10]={21,3,15,35,315,121,31,1,2115,2};

  int a[10]={0};

  int i;

  fcount(res,10,a);

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

         printf("%d ",a[i]);

  return 0;

}