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

字號:

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

    第五套上機試卷
    一、改錯題
    【分析】:對于改錯題的程序中的錯誤一般可分為兩類,一類是語法錯誤,程序中的語句不符合C語言的語法,拼寫錯誤,這類的錯誤可通過調(diào)試程序改正。另一類是邏輯錯誤,程序調(diào)試已通過,但運行結(jié)果不正確,這類錯誤的修改必須要看懂和理解程序。
    #include
    #define N 50
    void sum(int n,int *pa)
    /*屬第一類錯誤。若聲明為void類型,則該函數(shù)沒有返回值,但程序要求返回前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
    /*屬第二類錯誤。若乘積為兩位數(shù),已把其十位數(shù)字作為數(shù)列的后續(xù)項,但若數(shù)列的個數(shù)沒有超過n時,將該乘積個位數(shù)字作為數(shù)列的后續(xù)項。*++pa 與*pa++不同,此處應(yīng)為: *++pa */
    }
    }
    return total;
    }
    main()
    { int tol,n,i,num[n];
    /*屬第一類錯誤。數(shù)組的聲明不正確,數(shù)組的下標(biāo)必須為常量或常量標(biāo)識符。應(yīng)改為:num[N] 或 num[50] */
    do
    { printf("Input n=?(2
    scanf("%d",&n);
    }while(n<=2||n>=50);
    tol=sum(N,num);
    /*屬第二類錯誤。本題要求生成數(shù)列的前n(n<50)項,而N是常量。應(yīng)改為:sum(n,num) */
    for(i=0;i
    printf((i+1)%5?"%5d":"%5d\n",num[i]);
    printf("\n");
    printf("%d",tol);
    }
    二、編程題
    【分析】:編寫程序時,通過按照題目的要求編程。main函數(shù)實現(xiàn)對文件的操作和數(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);
    }