2018年3月江苏省计算机二级C语言真题第1套

  1. 高级语言编写的程序可以由编译程序将其翻译转换为可执行程序,这些程序在Windows环境下查看其类型时显示为“MS-DOS应用程序”“应用程序”或“应用程序扩展”,显示为” 应用程序”的文件,其文件扩展名通常是__________。
    A. COM
    B. APP
    C. EXE
    D. DLL
    C
    解析:APP是iOS手机可执行程序的简称, EXE显示为应用程序,DLL是应用程序扩展。

  2. 下列关于IP地址(IPv4)和路由器的叙述中,错误的是______
    A.IP地址中包含有网络号和主机号两个内容,由IP地址与子网掩码进行逻辑加运算可得到网络号
    B. IP地址(IPv4)长度仅为32位,大约只有40亿个地址可用,目前已分配完毕
    C. 路由器除了在两个不同网络之间传输IP数据报,通常还具有流量控制、性能管理等功能
    D. 目前家用无线路由器是一种将以太网交换机,无线AP和路由器等集成在一起的产品
    A
    解析: IP地址中包含有网络号和主机号两个内容,由IP地址与子网掩码进行逻辑与运算可得到网络号 。

3.在有些HTML文档中,嵌入了动态修改网页内容或控制文档展现的脚本程序,许多脚本程序是采用_________语言编写的。
A. VBA
B. VBScript
C. Objective-C
D. Python
B
解析:VBA是嵌入到office中的编程语言,VBScript是嵌入到HTML中的脚本语言,Objective-C主要是应用于苹果操作系统中的编程语言,Python是一门编程语言。

4.在现代通信系统中,为了能有效地提高数据链路的利用率、降低通信成本,一般使用多路复用技术让多路信号同时共用一条传输线进行传输,在使用光纤传输信息时,主要是采用____________技术。
A. TDM
B. WDM
C. FDM
D. CDM
B
解析: 时分多路复用(TDM)是各终端设备按不同时间来轮流使用同一线路来传输数据,是计算机网络传输使用的主要方式,频分多路复用(FDM)是将不同信源发出的信号调制在不同频率的载波上(例如收音机与电视机),波分多路复用(WDM)是在一根光纤传输不同波长的光波。

5.下列图像文件格式中,_________格式在高档的数码相机中使用较多,它不但包含未经处理的像素数据,而且还记录了拍摄时相机的一些设置信息。
A. BMP
B. RAW
C. JPEG
D. TIF
B
解析: RAW文件格式在数码相机中使用较多,其含义是未经加工的图像,包含了感光器件捕获到的未经处理的像素数据,还包含了拍摄照片时的很多参数 。

6.下列关于常用操作系统(产品)的叙述中,错误的是_________ 。
A. UNIX操作系统是广泛的操作系统之一,目前已经研制和开发了若干不同分支的UNIX产品
B. Linux内核是最有名的自由软件之一,目前全球已有上百个Linux操作系统发行版
C. 目前Linux已经被移植到多种硬件平台,但该类操作系统还不能用于大型和超级计算机
D. 目前PC不仅可以使用Windows操作系统,也可以使用Linux操作系统
C
解析: 目前Linux已经被移植到多种硬件平台,该类操作系统可以应用于大型和超级计算机 。

7.通俗地说,算法就是解决问题的方法和步骤,下列关于算法表示及算法分析的叙述中,错误的是______
A. 与采用文字描述算法相比,采用流程图表示算法则更简明、更容易理解
B. 在设计算法时人们常用伪代码表示算法,这比采用具体的程序设计语言表示更方便,效率更高
C. 从算法复杂度来看,若算法的复杂度为常数阶则效率更高,若为指数阶则效率极低
D. 一个问题的求解可以有多种不同的算法,通过算法优化,其时间和空间复杂度相差通常不大
D
解析: 一个问题的求解可以有多种不同的算法, 其时间和空间复杂度通常相差很大 。

8.通俗地说,算法就是解决问题的方法和步骤,下列相关叙述中,错误的是______
A. 算法的一个显著特征是,其解决的是一类问题而不是一个特点的问题
B. 所谓设计算法,就是寻找解决问题的方法与规则,并将其表示成算法
C. 算法设计一般采用由细到粗,由具体到抽象的逐步求精的方法
D. 枚举性、迭代法、递推法、回溯法等都是用于算法设计的基本方法
C
解析: 算法设计一般采用由粗到细,由抽象到具体的逐步求精的方法 。

