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

字號(hào):

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

    第五套上機(jī)試卷
    一、改錯(cuò)題
    【分析】:對(duì)于改錯(cuò)題的程序中的錯(cuò)誤一般可分為兩類,一類是語(yǔ)法錯(cuò)誤,程序中的語(yǔ)句不符合C語(yǔ)言的語(yǔ)法,拼寫(xiě)錯(cuò)誤,這類的錯(cuò)誤可通過(guò)調(diào)試程序改正。另一類是邏輯錯(cuò)誤,程序調(diào)試已通過(guò),但運(yùn)行結(jié)果不正確,這類錯(cuò)誤的修改必須要看懂和理解程序。
    #include
    #define N 50
    void sum(int n,int *pa)
    /*屬第一類錯(cuò)誤。若聲明為void類型,則該函數(shù)沒(méi)有返回值,但程序要求返回前n的和,所以類型聲明不正確,應(yīng)改為: int 或去掉*/
    { int count, total,temp;
    *pa=3;*++pa=2;
    total=5; count=2;
    while(count++
    { temp=*(pa-1)**pa;
    if(temp<10)
    { total+=temp; *(++pa)=temp;
    }
    else
    {*++pa=temp/10;
    total+=*pa;
    if(count
    /*屬第二類錯(cuò)誤。若乘積為兩位數(shù),已把其十位數(shù)字作為數(shù)列的后續(xù)項(xiàng),但若數(shù)列的個(gè)數(shù)沒(méi)有超過(guò)n時(shí),將該乘積個(gè)位數(shù)字作為數(shù)列的后續(xù)項(xiàng)。*++pa 與*pa++不同,此處應(yīng)為: *++pa */
    }
    }
    return total;
    }
    main()
    { int tol,n,i,num[n];
    /*屬第一類錯(cuò)誤。數(shù)組的聲明不正確,數(shù)組的下標(biāo)必須為常量或常量標(biāo)識(shí)符。應(yīng)改為:num[N] 或 num[50] */
    do
    { printf("Input n=?(2
    scanf("%d",&n);
    }while(n<=2||n>=50);
    tol=sum(N,num);
    /*屬第二類錯(cuò)誤。本題要求生成數(shù)列的前n(n<50)項(xiàng),而N是常量。應(yīng)改為:sum(n,num) */
    for(i=0;i
    printf((i+1)%5?"%5d":"%5d\n",num[i]);
    printf("\n");
    printf("%d",tol);
    }
    二、編程題
    【分析】:編寫(xiě)程序時(shí),通過(guò)按照題目的要求編程。main函數(shù)實(shí)現(xiàn)對(duì)文件的操作和數(shù)據(jù)的輸入。
    #include
    #define N 100
    int chang(char a[],int b[],int *n)
    {int sign,k=-1,i;
    *n=0;
    if(a[0]= ='-') sign=1;
    else sign=0;
    for(i=0;a[i]!='\0';i++)
    if(a[i]>='0'&&a[i]<='9')
    b[++k]=a[i]-'0';
    *n=k;
    return sign;}
    main()
    {char str[N];
    int num[N],i,j,sign,n;
    FILE *fp;
    if((fp=fopen("myf2.out","w"))= =NULL)
    {printf("can't open the file!");
    exit(0);}
    for(j=0;j<2;j++)
    {gets(str);
    sign=chang(str,num,&n);
    fprintf(fp,"sign=%d,",sign);
    fprintf(fp,"b=(");
    for(i=0;i<=n;i++)
    fprintf(fp,"%2d",num[i]);
    fprintf(fp,")\n");
    }
    fclose(fp);
    }