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

 

1.         下列PC使用的CPU系列产品中,不属于Intel公司的是_______.

A. Celeron系列

B. Pentium系列

C. Core系列

D. FX系列

D

解析:Intel公司推出的CPU,包括入门级的Celeron系列,高于CeleronPentium系列,性能比较高的Core系列。

2

2.         扫描仪是目前常用的图像输入设备。下列相关叙述中,错误的是______

A. 手持式扫描只适用于—行—行地扫描文字稿

B. 目前平板式扫描仪在家庭和办公自动化领域得到了广泛应用

C. 滚筒式扫描仪的技术性能较高,大多数应用于专业印刷排版领域

D. 扫描仪均可以选择黑白、灰度或彩色工作模式,但不可以设置灰度级数或色彩的位数

D

解析: 扫描仪可以选择黑白、灰度或彩色工作模式,也可以设置灰度级数或色彩的位数

2

3.         在音频信号的数字化过程中,人的说话声音频带较窄(仅为3003400Hz),通常语音的取样频率为8kHz、量化位数为8位,这时未压缩的码率大约为____

A. 8kb/s

B. 64kb/s

C. 300kb/s

D. 1411kb/s

B

解析:根据公式 波形声音的码率=取样频率*量化位数*声道数

5

4.         下列有关智能手机常用操作系统的叙述中,错误的是_____.

A. iPone手机使用由苹果公司开发的iOS操作系统,其系统内核是—种“类Unix"系统

B. Android是—个以Linux内核为基础的开放源代码的操作系统,早先由Android公司开发

C. 我国内地销售的Android智能手机,—般都使用Android所附带的用户界面和应用程序(GMS)

D. iOSAndroid属于两种不同的操作系统,其平台上的应用程序也不相同,不能相互通用

C

解析: 我国内地销售的Android智能手机,—般不使用Android所附带的用户界面和应用程序(GMS) 

2

5.         字符集及其编码是计算机中表示、存储、处理和交换文本信息的基础。下列有关汉字编码标准的叙述中,错误的是______

A. 我国1981年颁布的GB2312标准仅包含6000多个汉字和600多个非汉字图形字符

B. 我国1995年发布的GBK,标准与GB2312标准兼容,且将汉字扩充到20000多个

C. 我国在2000年和2005年两次发布GB18030编码标准,它与原先的国家标准GBK兼容

D. 无论是ISO组织制定的UCS、还是一些公司联合制定的Unicode,其汉字部分均与GB 18030兼容

D

解析: GB18030是我国颁布的,也是当前包含的汉字是最多的, UCS是国际标准化组织发布的,与其等同的是由微软等公司共同制定的工业标准Unicode, GB18030Unicode两者的汉字编码有很大区别

5

6.         程序设计语言处理系统是一种重要的系统软件。下列相关的叙述中,错误的是____

A. 机器语言也需要语言处理系统,其作用是将程序代码转换成二进制指令代码

B. 不同的程序设计语言需要有不同的语言处理系统,它们通常是不通用的

C. 解释程序通常适合于交互方式工作的、或在调试状态下运行的程序

D. 编译程序的作用是将高级语言翻译为机器语言(或汇编语言)

A

解析: 机器语言就是二进制指令代码, ,所以不需要语言处理系统 

3

7.         下列关于常见辅助存储器的叙述中,错误的是_______

A. 通常—块硬盘由1张或几张盘片组成,其数据需要用柱面号、扇区号和磁头号等参数来定位

B. U盘又称为优盘、闪存盘,其写入速度—般慢于读出速度,且写入次数有—定的限制

C. 目前有些PC使用混合硬盘(SSD+HDD)的做法,以提高系统的整体性能

D. 光盘分为只读盘片、—次可写盘片和可擦写盘片,CD-RDVD-RBD-R均为只读盘片

D

解析: CD-R, DVD-RBD-R是只写入一次光盘片,CD-ROM,DVD-ROMBD-ROM是只读型光盘片。

2

8.         下列有关智能手机及其功能的叙述中,错误的是_____

A. 从第2代移动通信开始,所有的手机均可以上互联网,因此均被称为智能手机

B. 所谓”双卡双待”手机,是指手机同时可以安装两张SIM卡,且两张卡均可处于待机状态

C. 全网通手机可以接入国内三大运营商的所有4G3G2G网络,支持多种不同的网络制式

D. 国内三大运营商采用的4G技术并不相同,移动采用TD-LTE,电信和联通采用LTE-FDD

A

解析: 第一代通信技术采用模拟技术,第二代通信技术采用数字技术,第三代通信技术3G,4代通信技术称为4G, 按照手机的功能划分为笨手机、功能手机、智能手机,其中智能手机是指可以像PC个人电脑一样安装第3方软件,不断扩充其功能,而功能手机一般不能随意安装和卸载软件,第二代手机属于功能手机,不属于智能机。

2

9.         下列有关PC主板及其中的功能部件的叙述中,错误的是____

A. 目前许多扩充卡的功能可以部分或全部集成在主板上,因而从外观上看主板的结构越来越简化

B. 主板上的BIOS芯片是一种闪速存储器,PC启动时最先运行BIOS中的软件

C. 主板上的CMOS存储器是—种非易失性存储器,其中存储的配置信息永不丢失

D. 主板上的芯片组早期是由两片集成电路构成的,目前大多为单芯片的芯片组

C

解析: CMOS属于易失性存储器,需要由主板上的电池供电 

2

10.     通俗地说,算法就是解决问题的方法和步骤。在设计算法时有一些基本要求,下列相关叙述中错误的是_____

A. 每个算法至少有—个输入,输出有且仅有—个

B. 算法中的每—步操作必须有确切的含义,不能有二义性

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

D. 算法中有待实现的操作都应该是计算机可执行的

A

解析: 算法的基本要素:确定性、有穷性、能行性、输出,算法可以没有输入,但必须有输出。

3

1(单选题):

若有预处理命令“#include<string. h>"和声明“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<stdio.h>

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<stdio.h>

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<stdio.h>

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<stdio.h>

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<stdio.h>

#include<conio.h>

#include<math.h>

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 <stdio.h>

#include<conio.h>

#define N 10

void crl(int *a)

{

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

    for(i=1;i<N;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<N;i++)

        if(a[max]<a[i]) max=i;

    temp=a[max];

    j=max;

    while(j<N-1)

    {

        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<N;i++)

       printf("%5d",*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("%5d",*a+i);   修改为  printf("%5d",*(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("%5d",*a+i);   修改为  printf("%5d",*(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 <stdio.h>

 

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--)

       {         

         *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);

}