9.计算机绘制的图像也称为矢量图形,用于绘制矢量图形的软件称为矢量绘图软件。下列软件中,属于矢量绘图软件的是______。
A. ACDSee
B. CorelDraw
C. Photoshop
D. Lightroom
B
解析:流行的矢量绘图软件包括AutoCAD、CorelDraw,Illstrator, FreeHand,Visio等。

10.字符集及其编码是计算机中表示、存储、处理和交换文本信息的基础,但由于历史原因,目前不同系统或应用中使用的字符编码方案并不统一。目前在Windows中文版操作系统中,通常使用_______来表示和处理文本,在数据文件需要保存到外存时会转换成操作系统所默认的本地编码(方案)。
A. ASCII
B. UTF-8
C. UTF-16
D. GB18030
C
解析: UCS有两种标准UTF-8和UTF-16,UTF-8采用ASCII码用1个字节编码,拉丁字母,标点符号等采用2字节编码,汉字采用3个字节编码,其他极少字符采用4字节编码,UCS-16是指ASCII和汉字都采用2字节编码,其他不常用字符采用4字节编码,在Windows中文版上现在使用UTF-16,也是Java,.NET软件开发环境等默认的编码标准。
5

以下程序段中第_______行有语法错。

int x;                          //第1行
int f(int y)                    //第2行
{  return w; }                  //第3行
int w=1;                        //第4行
int main()                      //第5行
{  int z=2; f(z) ; return 0; }  //第6行

A. 2
B. 3
C. 4
D. 6
B
解析:函数f中有一个w变量,因为w值的声明在f函数的下方,根据C规定,变量的作用域是从声明处开始的,所以会报错。
8
以下程序的输出结果是______。

#include
#define H(x)  x/(x-1)
int main()
 {
     int a=1, b=2;
     printf ("%d\n", H (a-b)) ;
     return 0;
}

A. 2
B. 0.5
C. 0
D. -4
A
解析:H(a-b)调用#define H(x)后换算为1-2/(1-2-1),根据C语言运算顺序,首先执行2/(1-2-1)结果是-1,然后用1减去-1,结果即2 。
3
已有如下数据类型定义和变量声明:

 struct person
    {
    int num;
    char name[20],sex;
    struct {  int year,month,day;  }birthday;
       }a={20,"Li ning",'M',{1998,1,1}},*p=&a;

以下语句中正确的是____
A. printf("%s",a->name);
B. printf("%d",p->birthday.year);
C. printf("%s",p.name);
D. printf("%d",p-> birthday->year);
B
解析: 运算符->要求左边必须是内存编号,运算符.要求左边必须是变量;A选项中的a是普通变量,不是其所在的内存编号,所以a->name错误,A选项修改为a.name就对了;B选项中,因为p是指针变量,所以p->birthday返回普通变量,然后通过.year获取值,所以正确;C选项中.的优先级高于
,所以实际是*(p.name),因为p是指针变量,所以不能用.,修改为(*p).name就对了;D选项错误的原因参考B选项。
11

已有声明“int k,a,b; unsigned long y=5;double x=10;”,以下表达式中语法正确的是______。
A. x%5
B. x=y
C. k=(a+1)++
D. a+=(a=3)
(b=2)
D
解析:A错,运算符%要求左右两边都是整数,不能是double或float类型;B错,表达式y因为处于表达式的第1个位置,所以要求y必须是一个指针变量,不能是普通常量 ,修改为x*=y,表示x=x*y;就可以了;C错,++必须放到变量的前面或后面,不能放到表达式或常量的前面或后面; D选项执行后,a的值是9。
3
以下跳转语句中可以选择不唯一的跳转目的地的语句是______。
A. continue
B. break
C. goto
D. return
C
解析:continue表示直接跳转到循环开始处;break表示跳出所在的循环或switch过程;return表示返回函数调用处;通过 goto 可以调转到指定的位置。
6
6(填空题 <2空> ) :
以下程序运行时, 输出结果中第一行是____________ ,第二行是____________ 。

