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);
}
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章