2013計算機二級C語言上機練習(xí)題及答案(19)

字號:

為大家收集整理了《2013計算機二級C語言上機練習(xí)題及答案(19)》供大家參考,希望對大家有所幫助?。?!
    填空題
    程序通過定義學(xué)生結(jié)構(gòu)體變量,存儲了學(xué)生的學(xué)號、姓名和3門課的成績。函數(shù)fun的功能是將形參a所指結(jié)構(gòu)體變量s中的數(shù)據(jù)進行修改,并把a中地址作為函數(shù)值返回主函數(shù),在主函數(shù)中輸出修改后的數(shù)據(jù)。
    例如:a所指變量s中的學(xué)號、姓名、和三門課的成績依次是:10001、
    " ZhangSan "、95、80、88,修改后輸出t中的數(shù)據(jù)應(yīng)為:10002、"LiSi "、96、
    81、89。
    請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除, 使程序得出正確的結(jié)果。
    注意:源程序存放在考生文件夾下的BLANK1.C中。
    不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
    給定源程序:
    #include
    #include
    struct student {
    long sno;
    char name[10];
    float score[3];
    };
    __1__ fun(struct student *a)
    { int i;
    a->sno = 10002;
    strcpy(a->name, "LiSi");
    for (i=0; i<3; i++) __2__ += 1;
    return __3__ ;
    }
    main()
    { struct student s={10001,"ZhangSan", 95, 80, 88}, *t;
    int i;
    printf("\n\nThe original data :\n");
    printf("\nNo: %ld Name: %s\nScores: ",s.sno, s.name);
    for (i=0; i<3; i++) printf("%6.2f ", s.score[i]);
    printf("\n");
    t = fun(&s);
    printf("\nThe data after modified :\n");
    printf("\nNo: %ld Name: %s\nScores: ",t->sno, t->name);
    for (i=0; i<3; i++) printf("%6.2f ", t->score[i]);
    printf("\n");
    }
    解題思路:
    本題是利用形參對結(jié)構(gòu)體變量中的值進行修改并通過地址把函數(shù)值返回。
    第一處:必須定義結(jié)構(gòu)指針返回類型,所以應(yīng)填:struct student *。
    第二處:分別對成績增加1分,所以應(yīng)填:a->score[i]。
    第三處:返回結(jié)構(gòu)指針a,所以應(yīng)填:a。
    改錯題
    給定程序MODI1.C中函數(shù)fun的功能是:從N個字符串中找出長的那個串,并將其地址作為函數(shù)值返回。各字符串在主函數(shù)中輸入,并放入一個字符串?dāng)?shù)組中。
    請改正程序中的錯誤,使它能得出正確結(jié)果。
    注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
    給定源程序:
    #include
    #include
    #define N 5
    #define M 81
    fun(char (*sq)[M])
    { int i; char *sp;
    sp=sq[0];
    for(i=0;i
    if(strlen( sp)
    sp=sq[i] ;
    return sq;
    }
    main()
    { char str[N][M], *longest; int i;
    printf("Enter %d lines :\n",N);
    for(i=0; i
    printf("\nThe N string :\n",N);
    for(i=0; i
    longest=fun(str);
    printf("\nThe longest string :\n"); puts(longest);
    }
    解題思路:
    第一處: 要求返回字符串的首地址,所以應(yīng)改為:char *fun(char (*sq)[M])。
    第二處: 返回一個由變量sp控制的字符串指針,所以應(yīng)改為:return sp;。
    編程題
    函數(shù)fun的功能是:將a、b中的兩個兩位正整數(shù)合并形成一個新的整數(shù)放在c 中。合并的方式是:將a中的十位和個位數(shù)依次放在變量c的百位和個位上,b中的十位和個位數(shù)依次放在變量c的十位和千位上。
    例如,當(dāng)a=45,b=12。調(diào)用該函數(shù)后,c=2415。
    注意: 部分源程序存在文件PROG1.C中。數(shù)據(jù)文件IN.DAT中的數(shù)據(jù)不得修改。
    請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入
    你編寫的若干語句。
    給定源程序:
    #include
    void fun(int a, int b, long *c)
    {
    }  
    main()
    { int a,b; long c;
    printf("Input a, b:");
    scanf("%d%d", &a, &b);
    fun(a, b, &c);
    printf("The result is: %ld\n", c);
    NONO();
    }
    解題思路:
    本題是給出兩個兩位數(shù)的正整數(shù)分別取出各位上的數(shù)字,再按條件組成一個新數(shù)。
    取a十位數(shù)字的方法:a/10
    取a個位數(shù)字的方法:a%10
    參考答案:
    void fun(int a, int b, long *c)
    {
    *c = (b%10)*1000+(a/10)*100+(b/10)*10+a%10;
    }