2009年4月全國(guó)計(jì)算機(jī)等級(jí)二級(jí)C筆試考前練習(xí)習(xí)題(29)

字號(hào):

2009年4月,全國(guó)計(jì)算機(jī)等級(jí)二級(jí)C考試你準(zhǔn)備好了沒?考計(jì)算機(jī)等級(jí)二級(jí)C語言考試的朋友可以多關(guān)注一下考試大為大家整理的2009年4月,全國(guó)計(jì)算機(jī)等級(jí)二級(jí)C語言考前練習(xí)!希望對(duì)大家的備考有好的幫助!考試大祝各位考個(gè)好成績(jī)!大家每天都來練習(xí)哦!不斷的加強(qiáng)鞏固!每天都有更新哦!
    (1)下面的if語句與y=(x>=10)?3*x-11:(x<1)?x:2'x.1;的功能相同,請(qǐng)補(bǔ)充完整。
    If(  【1】  )
    if(  【2】  )y=2*x-1;
    else y=x;
    else y=3*x-11:
    答案:【1】x<10
    【2】x>=1
    評(píng)析:條件表達(dá)式的一般形式為:表達(dá)式l?表達(dá)式2:表達(dá)式3
    條件運(yùn)算符的執(zhí)行順序:先求解表達(dá)式1,若為非0(真)則求解表達(dá)式2,此時(shí)表達(dá)式2的值就作為整個(gè)條件表達(dá)式的值;若表達(dá)式1的值為O(假),則求解表達(dá)式3,表達(dá)式3的值就是整個(gè)條件表達(dá)式的值。y。(x>。10)?3。x-1 1:(x>=1)?x:2*x-1;的功能是先求(x>=1)?x:2*x-1:的值,所的的結(jié)果再與前面的語句構(gòu)成條件表達(dá)式進(jìn)行求值。所以【1】應(yīng)該填x<10,【2】應(yīng)該填x>=1。
    (2)以下程序中用戶由鍵盤輸入一個(gè)文件名,然后輸入一串字符(用拌結(jié)束輸入)存放到此
    文件中,形成文本文件,并將字符的個(gè)數(shù)寫到文件的尾部。請(qǐng)?zhí)羁铡?BR>    #include
    main()
    { FILE *fp;
    char ch,fname[32];im count=0;
    printf("Input the filename:");
    scanf("%s",fname);
    if((幣=fopen( 【3】 ,"w+"))==NULL)
    { print印Can't open file:%s\n",fname};exit(0);}
    printf("Enter data:in");
    while((ch=getchar())!_1≠)')
    { fputc(ch,fp);count++;}
    fprintf( 【4】 ,"\n%d\n",count);
    fclose(fp);
    }
    答案:【3】fname
    【4】fp
    評(píng)析:fopen()函數(shù)實(shí)現(xiàn)打開文件的功能,通常的調(diào)用方式為:FILE*fp;fp=fopen(文件名,使用文件方式),因此,第一個(gè)橫線處要求填寫要打開文件的名字fname。fprintf()函數(shù)的一般調(diào)用方式為:fprintf (文件指針,格式字符串,輸出表列),所以第二個(gè)橫線處應(yīng)填寫fb。
    (3)函數(shù)void fun(noat*sn,int n)的功能是:根據(jù)以下公式計(jì)算s,計(jì)算結(jié)果通過形參指針sn傳回;n通過形參傳入,n的值大于等于0。請(qǐng)補(bǔ)全程序。
    S=I-1/3+1/5-1/7+...+1/(2n+1)
    void fun(float*sn,int n)
    {  float s=O.O,w,f=-1.0;
    int i=0:
    for(I=0;i<=n;i++)
    { f= 【5】 *f;
    w=f/(2*i+1);
    S+=W:
    }
    【6】  =s;
    }
    答案:【5】-1或-1.0
    【6】*sn
    評(píng)析:由于在對(duì)s求和時(shí),相諏較畹姆鷗蘸孟嚳?,而哉姱数fun中沒有對(duì)數(shù)據(jù)進(jìn)行取反的操作,故第一空的目的是對(duì)數(shù)據(jù)進(jìn)行取反,以保證序列中相鄰兩項(xiàng)的符號(hào)不同。故第一個(gè)應(yīng)填-1或-1.0。在執(zhí)行完循環(huán)體后,要將求和結(jié)果通過指針參數(shù)的形式傳遞給調(diào)用fun的函數(shù),故第二空應(yīng)填*sn。
    (4)下面的函數(shù)strcat(strl,str2)實(shí)現(xiàn)將字符串str2拼接到字符串strl后面的功能。請(qǐng)?zhí)羁帐怪暾?BR>    Char*strcat(strl,str2)
    char*strl.*str2;
    { char*t=strl;
    while( 【7】 )strl++;
    while( 【8】 );
    return(t);}
    答案:【7】*strl或*str1!='\0'或*str1!=0或*strl!=NULL
    【8】*strl++=*str2++或*strl++=*str2,*str2++
    評(píng)析:函數(shù)strcat(strl,str2)實(shí)現(xiàn)將字符串str2連接到字符串strl后面,所以首先要找到字符串strl的串尾,根據(jù)c語言的語法規(guī)定,一個(gè)串的串尾一定是一個(gè)隱含字符"\0",而在程序中,對(duì)字符串中字符的訪問是通過兩/卜指針變量來完成的,因此要找到字符串strl的串尾,要判斷*strl是否為"\0",要找到字符串str2的串尾,要判斷*str2是否為"\0",程序中必須可以使字符串中字符逐一順序體現(xiàn),所以在題中我們應(yīng)填寫"*str1"和"*strl++=*str2++"。
    (5)以下函數(shù)fun用于求兩個(gè)整數(shù)a和b的公約數(shù)。
    fun(a'b)
    int a'b;
    {int I,J,m,n;
    if(a>b)
    {m=a;a=b; 【9】 ;}
    i=a.j=b;
    while((n= 【10】 )!=O)
    {j=i;i= 【11】??;}
    retum(i);
    }
    答案:【9】b=m
     【10】j%i
     【11】n
     評(píng)析:函數(shù)中的變量i和j分別存放兩個(gè)形參的最小數(shù)和數(shù),在語句i=a和i=b執(zhí)行之前,要將a和b分別變?yōu)樽钚?shù)和數(shù),當(dāng)a>b時(shí),程序使用中間變量將兩者交換,所以題中第一個(gè)空中應(yīng)當(dāng)填寫"b=m";為求兩個(gè)整數(shù)的公約數(shù),程序的where循環(huán)條件必須為j整除i成立,所以題_中第二個(gè)空中應(yīng)當(dāng)填寫"j%i";程序要通過i的值返回公約數(shù),因此在循環(huán)中要將每次整除的公約數(shù)賦給i,以保證最后返回的是兩個(gè)整數(shù)的公約數(shù),所以第三個(gè)空中應(yīng)當(dāng)填寫"n"。