2014年計算機二級C語言考試上機沖刺試題

字號:

為大家收集整理了《2014年計算機二級C語言考試上機沖刺試題》供大家參考,希望對大家有所幫助?。?!
    一、選擇題(每小題1分,共40小題,共40分)
    1.算法的空間復雜度是指( )。
    A.算法程序的長度
    B.算法程序中=的指令條數(shù)
    C.算法程序所占的存儲空間
    D.算法執(zhí)行過程中所需要的存儲空間
    2.下列敘述中正確的是( )。
    A.一個邏輯數(shù)據(jù)結構只能有一種存儲結構
    B.邏輯結構屬于線性結構,存儲結構屬于非線性結構
    C.一個邏輯數(shù)據(jù)結構可以有多種存儲結構,且各種存儲結構不影響數(shù)據(jù)處理的效率
    D.一個邏輯數(shù)據(jù)結構可以有多種存儲結構,且各種存儲結構影響數(shù)據(jù)處理的效率
    3.簡單的交換排序方法是( )。
    A.快速排序
    B.選擇排序
    C.堆排序
    D.冒泡排序
    4.關于結構化程序設計原則和方法的描述錯誤的是( )。
    A.選用的結構只準許有一個入口和一個出口
    B.復雜結構應該用嵌套的基本控制結構進行組合嵌套來實現(xiàn)
    C.不允許使用GOT0語句
    D.語言中若沒有控制結構,應該采用前后一致的方法來模擬
    5.相對于數(shù)據(jù)庫系統(tǒng),文件系統(tǒng)的主要缺陷有數(shù)據(jù)關聯(lián)差、數(shù)據(jù)不一致性和( )。
    A.可重用性差
    B.安全性差
    C.非持久性
    D.冗余性
    6.面向?qū)ο蟮脑O計方法與傳統(tǒng)的面向過程的方法有本質(zhì)不同,它的基本原理是( )。
    A.模擬現(xiàn)實世界中不同事物之間的聯(lián)系
    B.強調(diào)模擬現(xiàn)實世界中的算法而不強調(diào)概念
    C.使用現(xiàn)實世界的概念抽象地思考問題從而自然地解決問題
    D.不強調(diào)模擬現(xiàn)實世界中的算法而強調(diào)概念
    7.對如下二叉樹進行后序遍歷的結果為( )。
    A.ABCDEF
    B.DBEAFC
    C.ABDECF
    D.DEBFCA
    8.軟件設計包括軟件的結構、數(shù)據(jù)接口和過程設計,其中軟件的過程設計是指( )。
    A.模塊間的關系
    B.系統(tǒng)結構部件轉換成軟件的過程描述
    C.軟件層次結構
    D.軟件開發(fā)過程
    9.兩個或兩個以上模塊之間關聯(lián)的緊密程度稱為( )。
    A.耦合度
    B.內(nèi)聚度
    C.復雜度
    D.數(shù)據(jù)傳輸特性
    10.下列描述錯誤的是( )。
    A.繼承分為多重繼承和單繼承
    B.對象之間的通信靠傳遞消息來實現(xiàn)
    C.在外面看不到對象的內(nèi)部特征是基于對象的“模塊獨立性好”這個特征
    D.類是具有共同屬性、共同方法的對象的集合
    11.數(shù)據(jù)庫DB、數(shù)據(jù)庫系統(tǒng)DBS、數(shù)據(jù)庫管理系統(tǒng)DBMS之間的關系是( )。
    A.DB包含DBS和DBMS
    B.DBMS包含DB和DBS
    C.DBS包含DB和DBMS
    D.沒有任何關系
    12.下列合法的聲明語句是( )。
    A.int_abc=50;
    B.double int=3+5e2.5;
    C.long do=1L:
    D.float 3_asd=3e-3;
    13.設x、Y和z是int型變量,且x=4,y=6,z=8,則下列表達式中值為0的是( )。
    A.x&&Y
    B.x<=Y
    C.x‖y+z&&y-z
    D.!((x  14.若ch為char型變量,k為int型變量(已知字符a的ASCIl碼是97),則執(zhí)行下列語句后輸出的結果為( )。
    ch=’b’;
    k=10:
    printf("%X,%o,",ch,ch,k);
    printf("k=%%d\n",k);
    A.因變量類型與格式描述符的類型不匹配,輸出無定值
    B.輸出項與格式描述符個數(shù)不符,輸出為0值或不定值
    C.62,142,k一%d
    D.62,142,k一%l0
    15.有下列程序: 、
    fun(int X,int y){return(x+y);)
    main()
    { int a=1,b=2,c=3,sum;
    sum=fun((a++,b++,a+b),c++);
    printf("%d\n",sum);
    }
    執(zhí)行后的輸出結果是( )。
    A.6
    B.7
    C.8
    D.9
    16.假定x和Y為double型,則表達式x=2,y—x+3/2的值是( )。
    A.3.500000
    B.3
    C.2.000000
    D.3.000000
    17.有如下程序:
    main()
    {int x=1,a=0,b=0;
    switch(x)
    {
    case 0:b++;
    case l:a++;
    case 2:a++;b++;
    )
    printf("a=%d,b=%d\n",a,b);
    )
    該程序的輸出結果是( )。
    A.a=2,b=1
    B.a=1,b=1
    C.a=1,b=0
    D.a=2,b=2
    18.下列程序的輸出結果是( )。
    main()
    {int i=1,j=2,k=3;
    if(i++= =1&&(++j= =3= =‖k++= =3))
    printf("%d%d%d\n",i,J,k);
    )
    A.1 2 3
    B.2 3 4
    C.2 2 3
    D.2 3 3
    19.下列程序的輸出結果是( )。
    #include
    main()
    { int a=0,i;
    for(i=1;i<5;i++)
    { switch(i)
    { case 0:
    case 3:a+=1;
    case l:
    case 2:a+=2;
    default:a+=3;
    )
    printf("%d",i);
    )
    A.19 B.1 C.6 D.8
    20.有以下程序:
    main()
    {int X,i;
    for(i=1;i<=50;i++)
    {x=i;
    if(X%2=O)
    if(x%3=O)
    if(X%7=0) .
    printf("%d,i)";
    )
    )
    輸出結果是( )。
    A.28
    B.27
    C.42
    D.41
    21.以下程序的輸出結果是( )。
    main()
    {int a[3][3]={{1,2},{3,4),{5,6}},i,j,s=0;
    for(i=1;i<3;i++)
    for(j=0;j<=i;j++)s+=a[i][j];
    printf("%d\n",s);
    }
    A.18
    B.19
    C.20
    D.21
    22.有下列程序:
    main()
    { int k=5;
    while(--k) printf("%d",k=1);
    printf("/n");
    )
    執(zhí)行后的輸出結果是( )。
    A.1
    B.2
    C.4
    D.死循環(huán)
    23.若有定義:“int a[2][3];”,則對a數(shù)組的第i行第J列元素的正確引用為( )。
    A.*(*(a+i)+j)
    B.(a+i)[j]
    C.*(a+i+j)
    D.*(a+i)+j
    24.下列能正確進行字符串賦值的是( )。
    A.char s[5]={"ABCDE"};
    B.char s[5]={’A’,’B’,’C’,’D’,’E’}; 、
    C.char*S;S="ABCDE";
    D.char*s;printf("%《",s);
    25.現(xiàn)有以下結構體說明和變量定義,如圖所示,指針P、q、r分別指定一個鏈表中連續(xù)的3個結點。
    struct node
    {har data;
    struct node*next;)*P,*q,*r;
    現(xiàn)要將q和r所指結點交換前后位置,同時要保持鏈表的結構,下列不能完成此操作的語句是( )。
    A.q-:>next=r->next;p--:>next=r;rm:>next=q;
    B.q-:>next=r;q->next=r->next;r->next=q;
    C.q-:>next=r->next;r->next=q;p->next=r;
    D.q-:>next=q;p->next=r;q->next=r->next;
    26.有下列程序:
    main()
    {int i,j,x=0;
    for(i=0,i<2;i++)
    {x++;
    for(j=0;j<=3;j++)
    {if(j%2)continue;
    x++:
    )
    x++:
    }
    printf("x=%d\n"x);
    }
    程序執(zhí)行后的輸出結果是( )。
    A.x=4
    B.x=8
    C.x=6
    D.x=12
    27.有下列程序:
    int funl(double a){return a*=a;} 、
    int fun2(double x,double y)
    {double a=0,b=0;
    a=funl(x);b=funl(y);return(int)(a+b);
    )
    main()
    {double w;w=fun2(1.1,2.0),……}
    程序執(zhí)行后變量w中的值是( )。 、
    A.5.21 B.5 C.5.0 D.0.0
    28.有下列程序:
    main()
    {int i,s=0,t[]={1,2,3,4,5,6,7,8,9};
    for(i=0;i<9;i+=2)s+=*(t+i);
    printf("%d\n",s);
    }
    程序執(zhí)行后的輸出結果是( )。
    A.45
    B.20
    C.25
    D.36
    29.有下列程序:
    int fun(int n)
    {if(n= =1))return l;
    else
    return(n+fun(n-1)):
    }
    main()
    { int x;
    seanf("%d",&x);x=fun(x);printf("%d\n",x);
    }
    執(zhí)行程序時,給變量x輸入l0,程序的輸出結果是( )。
    A.55
    B.54
    C.65
    D.45
    30.有下列程序:
    int fun(int x[],int n)
    { static int sum=0,i;
    for(i=0;i   return sum;
    }
    main()
    {int a[3]={1,2,3,4,5),b[3]={6,7,8,9),s=0;
    s=fun(a,5)+fun(b,4);printf("%d\n",s);
    程序執(zhí)行后的輸出結果是( )。 、
    A.45
    B.50
    C.60
    D.55
    31.有下列程序:
    main()
    f char*P[]={"3697","2584");
    int i,j;long num=0;
    for(i=0;i<2;i++)
    {j=0;
    while(p[i][j]!=’\0’)
    {if((p[i][j]-t\0’)%2)num=10*num+p[j][j]-’0’;
    j+=2;
    )
    )
    printf("%d\n",num);
    )
    程序執(zhí)行后的輸出結果是( )。
    A.35 B.37 C.39 D.3975
    32.以下程序的輸出結果是( )。
    main()
    { char st[20]="hell0\O\t\\\”;
    printf("%d%d\n",strlen(st),sizeof(st));
    }
    A.9 9
    B.5 20
    C.13 20
    D.20 20
    33.若有下的定義:"int t[3][2];",能正確表示t數(shù)組元素地址的表達式是( )。
    A.&t[3][2]
    B.t[3]
    C.t[l]
    D.t[2][2]
    34.函數(shù)fseek(pf,OL,SEEK_END)中的SEEK_END代表的起始點是( )。
    A.文件開始
    B.文件末尾
    C.文件當前位置
    D.以上都不對
    35.下述程序的輸出結果是( )。
    #include
    main()
    {int i;
    for(i=1;i<=10;i++)
    {if(i*i>=20)&&(i*i<=lOO))
    break;
    }
    printf("%d\n",i*i);
    )
    A.49
    B.36
    C.25
    D.64
    36.若有定義“int b[8],*p=b;”,則p+6表示( )。
    A.數(shù)組元素b[6]的值
    B.數(shù)組元素b[6]的地址
    C.數(shù)組元素b[7]的地址
    D.數(shù)組元素b[0]的值加上6
    37.設變量已正確定義,則以下能正確計算f=n!的程序是( )。
    A.f=0; for(i=1;i<=n;i++)f*=i;
    B.f=1;for(i=1;i  C.f=1;for(i=n;i>1;i++)f*=i;
    D.f=1;for(i=n;i>=2;i--)f*=i;
    38.下述程序執(zhí)行的輸出結果是( )。
    #include
    main()
    {char a[2][4]; ,
    strcpy(a。"are");strcpy(a[1],"you");
    a[o][3]=’&’;
    printf("%s\n",a);
    )
    A.are&you
    B.you
    C.are
    D.&
    39.設x=011050,則x=x&01252的值是( )。
    A.0000001000101000
    B.1111110100011001
    C.0000001011100010
    D.1100000000101000
    40.在“文件包含,,預處理語句的使用形式中,當#include后面的文件名用(雙引號)括時,尋找被包含文件的方式是( )。
    A.直接按系統(tǒng)設定的標準方式搜索目錄
    B.先在源程序所在的目錄搜索,如沒找到,再按系統(tǒng)設定的標準方式搜索
    C.僅僅搜索源程序所在目錄
    D.僅僅搜索當前目錄
    二、基本操作題(共18分)
    請補充函數(shù)proc(),該函數(shù)的功能是計算下面公式SN的值:
    SN=1+1/3十4/5+...+2N-1/SN-1
    例如,當N=20時,SN=29.031674。
    注意:部分源程序給出如下。
    請勿改動main()函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc()的橫線上填入所編寫的若干表達式或語句。
    試題程序:
    #include
    #include
    #include
    double proc(int n)
    {
    double s=1.0,sl=0.0;
    int k;
    for(【1】;k<=n;k++)
    {
    sl=S;
    【2】
    }
    return 【3】 ;
    )
    void main()
    {
    int k=0:
    double sum;
    system("CLS");
    printf("\nPlease input N=");
    scanf("%d",&k);
    sum=proc(k);
    printf("\nS=%If",sum);
    )
    三、程序改錯題(共24分)
    下列給定程序中,函數(shù)proc()的功能是根據(jù)整型形參n,計算如下公式的值:
    Y=1-1/(22)+1/(33)-1/(44)+…+(-1)(n+1)/(nn)
    例如,n中的值為l0,則應輸出0.817962。
    請修改程序中的錯誤,使它能得到正確結果。
    注意:不要改動main()函數(shù),不得增行或刪行,也不得更改程序的結構。
    試題程序:
    #include
    #include
    #include
    double proc(int n)
    {
    double y=1.0;
    f|****found****
    int J=1; .
    int i;
    for(i=2;i<=n;i++)
    {
    j=-l*j;//****found****
    y+=1/(i*i);
    )
    return(y);
    )
    void main()
    {
    int n=10:
    system("CLS"):
    printf("\nThe result is%lf\n",proc(n));
    )
    四、程序設計題(共18分)
    編寫一個函數(shù),從傳人的M個字符中找出最長的一個字符串,并通過形參指針max傳回該串地址(用****作為結束輸入的標志)。
    注意:部分源程序給出如下。
    請勿改動main()函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc()的花括號中填人所編寫的若干語句。
    試題程序:
    #include
    #include
    #include
    char*proc(char(*a)[81],int num)
    {
    )
    void main()
    {
    char ss[l0][81],*max;
    int n,i=0;
    printf("輸入若干個字符串:");
    gets(ss[i]);
    puts(ss[i]);
    while(!strcmp(ss[i],"****")= =0)
    {
    i++:
    gets(ssEi]);
    puts(ss[i]);
    )
    n=i:
    max=proe(SS,n);
    printf("\nmax=%s\n",max);
    }
    參考答案及專家詳解
    一、選擇題
    1.D?!窘馕觥克惴ǖ目臻g復雜度,是指執(zhí)行這個算法所需的存儲空間。算法所占用的存儲空間包括算法程序所占用的空間、輸入的初始數(shù)據(jù)所占用的存儲空間、算法執(zhí)行過程中所需要的額外空間。
    2.D?!窘馕觥繑?shù)據(jù)的存儲結構是指數(shù)據(jù)的邏輯結構在計算機存儲空間中的存放形式,一種數(shù)據(jù)結構可以根據(jù)需要采用不同的存儲結構,用的存儲結構有順序和鏈式結構。用不同的存儲結構,其處理的效率是不同的。
    3.D?!窘馕觥克^的交換排序方法是指借助數(shù)據(jù)元素之間的互相交進行排序的一種方法,包括冒泡排序和快速排序,冒泡排序通過相鄰元素的交換,逐步將線性表變成有序是一種最簡單的交換排序方法。
    4.C。【解析】結構化程序設計的原則和方法之一是限制使用GOT0語句,但不是絕對不允許使用G0T0語句。其他三項為結構化程序設計的原則。
    5.D。【解析】文件系統(tǒng)所管理的數(shù)據(jù)文件基本上是分散、相互獨立的。相對于數(shù)據(jù)庫系統(tǒng),以此為基礎的數(shù)據(jù)處理存在3個缺點:數(shù)據(jù)冗余大、數(shù)據(jù)的不一致性、程序與數(shù)據(jù)的依賴性強。
    6.C?!窘馕觥棵嫦?qū)ο蟮脑O計方法的基本原理是:使用現(xiàn)實世界的概念抽象地思考問題從而自然地解決問題。它雖強調(diào)模擬現(xiàn)實世界中的概念而不強調(diào)算法,但是它鼓勵開發(fā)者在軟件開發(fā)的過程中從應用領域的概念角度去思考。
    7.D。【解析】所謂的后序遍歷是指,首先遍歷左子樹,然后遍歷右子樹,最后訪問根結點,并且在遍歷左、右樹時,仍然先遍歷左子樹,然后遍歷右子樹,最后訪問根點。因此,后序遍歷二叉樹的過程也是一個遞歸過程。
    8.B?!窘馕觥寇浖倪^程設計是指系統(tǒng)結構部件轉換成軟件的過程描述。
    9.A。【解析】模塊的獨立性是指每個模塊保證完成系統(tǒng)要求的獨立功能,并且與其他模塊的聯(lián)系少且接口簡單。衡量軟件的模塊獨立性有內(nèi)聚性和耦合性兩個定性度量標準。耦合性是模塊間互相連接緊密程度的度量。一般較優(yōu)秀的軟件設計,應盡量做到高內(nèi)聚,低耦合,即減弱模塊之間的耦合性和提高模塊內(nèi)的內(nèi)聚性,以利于提高模塊的獨立性。
    10.C。【解析】對象的封裝性是指從外面看只能看到對象的外部特性,而對象的內(nèi)部,其處理能力的實行和內(nèi)部狀態(tài)對外是不可見的,是隱蔽的。
    11.C?!窘馕觥繑?shù)據(jù)庫系統(tǒng)由如下5個部分組成:數(shù)據(jù)庫(DB)、數(shù)據(jù)庫管理系統(tǒng)(DBMS)、數(shù)據(jù)庫管理員(人員)、系統(tǒng)平臺之一——硬件平臺(硬件)、系統(tǒng)平臺之二——軟件平臺(軟件)。其中DB(DataBase)即數(shù)據(jù)庫,是統(tǒng)一管理的相關數(shù)據(jù)的集合DBMS即數(shù)據(jù)庫管理系統(tǒng),是位于用戶與操作系統(tǒng)之間的一層數(shù)據(jù)管理軟件,為用戶或應用完程序提供訪問DB的方法。由以上可知,選C為正確答案。
    12.A?!窘馕觥繕俗R符是由字母、數(shù)字或下劃線組成,并且它的第一個字符必須是字母或者下劃線。B選項int不是表達變量類型的標識符,它不能再用做變量名和函數(shù)名。C選項d0是C語言的一個關鍵字。D選項標識符只能以字母或下劃線開始。
    13.D?!窘馕觥勘绢}考查邏輯運算符的使用。當“&&”的兩個運算對象都是邏輯l時,表達式返回值才是1;“‖”的兩個運算對象至少有一個是邏輯1時,表達式返回值也是l,x  14.C。【解析】第l個printf函數(shù),格式說明的個數(shù)是2,而輸出項的個數(shù)是3,所以對于多余的輸出項k不予輸出;第2個printf函數(shù),有兩個%說明,第1個%后面的字符要原樣輸出。本題考查printf函數(shù)的格式。①“%x”和“%o”分別表示以十六進制和八進制無符合型輸出整型數(shù)據(jù)(不帶前導ox或o);②printf函數(shù)中格式說明符之前插入的任何字符都原樣輸出;③格式說明與輸出項的個數(shù)也要相等,如果格式說明的個數(shù)少于輸出項的個數(shù),則對于多余的輸出項不予輸出。
    15.C。【解析】函數(shù)fun(int x,int y)的功能是返回x+Y的值。在主函數(shù)中,變量a,b,c的初始值分別為 1,2,3。因此逗號表達式“a++,b++,a+b”的值等于5,表達式c++的值為3,調(diào)用于函數(shù)的表達式為“fun(5,3);”,其返回值等于8。
    16.D?!窘馕觥吭趚=2,y=x+3/2中,3/2=1,2+1=3,因此表達式的值為3,因為X,y為double型變量,故選擇D選項。
    17.A?!窘馕觥慨擷為1時,執(zhí)行case l,a自加等于l,因為case l后沒有break,接著執(zhí)行case 2,此時a的值為2,b自加為1,故選擇A選項。
    18.D?!窘馕觥勘绢}考查自增運算符“++”、邏輯與運算符“&&”和邏輯或運算符“‖”。自增運算符“++”出現(xiàn)在變量之前,表示先使用變量的值加1,再使用變量的值進行運算;出現(xiàn)在變量之后,表示先使用變量的值進行運算,再使用變量的值加l。當邏輯與運算符“&&”兩邊的運算對象都為真時,邏輯表達式的值才為真;當邏輯或運算符“‖”只要一個值為1,值就為l。根據(jù)運算符的優(yōu)先級,題中應先計算內(nèi)層括號中的值。++j是先自加后運算,因此運算時j的值等于3,所以表達式++j=3成立,即表達式的值為l;1與任何數(shù)都為進行或(1 1)運算,結果都為1,因此k一3的表達式i++是先運算后自加,因此運算時i為 1,所以i++=1成立,自加1后i=2。if語句的條件為真即“1”,所以輸出i、j、k的值分別是2,3,3。
    19.A?!窘馕觥勘绢}考查switch語句。當i=1時,執(zhí)行case l,因為沒有遇到break語句,所以依次往下運行,“a=a+2=2,a=a+3=5”;當i=2時,執(zhí)行case 2,因為沒有遇到break語句,所以依次往下執(zhí)行,“a=a+2=7,a=a+3=10”;當i=3時,執(zhí)行case 3,a=a+1=11,因為沒有遇到break語句,所以依次往下運行,a=a+2=13,a=a+3=16;當i=4時,執(zhí)行default,a=a+3=l9,結束循環(huán)。
    20.C。【解析】只有當3個if條件同時成立,即能夠同時被2、3、7整除時,才輸出i的值,而從0到50能夠同時被2、3、7整除的數(shù)只有42,故選擇c選鞏。
    21.A?!窘馕觥垦h(huán)的作用是求行下標從l到2列下標從0到i的元素之和,即s=a[1][0]+a[1][1]+a[2][o]+a[2][1]+a[2][2]=3+4+5+6+0一18。
    22.A?!窘馕觥吭诔绦蛘Z句中,k的初始值為5,進行第l次while循環(huán)后,k自減l為4,非0,執(zhí)行循環(huán)體里的printf語句,輸出k,此時k的值變?yōu)閘。程序執(zhí)行第2次循環(huán)時,k自減l變?yōu)?,為假,退出while循環(huán)語句。所以程序的最后結果為l。
    23.A?!窘馕觥客ㄟ^地址來引用數(shù)組元素的方法有下列5種:
    (1)a[i][j];(2)*(a[i]+j);(3)*(*(a+j)+j);(4)*(a[i][j]);(5)(&a[o][0]+3*i+j)。故A正確。
    24.C?!窘馕觥窟x項A、B的空間不夠;字符串存儲要有結束符’\0’,且要占用一個空間,printf用來輸出 字符,不能輸入字符串。
    25.D?!窘馕觥坑深}目中線性鏈表的定義可知,要將q和r所指的結點交換前后位置,只要使q指向r的后一個結點,P指向r結點,r指向q結點即可。而在選項D中,r->next=q,這時r指向的節(jié)點為q;p->next=r,這時P指向的節(jié)點為r;q->next:r->next,因為r節(jié)點已經(jīng)指向q,所以執(zhí)行這個語句后q又指向q,所以選項D不正確。
    26.B?!窘馕觥吭诘?次外層for循環(huán)中,首先x++得到x=1。進入到內(nèi)層for循環(huán),只有循環(huán)j的值為奇數(shù)時,變量x的值才自加1,所以在內(nèi)層for循環(huán)執(zhí)行過程中,變量x的值自加兩次,當退出內(nèi)層for循環(huán)時,x=3,然后執(zhí)行x++,得到x=4。在進入執(zhí)行第2次外層for循環(huán)中,首先x++得到x=5。進入到內(nèi)層for循環(huán),只有循環(huán)變量J的值為奇數(shù)時,變量X的值才自加1,所以在內(nèi)層for循環(huán)執(zhí)行過程中,變量X的值自加l兩次,當退出內(nèi)層for循環(huán)時,x=7,然后執(zhí)行x++,得到x=8,所以打印輸出變量x的值為8。
    27.C?!窘馕觥孔雍瘮?shù)funl(double a)的功能是返回a的平方值的整數(shù)部分。子函數(shù)fun2(double X, double y)的功能是返回X的平方值的整數(shù)部分與Y的平方值的整數(shù)部分的和。又因為題中變量W的定義為double型,函數(shù)fun(2)的定義為int型,按照各類數(shù)值型數(shù)據(jù)間的混合運算,整型數(shù)據(jù)被轉換為實型數(shù)據(jù)。所以雙精度型變量w的值為5.0。
    28.c。【解析】在for循環(huán)語句中自變量i從0開始,每次自加2,執(zhí)行s+=*(t+i)語句,因為C語言規(guī)定數(shù)組名做表達式相當于數(shù)組的首地址,也就是第一個元素的地址。因此,*(t+i)代表數(shù)組的第i+1個元素。所以程序運行的結果是l+3+5+7+9=25,即變量S的值等于25。
    29.A?!窘馕觥勘绢}在函數(shù)int fun(int n)的定義中又出現(xiàn)了對函數(shù)fun的調(diào)用,所以函數(shù)fun是遞歸函數(shù)。因而在主函數(shù)中調(diào)用x=fun(x)時,當輸入10賦給變量X時,遞歸調(diào)用的過程為
    fun(10)=l0+fun(9)=10+9+fun(8)=10+9+8+fun(7)
    =10+9++8+7+fun(6)=10+9++8+7+6+fun(6)
    =10+9++8+7+6+5+fun(4)
    =10+9++8+7+6+5+4+fun(3)
    =10+9++8+7+6+5+4+3+fun(2)
    =10+9++8+7+6+5+4+3+2+fun(1)
    =10+9++8+7+6+5+4+3+2=55
    30.C?!窘馕觥吭诤瘮?shù)int fun(int x[],int n)的定義中,變量sum為一個靜態(tài)局部變量。由于在整個程序運行期間,靜態(tài)局部變量在內(nèi)存中的靜態(tài)存儲中占據(jù)著永久的存儲單元。函數(shù)int fun(int x[],int n)的功能是求出數(shù)組x[]各個元素的和,所以在主函數(shù)中,調(diào)用函數(shù)fun(a,5)后,變量sum=1+2+3+4+5=15,當再次調(diào)用fun(b,4)后,變量sum=15+6+7+8+9=45,所以s=15+45=60。
    31.D?!窘馕觥繄?zhí)行第一次for循環(huán)時,用表達式p[i][J]!=’\o’來判斷字符串數(shù)組指針P是否到達字符串的結尾,如果沒有到達,繼續(xù)執(zhí)行while中的語句。if語句表示(p[i][j]-’\o’)除2的余數(shù)不為0時,即字符串所有奇數(shù),執(zhí)行后面的語句。所以退出第1次for的循環(huán)體時,輸出為397,執(zhí)行第2次循環(huán)體。對字符串“2584”進行處理,輸出結果為5,因而最后輸出結果為3975。
    32.B?!窘馕觥繌念}目中可知,’\O’、’\t’、’\\’分別為一個字符,而sizeof是求字節(jié)個數(shù)的函數(shù),其中包括’\O’占的字節(jié),strlen函數(shù)是求數(shù)組長度的函數(shù);其以’\0’結束,因此strlen的值為5,sizeof的值為20。
    33.C?!窘馕觥繑?shù)組的下標是從0開始的,A中越界,行下標和列下標都不能越界;B中,雖然是個地址,但是也同樣越界了;選項c中表示的是第一個的首地址;選項D表示的為其元素的值,并不是地址。
    34.B?!窘馕鯹SEEK_SET代表文件的開始,SEEK_END代表文件末尾,SEEK_CUR代表文件當前位置。
    35.C。【解析】當if執(zhí)行到第一個滿足(i*i>=20)&&(i*i<=100)這個條件的i出現(xiàn)時,通過break語句跳出循環(huán),執(zhí)行下面的prinlf語句。
    36.B。【解析】指針中存放的是變量的地址,指針也可以進行增減運算,這時指針移動的最小單位是一個存儲單元,而不是一個字節(jié)。所以題中p+6指的是將指針向后移動了6個存儲單元,即指向b[6],存放的是b[6]的地址。
    37.D。【解析】由n!的數(shù)字定義可知n!=n*(n-1)*(n-2)*…*1。在選項A中,由于f的初值為0,在for循環(huán)語句中,f依次乘以l,2,3,…,n,最后計算得到f=n!=0,所以選項A不正確。在選項B中,f的初值為l,在for循環(huán)語句中,f依次乘以l,2,3,…,(n-1),最后計算得到f=(n-1)!,所以選項B不正確。在選項C中,f的初值為l,在for循環(huán)語句中,f依次乘以n,n+1,n+2,……,所以選項C不正確。在選項D中,f的初值為l,在for循環(huán)語句中,f依次乘以n,n-1,n-2,…,2,最后計算得到f=n!,所以選項D正確。
    38.A?!窘馕鯹strcpy實現(xiàn)的功能是復制,該操作把are復制到a中,aE03 E33一’&’,且strcpy(aEl], "you")把you復制到a[l]中,故輸出a為“are&you”。
    39.A?!窘馕觥勘绢}主要考查按位與運算,x=Oll050的二進制形式為00010010000101000,Ol252的二進制形式為0000001010101010,兩者相與得0000001000101000。
    40.B?!窘馕觥?include”文件名”,預處理程序首先在引用被包含文件的源文件所在的目錄下搜索指定的文件,如沒找到,再按系統(tǒng)指定的標準目錄搜索。
    二、基本操作題程序填空題
    【1】k=2【2】s+=(2*k一1)/sl【3】s
    【解析】由題目中所給公式可知,多項武的第一項為1。變量s中存放多項式的和,其初始值為l。因此,循環(huán)從第二項開始,因此,【1】處填“k=2”;變量sl中存放各項表達武的值,由公式可知,【2】處填“s+=(2*k-1)/sl”;題目中要求將多項式的和返回到主函數(shù)當中,因此,【3】處填“s”。
    三、程序改錯題
    (1)錯誤:int j=1;正確:double j=1.0;
    (2)錯誤:y+=1/(i*i); 正確:y+=j/(i*i);
    【解析】由函數(shù)proc()可知,變量j的作用是控制每一項符號的變化,并且作為運算的分子,應改為double型變量。因此,“int j=1;”應改為“double j=1.0;”。變量y中存放多項式的值,多項式中的每一項符號由變量j決定。因此,“y+=1/(i*i);”應改為“y+=j/(i*i);”。
    四、程序設計題
    char*proc(char(*a)[81],int M)
    {
    char*max;
    int i=0:
    max=a[O]:
    for(i=0;i  if(strlen(max)  max=a[i];
    return max; //返回最長字符串的地址
    }
    【解析】本題首先要定義一個字符指針用于保存最長的字符串,并使其初始值指向第一個字符串;再循環(huán)遍歷字符串數(shù)組,通過if語句比較字符串的長度,并把最長的字符串地址賦給字符指針;最后返回最長字符串的地址。