#include
int f(int a[],int m,int b[],int n,int c[])
{
    int i,j,k=0,t;
    for(i=0;i<m;i++)</m;i++)
    {
        for(t=0,j=0;j<n;j++)</n;j++)
            if( a[i]==b[j] )
            {   t=1;  break;  }
        if(t)
            c[k++]=a[i];
    }
    return k;
}
int main()
{
    int x[]={7,2,3,6,1},y[]={5,10,7,9,8,6},z[10],w,j;
    w=f(x,5,y,6,z);
    for(j=0;j
        printf("%d\n",z[j]);
    return 0;
}

7(填空题 <3空> ) :
以下程序运行时,输出结果中第一行是____________ ,第二行是____________ ,第三行是____________ 。

#include
int main()
{
    int a,b,j,k,w,s[4];
    for(a=10;a<=16;a++)                  
    {
        b=2*a;
        s[0]=a/10;  s[1]=a;
        s[2]=b/10;  s[3]=b;
        w=1;              
        for(j=0;j<3;j++)
            for(k=0;k<4;k++)
                if(s[k]==0||j!=k && s[j]==s[k] )w=0;  
        if(w)
            printf("%d\n",a);
    }
    return 0;
}

13@14@16

8 (填空题 <2空> ) :
以下程序运行时, 输出结果中第一行是____________ ,第二行是____________ 。

#include <stdio.h>
#include <string.h>
int main()
{   
    char *p1="student",p2[]="student";
    if(p1==p2) puts("yes");
    else puts("no");
    if(!strcmp(p1,p2)) puts("yes");
    else puts("no");
    return 0;
}

no@yes

9 (填空题 <3空> ) :
以下程序运行时,输出结果中第一行是____________ ,第二行是____________ ,第三行是____________ 。

提示:函数int toupper(int ch)功能是将小写字母转换为对应大写字母。

#include
#include
long fun(char *s)
{
    long n, sign, base=10,t;
    for(; *s==' ';s++);
    sign=(*s=='-')?-1:1;
    if(*s=='+'||*s=='-') s++;
    if(*s=='0'&& s++)
    {
        if(*s=='x'||*s=='X')
        {    base=16; s++; }
        else
            base=8;
    }
    for(n=0,t=1;t &&(isdigit(*s)||isalpha(*s));s++)
        switch(base)
        {
            case 10: if(isdigit(*s))
                        n=n*base+*s-'0';
                    else
                        t=0;
                    break;
            case 8:  if(*s >='0'&& *s <='7')
      n=n*base+*s-'0';
                    else
                        t=0;
                    break;
            case 16:  if(isdigit(*s))
                        n=n*base+*s-'0';
                    else if(toupper(*s)>='A' &&toupper(*s)<='F')
                            n=n*base+toupper(*s)-'A'+10;
                    else
                        t=0;
        }
    return sign*n;
}
int main()
{
    char c1[]="0xc",c2[]="015",c3[]="-17";
    printf("%ld\n%ld\n%ld",fun(c1),fun(c2),fun(c3));
    return 0;
}
 

12@13@-17

10

1(完善程序):
【要求】
1.打开T盘中文件myf0.c,按以下程序功能完善文件中的程序。
2.修改后的源程序仍保存在T盘myf0.c文件中,请勿改变myf0.c的文件名。
【程序功能】
已知main函数内结构数组p中前3个元素值已按成员index升序排列。以下程序先在p数组前3个元素中插入结构变量s1中保存的数据,再输出p数组前4个元素的值。要求插入s1数据后p数组前4个元素值仍按成员index升序排列。
【测试数据与运行结果】
测试数据:p数组中原始数据为 {5,“wang”,},{10,“li”,},{15,“zhao”}
s1变量中数据为 {3,“zhang”}
输出:
3 zhang
5 wang
10 li
15 zhao
【待完善的源程序】

#include
#include
typedef struct s
{
    int index;
    char name[10];
}ST;
int insert(ST *p, ST s, int n)
{
    int k,j;
    if(s.index>p[n-1].index)
    {
        p[n]=s;
        return n+1;
    }
    for(k=0;k<n;k++)</n;k++)
        if(1>s.index )           
           break;
    for(j=n;2;j--)                
        p[j]=p[j-1];3=s;                    
    return n+1;             
}
int main()
{
    int n=3;
    ST p[8]={{5,"wang",},{10,"li",},{15,"zhao"}},s1={3,"zhang"},*q;
    n = insert(4);     
    for(q=p;q<p+n;q++)</p+n;q++)
        printf("%d %s\n",q->index,q->name);
    getch();
    return 0;
}

p[k].index@j>k@p[k]@p,s1,n

(1)p[k].index
(2)j>k
(3)p[k]
(4)p,s1,n

