等級(jí)考試二級(jí)C語言考前上機(jī)密卷[上]

字號(hào):

1.程序填空
    給定程序的功能是判斷字符ch是否與串str中的某個(gè)字符相同:若相同,什么也不做,若不同,則插在串的最后。
    請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果
    注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
    試題程序:
    #include
    #include
    void fun(char*str, char ch )
    {  while ( *str && *str != ch ) str++;
    if( *str  1  ch )
    { str[0] =ch;
    2  = 0;
    }
    }
    main( )
    {  char s[81], c;
    printf( "\nPlease enter a string:\n" ); gets ( s );
    printf ("\n Please enter the character to search : " );
    c = getcharO;
    fun( 3  ) ;
    printf( "\nThe result is %s\n", s);
    1.程序填空
    【答案】
    (1)!=
    (2)str[1]
    (3)s,c
    【評(píng)析】
    (1)fun函數(shù)中先設(shè)置了二個(gè)循環(huán)從字符串str中尋找字符ch,如果找到則中斷循環(huán)并保留字符ch的地址,否則一直循環(huán)到串尾"。因此通過判斷*str的內(nèi)容即可判斷是否已找到字符ch。
    (2)如果沒有找到字符ch,則在while循環(huán)后str指針指向串結(jié)束符Ox00,此時(shí)應(yīng)將字符ch寫入這里并在下一地址寫入一個(gè)串結(jié)束符Ox00,所以應(yīng)該是"str[1]。O;"語句。
    (3)此句是調(diào)用fun()函數(shù),括弧中是其實(shí)際參數(shù)。
    2.程序修改
    給定程序modi.c中,函數(shù)fun的功能是:'根據(jù)形參m的值(2≤m≤9),在m行m列的二維數(shù)組中存放如下所示的數(shù)據(jù),由main()函數(shù)輸出。
    例如,若輸入2    ︳若輸入4
    則輸出:       ︳則輸出:
     1 2     ︳     1 2 3 4
     2 4     ︳     2 4 6 8
          ︳     3 6 9 12
          ︳     4 8 12 16
    請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確結(jié)果。
    注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
    試題程序:
    #include
    #include
    #define M 10
    int a[M][M]={0};
    fun(int **a, int m)
    { int j,k;
    for (j=0;j    for (k=0;k    a[j][k]=k*j;
    }
    main()
    {  int i,j,n;
    clrscr0;
    printf("Enter n:");scanf("%d",&n);
    fun(a,n);
    for(i=0;
    i    {  forO=O;j    print f("%4d",a[i] [j] );
    printf("\n");
    }
    2.程序修改
    【答案】
    (1)錯(cuò)誤:第5行fun(int**a,int m)
    正確:fun(int a[][M],Int m)
    (2)錯(cuò)誤:第9行 a[j][k]=k*j;
    正確:a[j][k]=(k+1)*(j+1);
    【評(píng)析】
    第5行:第二個(gè)形參m是用戶輸入的維數(shù),沒有別的名堂,第一個(gè)形參是為了指明在函數(shù)fun()中要產(chǎn)生的多維數(shù)組,"**a"是不能正確表示一個(gè)多維數(shù)組的,我們應(yīng)當(dāng)使用"int a[M][M]"。
    第9行:循環(huán)體的內(nèi)容是給m維的多維數(shù)組賦值,這個(gè)多維數(shù)組在列方向是由1開始的自然數(shù),在行方向上是行首第一數(shù)的n倍數(shù),顯然,"a[j][k]=k*j;"不符合題意,我們應(yīng)當(dāng)使用"a[j][k]=(k+1)*(j+1);"。
    3.程序設(shè)計(jì)
    已知學(xué)生的記錄由學(xué)號(hào)和學(xué)習(xí)成績構(gòu)成,N名學(xué)生的數(shù)據(jù)已存入a結(jié)構(gòu)體數(shù)組中。請(qǐng)編寫函數(shù)fun,函數(shù)的功能是:找出成績的學(xué)生記錄,通過形參返回主函數(shù)(規(guī)定只有一個(gè)分)。已給出函數(shù)的首部,請(qǐng)完成該函數(shù)。
    請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫的若干語句。
    試題程序:
    #include
    #include
    #include
    #define N 10
    typedef struct ss
    { char num[10];int s;} STU;
    fun(STU a[],STU *s)
    {
    }
    main()
    {STU
    a[N]= { {"A01",81}, {"A02",89}, {"A03",66}, {"A04", 87}, {"A05",77}, {"A06",90}, {"A07",79}, {"A08",61}, {"A09",80 }, {"A10",71 }},m;
    int i;
    elrser();
    printf("***** The original data *****\n");
    for (i=0;i    fun(a,&m);
    printf("***** THE RESULT *****\n");
    printfCThe top : %s, %d\n",m.num,m.s);
    NON0( );
    }
    NON0( )
    {\*本函數(shù)用于打開文件,輸入數(shù)據(jù),調(diào)用函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/
    FILE *rf, *wf;
    STU a[N], m ;
    Int i;
    rf = fopen("bc09.in", "r,) ;
    wf= fopen("bc09.out", "w") ;
    for(i = 0 ; i < 10; i++) fscanf(rf, "%s %d", a[i].num, &a[i].s) ;
    fun(a, &m) ;
    fpr intf (wf, "The top : %s, %d\n", m.num, re.s) ;
    fclose(rf) ;
    fclose(wf) ;
    }
    3.程序設(shè)計(jì)
    【答案】
    fun(STU a[],STU。s)
    {  int i;
    STU  *m;
    re=a;
    for(i=1;i    if(a[i].s>m[0].s) m=&a[i];
    s[0].s=m[0].s;
    strcpy(s[0].Num,m[0].num);/*將m指針中的學(xué)生學(xué)號(hào)復(fù)制給s數(shù)組中的學(xué)號(hào)變量*/
    }
    【評(píng)析】
    從題目的要求來看,我們應(yīng)建立一個(gè)循環(huán)來尋找成績的學(xué)生記錄。我們給出的參考函數(shù)中定義了一個(gè)指針存放學(xué)生記錄中的成績。
    2.程序修改
    給定程序modi.c中,函數(shù)fun的功能是:'根據(jù)形參m的值(2≤m≤9),在m行m列的二維數(shù)組中存放如下所示的數(shù)據(jù),由main()函數(shù)輸出。
    例如,若輸入2    ︳若輸入4
    則輸出:       ︳則輸出:
     1 2     ︳     1 2 3 4
     2 4     ︳     2 4 6 8
          ︳     3 6 9 12
          ︳     4 8 12 16
    請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確結(jié)果。
    注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
    試題程序:
    #include
    #include
    #define M 10
    int a[M][M]={0};
    fun(int **a, int m)
    { int j,k;
    for (j=0;j    for (k=0;k    a[j][k]=k*j;
    }
    main()
    {  int i,j,n;
    clrscr0;
    printf("Enter n:");scanf("%d",&n);
    fun(a,n);
    for(i=0;i    {  forO=O;j    print f("%4d",a[i] [j] );
    printf("\n");
    }
    2.程序修改
    【答案】
    (1)錯(cuò)誤:第5行fun(int**a,int m)
    正確:fun(int a[][M],Int m)
    (2)錯(cuò)誤:第9行 a[j][k]=k*j;
    正確:a[j][k]=(k+1)*(j+1);
    【評(píng)析】
    第5行:第二個(gè)形參m是用戶輸入的維數(shù),沒有別的名堂,第一個(gè)形參是為了指明在函數(shù)fun()中要產(chǎn)生的多維數(shù)組,"**a"是不能正確表示一個(gè)多維數(shù)組的,我們應(yīng)當(dāng)使用"int a[M][M]"。
    第9行:循環(huán)體的內(nèi)容是給m維的多維數(shù)組賦值,這個(gè)多維數(shù)組在列方向是由1開始的自然數(shù),在行方向上是行首第一數(shù)的n倍數(shù),顯然,"a[j][k]=k*j;"不符合題 意,我們應(yīng)當(dāng)使用"a[j][k]=(k+1)*(j+1);"。
    3.程序設(shè)計(jì)
    【答案】
    fun(STU a[],STU。s)
    {  int i;
    STU  *m;
    re=a;
    for(i=1;i    if(a[i].s>m[0].s) m=&a[i];
    s[0].s=m[0].s;
    strcpy(s[0].Num,m[0].num);/*將m指針中的學(xué)生學(xué)號(hào)復(fù)制給s數(shù)組中的學(xué)號(hào)變量*/
    }
    【評(píng)析】
    從題目的要求來看,我們應(yīng)建立一個(gè)循環(huán)來尋找成績的學(xué)生記錄。我們給出的參考函數(shù)中定義了一個(gè)指針存放學(xué)生記錄中的成績。