二級C語言部分上機編程題詳細分析(2)

字號:

2、請編一個函數(shù)fun,其中n所指存儲單元中存放了數(shù)組中元素的個數(shù)。函數(shù)的功能是:刪除所有值為y的元素。已在主函數(shù)中給數(shù)組元素賦值,y的值由主函數(shù)通過鍵盤讀入。
    注意:部分源程序存在PROG1.C中,請勿改動主函數(shù)和其他函數(shù)中的內(nèi)容,僅在函數(shù)fun的指定的部位填入你編寫的若干語句。
    試題源程序如下:
    #include <stdio.h>
    #define M 20
    void fun(int bb[],int *n, int y)
    {
    }
    main()
    { int aa[M]={1,2,3,3,2,1,1,2,3,4,5,4,3,2,1}, n=15, y, k;
    printf("The original data is: \n");
    for(k=0; k<n; k++ ) printf("=",aa[k]);
    printf("\nEnter a number to deleted: "); scanf("%d",&y);
    fun(aa, &n, y);
    printf("The data after deleted %d: \n",y);
    for(k=0; k<n; k++ ) printf("=",aa[k]);
    printf("\n\n");
    }
    分析:
    (1)本題的基本算法是查找和刪除。
    (2)若循環(huán)控制變量是i,通過for循環(huán)逐個檢查元素中的值,把數(shù)組元素中不等于y的值從頭開始重新放入bb所指的數(shù)組中。用i作為下標,逐個引用數(shù)組元素;用i作為下標,把不等于y的元素中的值逐一重新放入bb所指的數(shù)組中。這一操作可用以下語句來實現(xiàn):
    if(bb[i]!=y)bb[j++]=bb[i];
    (3)因為已刪除了與y值相等的元素,因此,數(shù)組中數(shù)據(jù)的個數(shù)已經(jīng)改變;所以循環(huán)結(jié)束后,需要重新給n所指變量賦值。退出循環(huán)后,變量j中存放的是刪除后數(shù)組中數(shù)據(jù)的個數(shù),通過語句*n=j;把它賦給n所指變量即可。
    (4)主函數(shù)中輸出aa數(shù)組中原有的數(shù)據(jù),和刪除后的數(shù)據(jù)??忌梢詫φ账幒瘮?shù)是否正確。