2(改错题):
要求】
1.打开T盘中文件myf1.c,按以下程序功能改正文件中程序的错误。
2.可以修改语句中的一部分内容,调整语句次序,增加变量声明或预处理命令,但不能增加其他语句,也不能删去整条语句。
3.修改后的源程序仍保存在T盘myf1.c文件中,请勿改变myf1.c的文件名。
【程序功能】
以下程序中函数maxequalseq的功能是在a指向数组的前n个元素中存储的一个整数序列中找出最长等值子序列。将构成最长等值子序列的数据项值保存到num指向的变量中,函数返回最长等值子序列的长度。
【测试数据与运行结果】
测试数据:2,2,2,5,5,5,5,5,1,1,8,8,8,8,8,8,8,7,7,7
输出:number=8, length=7
【含有错误的源程序】

#include<stdio.h>
#include<conio.h>
void maxequalseq(int a[],int n,int *num)
{
    int i,k=0,p[50][2],len;
    p[k][0]=a[0];
    p[k][1]=1;
    for(i=1;i<n;i++)
        if(a[i]==a[i-1])
            p[k][1]++;
        else
        {
            p[k++][0]=a[i];  
            p[k][1]=1;
        }
    *num=p[0][0];
    len=p[0][1];
    for(i=1;i<=k;i++)
        if(p[i][1]<len)
        {
            *num=p[i][0];
            len=p[i][1];
        }
    return len;
}
int main()
{
    int x[20]={2,2,2,5,5,5,5,5,1,1,8,8,8,8,8,8,8,7,7,7};
    int length,number;
    length=maxequalseq(x[20],20,&number);
    printf("number=%d,length=%d",number,length);
    getch();
    return 0;
}
 

maxequalseq(x[20],20,&number)修改为maxequalseq(x,20,&number)@ void maxequalseq修改为int maxequalseq@ p[k++][0]=a[i]修改为p[++k][0]=a[i]@ p[i][1]<len修改为p[i][1]>len

3(编程题):
【要求】
1.打开T盘中文件myf2.c,在其中输入所编写的程序。
2.数据文件的打开、使用、关闭均用C语言标准库中缓冲文件系统的文件操作函数实现。
3.请勿改变myf2.c的文件名。
【程序功能】
矩阵变换并统计变换区域元素中素数个数。
【编程要求】
1.编写int encode(int a[4][4])函数。函数功能是对a指向的二维数组中存储的4╳4矩阵中包含主对角线元素在内的左下三角区域内每个元素的值做如下判断和变换:若该数值是素数则用大于该数值的最小素数替换,否则保持原数值不变。函数返回包含主对角线元素在内的左下三角区域内的元素中素数的个数。
2.编写main函数。函数功能是声明一个二维数组并用测试数据初始化。用二维数组作实参调用encode函数对该数组中的矩阵作变换。将变换后的二维数组内存储的矩阵全部元素值及包含主对角线元素在内的矩阵左下三角区域内元素中素数的个数输出到屏幕及文件myf2.out中。最后将考生本人准考证号输出到文件myf2.out中。
【测试数据与运行结果】
测试数据:
13 4 6 3
8 5 9 10
12 17 11 20
13 6 23 30
输出:
17 4 6 3
8 7 9 10
12 19 13 20
17 6 29 30
count=6

#include <stdio.h>
int prime(int k)
{
  int i;
  for(i=2;i<=k/2;i++)
         if(k%i==0)
                return 0;
  return 1;
}
 
int encode(int a[4][4])
{
   int i,j,n,k=0;
   for(i=0;i<4;i++)
         for(j=0;j<=i;j++)
         {
         if(prime(a[i][j]))
               {
            for(n=a[i][j]+1; ; n++)
                            if(prime(n))
                            {
                                   k++;
                   a[i][j]=n;
                               break;
                            }
               }
         }
       return k;
}
 
int main()
{
   FILE *fp;
   int a[4][4]= {{13,4,6,3},{8,5,9,10},{12,17,11,20},{13,6,23,30}};
   int k,i,j;
  if((fp=fopen("myf2.out","w+"))==NULL)
  {
     printf("Error");
  }
  k=encode(a);
  for(i=0;i<4;i++)
  {
         for(j=0;j<3;j++)
         {
                printf("%5d",a[i][j]);
          fprintf(fp,"%5d",a[i][j]);
         }
         printf("%5d\n",a[i][j]);
         fprintf(fp,"%5d",a[i][j]);
 
  }
  printf("Count=%d\n",k);
  fprintf(fp,"Count=%d\n",k);
  fprintf(fp,"My exam is 123456");
  fclose(fp);
}
 
  • 18
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值