2013計(jì)算機(jī)二級C語言上機(jī)題庫及答案解析(4)

字號:

為大家收集整理了《2013計(jì)算機(jī)二級C語言上機(jī)題庫及答案解析(4)》供大家參考,希望對大家有所幫助?。?!
    填空題
    用篩選法可得到2~n(n<10000)之間的所有素?cái)?shù),方法是:首先從素?cái)?shù)2開始,將所有2的倍數(shù)的數(shù)從數(shù)表中刪去(把數(shù)表中相應(yīng)位置的值置成0);接著從數(shù)
    表中找下一個非0數(shù),并從數(shù)表中刪去該數(shù)的所有倍數(shù);依此類推,直到所找的下一個數(shù)等于n為止。這樣會得到一個序列:
    2,3,5,7,11,13,17,19,23,…… 函數(shù)fun用篩選法找出所有小于等于n的素?cái)?shù),并統(tǒng)計(jì)素?cái)?shù)的個數(shù)作為函數(shù)值返回。
    請?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。
    注意:源程序存放在考生文件夾下的BLANK1.C中。
    不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
    給定源程序:
    #include
    int fun(int n)
    { int a[10000], i,j, count=0;
    for (i=2; i<=n; i++) a[i] = i;
    i = 2;
    while (i
    for (j=a[i]*2; j<=n; j+=___1___)
    a[j] = 0;
    i++;
    while (___2___==0)
    i++;
    }
    printf("\nThe prime number between 2 to %d\n", n);
    for (i=2; i<=n; i++)
    if (a[i]!=___3___)
    { count++; printf( count%15?"%5d":"\n%5d",a[i]); }
    return count;
    }
    main()
    { int n=20, r;
    r = fun(n);
    printf("\nThe number of prime is : %d\n", r);
    }
    解題思路:
    第一處:所有2的倍數(shù)的數(shù)從數(shù)表中刪去,所以應(yīng)填:a[i]。
    第二處:找出下一個不是的a[i],所以應(yīng)填:a[i]。
    第三處:輸出素?cái)?shù),只要判斷a[i]不是0就是素?cái)?shù),所以應(yīng)填:0。
    改錯題
    給定程序MODI1.C中函數(shù)fun的功能是: 為一個偶數(shù)尋找兩個素?cái)?shù), 這兩個素?cái)?shù)之和等于該偶數(shù),并將這兩個素?cái)?shù)通過形參指針傳回主函數(shù)。
    請改正函數(shù)fun中指定部位的錯誤, 使它能得出正確的結(jié)果。
    注意: 不要改動main函數(shù), 不得增行或刪行, 也不得更改程序的結(jié)構(gòu)!
    給定源程序:
    #include
    #include
    void fun(int a,int *b,int *c)
    { int i,j,d,y;
    for(i=3;i<=a/2;i=i+2) {
    Y=1;
    for(j=2;j<=sqrt((double)i);j++)
    if(i%j==0) y=0;
    if(y==1) {
    d==a-i;
    for(j=2;j<=sqrt((double)d);j++)
    if(d%j==0) y=0;
    if(y==1)
    { *b=i; *c=d; }
    }
    }
    }
    main()
    { int a,b,c;
    do
    { printf("\nInput a: "); scanf("%d",&a); }
    while(a%2);
    fun(a,&b,&c);
    printf("\n\n%d = %d + %d\n",a,b,c);
    }
    解題思路:
    第一處:變量y錯寫成Y。
    第二處:給變量d進(jìn)行賦值,所以應(yīng)改為:d=a-i;。
    編程題
    請編寫函數(shù)fun, 它的功能是:計(jì)算并輸出n(包括n)以內(nèi)能被5或9整除的所有自然數(shù)的倒數(shù)之和。
    例如,在主函數(shù)中從鍵盤給n輸入20后, 輸出為: s=0.583333。
    注意: 要求n的值不大于100。
    部分源程序在文件PROG1.C中。
    請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容, 僅在函數(shù)fun的花括號中填入你編寫的若干語句。
    給定源程序:
    #include
    double fun(int n)
    {
    }
    main()
    { int n; double s;
    printf("\nInput n: "); scanf("%d",&n);
    s=fun(n);
    printf("\n\ns=%f\n",s);
    NONO();
    }
    解題思路:
    本題是計(jì)算n(包括n)以內(nèi)能被5或9整除的所有自然數(shù)的倒數(shù)之和。
    參考答案:
    double fun(int n)
    {
    int i;
    double sum=0.0;
    for(i=1; i<=n; i++)
    if(i%5 == 0 || i%9 == 0) /* 被5或9整除 */
    sum+=1.0/i;
    return sum;
    }