2010年計(jì)算機(jī)等級(jí)考試二級(jí)C:上機(jī)習(xí)題12套(1)

字號(hào):

2010年計(jì)算機(jī)等級(jí)考試二級(jí)C:上機(jī)習(xí)題12套(1)

    第一套上機(jī)試題
    一、改錯(cuò)題
    【分析】:改錯(cuò)題的錯(cuò)誤一般可分為兩類,一類是語法錯(cuò)誤,這類錯(cuò)誤可通過調(diào)試程序改正,較容易;另一類是邏輯錯(cuò)誤,這類錯(cuò)誤程序能運(yùn)行,但結(jié)果不正確,這類錯(cuò)誤相對(duì)較難,修改前必須要看懂和理解程序。
    #include"stdio.h"
    #define n 4 #define m 3 /*語法錯(cuò),#define m 3需另起一行*/
    int a[n][m],s[m];
    p(int j)/*此函數(shù)的功能為:找出a數(shù)組中第j列的最小元素的值及行號(hào),函數(shù)成功運(yùn)行后,i中即為j列的最小元素的行號(hào),s[j]中即為j列的最小元素的值*/
    {int k,i,x;
    x=a[0][j];i=0; /*邏輯錯(cuò),從函數(shù)的功能可知,a[0][j]也應(yīng)賦值給s[j],所以x=a[0][j]應(yīng)改為s[j]=x=a[0][j]*/
    for(k=1;k
    if(a[k][j]
    {i=k;s[j]=x=a[k][j];}
    return i;
    }
    main()
    {int index[m],i,j,k;
    for(i=0;i
    for(j=0;j
    scanf("%d",a[i][j]);/*語法錯(cuò),但編譯時(shí)不會(huì)報(bào)錯(cuò),scanf語句的一般形式為scanf(格式控制,地址表列),所以a[i][j]應(yīng)改為&a[i][j])*/
    for(j=0,j
    {index[j]=p[j];
    printf("a[%d,%d]=%d\n",index[j],j,s[j]);
    }
    i=s[1];k=0; /*邏輯錯(cuò),數(shù)組s中存放的是a數(shù)組中每一列的最小值,比較時(shí)應(yīng)從數(shù)組的第0個(gè)元素開始,而下面的for循環(huán)是從第1個(gè)元素開始的,所以i=s[1]應(yīng)改為i=s[0]*/
    for(j=1;j
    if(s[j]
    {i=s[j];k=j;}
    printf("min=a[%d,%d]=%d",index[k],k,i); }
    二、編程題
    【分析】:本題的主要功能是建立一個(gè)3行8列的二維數(shù)組,并給其元素賦值,其中第1、2行的值可通過遞推公式xi+1=(25*xi+357)%1024得到,第三行的值取前兩行同列元素的公約數(shù),所以編程時(shí)可用一個(gè)函數(shù)來實(shí)現(xiàn)求公約數(shù)的算法。
    #include
    #include
    #define n 8
    /*函數(shù)gcd實(shí)現(xiàn)求公約數(shù)的算法*/
    gcd(int a,int b)
    {int c;
    while(b!=0)
    {c=a%b;a=b;b=c;}
    return a;
    }
    main()
    {int i,j,x,a[3][n];
    FILE *f;
    if((f=fopen("d:\\temp\\1\\myf2.out","w"))= =NULL)
    {printf("Create File myf2.out Failed!\n");exit(0);}
    x=26;
    /*下面二重for循環(huán)實(shí)現(xiàn)給第1、2行數(shù)組元素賦值的功能*/
    for(i=0;i<2;i++)
    for(j=0;j
    {a[i][j]=x;x=(25*x+357)%1024;}
    /*下面for循環(huán)通過調(diào)用gcd函數(shù)實(shí)現(xiàn)給第3行數(shù)組元素賦值的功能*/
    for(j=0;j
    a[2][j]=gcd(a[0][j],a[1][j]);
    /*下面for循環(huán)實(shí)現(xiàn)按題目所給格式輸出二維數(shù)組的功能*/
    for(i=0;i<3;i++)
    {for(j=0;j
    fprintf(f,"\n");
    }
    fclose(f); }