1. <small id="kntrr"><delect id="kntrr"></delect></small>
    2. <sub id="kntrr"></sub>
        1. <form id="kntrr"><listing id="kntrr"></listing></form>
            江蘇省高校計算機等級考試命題研究院 江蘇省高校計算機等級考試輔導
            全國計算機二級C題庫第51--60套

             

             

            本題目如果下載后發現有錯誤的地方,請聯系網站管理員:QQ121431055

             

            考試時,上機操作題目有三套,基本操作題、簡單應用題、綜合應用題

             

            51套:

            給定程序中,函數fun的功能是:計算出形參s所指字符串中包含的單詞個數,

            作為函數值返回。為便于統計,規定各單詞之間用空格隔開。

            例如,形參s所指的字符串為:This is a C language program.,函數

            的返回值為6。

            請在程序的下劃線處填入正確的內容并把下劃線刪除,使程序得出正確的結

            果。

            注意:源程序存放在考生文件夾下的BLANK1.C中。

             

             

            不得增行或刪行,也不得更改程序的結構!

            給定源程序:

            #include

            int fun(char *s)

            { int n=0, flag=0;

            while(*s!='\0')

            { if(*s!=' ' && flag==0) {

            /**********found**********/

            __1__ ; flag=1;}

            /**********found**********/

            if (*s==' ') flag= __2__ ;

            /**********found**********/

            __3__ ;

            }

            return n;

            }

            main()

            { char str[81]; int n;

            printf("\nEnter a line text:\n"); gets(str);

            n=fun(str);

            printf("\nThere are %d words in this text.\n\n",n);

            }

            解題思路:

            本題是統計字符串中包含的單詞個數。

            第一處:單詞個數用變量n來統計,當當前字母不是空格且flag狀態標志為0時,則單詞數

            就加1,將狀態標志flag置為1,所以應填:n++。

            第二處:當當前字符是空格時,flag狀態標志置0,所以應填:0。

            第三處:到字符串下一個位置,所以應填:s++。

            ***************************************************

            給定程序MODI1.C中函數 fun 的功能是:從n(形參)個學生的成績中統計出低

            于平均分的學生人數,此人數由函數值返回,平均分存放在形參aver所指的存儲單

            元中。

            例如,若輸入 8 名學生的成績:80.5 60 72 90.5 98 51.5 88 64

            則低于平均分的學生人數為: 4 (平均分為:75.5625 )。

            請改正程序中的錯誤,使它能統計出正確的結果。

            注意:不要改動 main 函數,不得增行或刪行,也不得更改程序的結構!

            給定源程序:

            #include

            #define N 20

            int fun ( float *s, int n, float *aver )

            { float ave, t = 0.0 ;

            int count = 0, k, i ;

            for ( k = 0 ; k < n ; k++ )

            /**************found**************/

            t = s[k] ;

            ave = t / n ;

            for ( i = 0 ; i < n ; i++ )

             

             

            if ( s[ i ] < ave ) count++ ;

            /**************found**************/

            *aver = Ave ;

            return count ;

            }

            main()

            { float s[30], aver ;

            int m, i ;

            printf ( "\nPlease enter m: " ) ; scanf ("%d", &m ) ;

            printf ( "\nPlease enter %d mark :\n ", m ) ;

            for( i = 0 ; i < m ; i++ ) scanf ( "%f", s + i ) ;

            printf( "\nThe number of students : %d \n" , fun ( s, m, &aver ) );

            printf( "Ave = %f\n", aver ) ;

            }

            解題思路:

            第一處:應求累加和,而不賦值,所以應改為t+=s[k];。

            第二處:ave不需要取地址,直接賦給*aver就可以了。

            ***************************************************

            請編寫函數fun,其功能是求出數組的最大元素在數組中的下標并存放在k

            指的存儲單元中。

            例如, 輸入如下整數: 876 675 896 101 301 401 980 431 451 777

            則輸出結果為: 6, 980

            注意: 部分源程序在文件PROG1.C文件中。

            請勿改動主函數main和其它函數中的任何內容,僅在函數fun的花括號中填入

            你編寫的若干語句。

            給定源程序:

            #include

            int fun(int *s, int t, int *k)

            {

            }

            main( )

            {

            int a[10]={876,675,896,101,301,401,980,431,451,777}, k ;

            fun(a, 10, &k) ;

            printf("%d, %d\n", k, a[k]) ;

            NONO( ) ;

            }

             

            解題思路:

            本題是考察考生如何在指定的數組找出最大元素值的下標,通過形參*k返回到主程序中。

            給出的程序是使用for循環語句進行處理的,在循環之前,首先把數組的第一個元素值賦給

            最大值變量max,位置pos0,然后通過循環依次判斷下一元素值是否大于最大值max,如果大

            于,那么把這個數重新賦給max,位置i賦給pos,循環結果,即可得到最大值的位置pos,最后

            執行語句*k=pos就可以實現返回了。

            參考答案:

            int fun(int *s, int t, int *k)

            {

            int i, pos = 0, max = *s ;

            for(i = 1 ; i < t ; i++) {

            if(max < *(s + i)) {

            max = *(s + i) ;

            pos = i ;

            }

            }

            *k = pos ;

            }

             

            ※※※※※※※※※※※※※※※※※※※※※※※※※

            52套:

            給定程序中,函數fun的功能是:將N×N矩陣中元素的值按列右移1個位置,

             

             

            右邊被移出矩陣的元素繞回左邊。例如,N=3,有下列矩陣

            1 2 3

            4 5 6

            7 8 9

            計算結果為

            3 1 2

            6 4 5

            9 7 8

            請在程序的下劃線處填入正確的內容并把下劃線刪除,使程序得出正確的結

            果。

            注意:源程序存放在考生文件夾下的BLANK1.C中。

            不得增行或刪行,也不得更改程序的結構!

            給定源程序:

            #include

            #define N 4

            void fun(int (*t)[N])

            { int i, j, x;

            /**********found**********/

            for(i=0; i<___1___; i++)

            {

            /**********found**********/

            x=t[i][___2___] ;

            for(j=N-1; j>=1; j--)

            t[i][j]=t[i][j-1];

            /**********found**********/

            t[i][___3___]=x;

            }

            }

            main()

            { int t[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10}, i, j;

            printf("The original array:\n");

            for(i=0; i

            { for(j=0; jprintf("\n");

            }

            fun(t);

            printf("\nThe result is:\n");

            for(i=0; i

            { for(j=0; jprintf("\n");

            }

            }

            解題思路:

            第一處:函數fun是對N×N矩陣進行操作,for循環的終止值為N。

            第二處:把最后一列的元素值賦值給臨時變量x保存用來交換,所以應填:N-1。

            第三處:第1列元素值使用x替換,由于C語言的下標是從0開始的,所以應填:0。

            ***************************************************

             

             

            例如,若q的值為: 50.0,則函數值為: 49.394948。

            請改正程序中的錯誤,使程序能輸出正確的結果。

            注意:不要改動main函數,不得增行或刪行,也不得更改程序的結構!

            給定源程序:

            #include

            double fun( double q )

            { int n; double s,t;

            n = 2;

            s = 2.0;

            while (s<=q)

            {

            t=s;

            /************found************/

            s=s+(n+1)/n;

            n++;

            }

            printf("n=%d\n",n);

            /************found************/

            return s;

            }

            main ( )

            {

            printf("%f\n", fun(50));

            }

            解題思路:

            第一處:如果兩個整數類型相除,結果仍為整數,所以必須轉換其中一個數的類型,所以

            應改為:s+=(float)(n+1)/n;。

            第二處:返回結果錯誤,應改為:return t;。

            ***************************************************

            編寫函數fun,它的功能是:求Fibonacci數列中大于t的最小的一個數,結果

            由函數返回。其中Fibonacci數列F(n)的定義為:

            F(0)0,F(1)1

            F(n)F(n1)F(n2)

            例如:當t = 1000時,函數值為:1597。

            注意: 部分源程序在文件PROG1.C中。

            請勿改動主函數main和其它函數中的任何內容,僅在函數fun的花括號中填入

            你編寫的若干語句。

            給定源程序:

            #include

            #include

            int fun( int t)

             

             

            {

            }

            main() /* 主函數 */

            { int n;

            n=1000;

            printf("n = %d, f = %d\n",n, fun(n));

            NONO();

            }

             

            解題思路:

            本題是考察考生用遞推算法來求出斐波那契數列中每項的值。給出的程序就是用變量f、f0

            f1來表示遞推的過程,給變量f0f1最初分別置數列中第1項和第2項的值01,然后進入循

            環,執行語句f=f0+f1;將所得和值存入f中,這就是數列的第3項,把f1的值移入f0中,將f

            值移入f1中,為求數列的下一列作好準備;接著進入下一次循環,通過語句f=f0+f1求得數列的

            4項,不斷重復以上步驟,每重復一次就依次求得數列的下一項,直至某項滿足要為止。

            參考答案:

            int fun( int t)

            {

            int f0 = 0, f1 = 1, f ;

            do {

            f = f0 + f1 ;

            f0 = f1 ;

            f1 = f ;

            } while(f < t) ;

            return f ;

            }

             

            ※※※※※※※※※※※※※※※※※※※※※※※※※

            53套:

            函數fun的功能是:計算

            請在程序的下劃線處填入正確的內容并把下劃線刪除,使程序得出正確的結

            果。

            注意:源程序存放在考生文件夾下的BLANK1.C中。

            不得增行或刪行,也不得更改程序的結構!

            給定源程序:

            #include

            #include

            double fun(double x)

            { double f, t; int n;

            f = 1.0 + x;

            /**********found**********/

            t = ___1___;

            n = 1;

            do {

            n++;

            /**********found**********/

            t *= (-1.0)*x/___2___;

            f += t;

            }

            /**********found**********/

            while (___3___ >= 1e-6);

            return f;

            }

             

             

            main()

            { double x, y;

            x=2.5;

            y = fun(x);

            printf("\nThe result is :\n");

            printf("x=%-12.6f y=%-12.6f\n", x, y);

            }

            解題思路:

            第一處:根據公式可知,變量t的值為x。

            第二處:根據公式可知,此處應該除以n,所以應填:n。

            第三處:根據試題中條件的要求,所以應填:fabs(t)。

            ***************************************************

            給定程序MODI1.C中函數fun的功能是: 求整數xy次方的低3位值。例如,

            56次方為15625, 此值的低3位值為625。

            請改正函數fun中指定部位的錯誤, 使它能得出正確的結果。

            注意: 不要改動main函數, 不得增行或刪行, 也不得更改程序的結構!

            給定源程序:

            #include

            long fun(int x,int y,long *p )

            { int i;

            long t=1;

            /**************found**************/

            for(i=1; i

            t=t*x;

            *p=t;

            /**************found**************/

            t=t/1000;

            return t;

            }

            main()

            { long t,r; int x,y;

            printf("\nInput x and y: "); scanf("%ld%ld",&x,&y);

            t=fun(x,y,&r);

            printf("\n\nx=%d, y=%d, r=%ld, last=%ld\n\n",x, y,r,t );

            }

            解題思路:

            第一處:錯誤在for循環語句上,根據試題要求,終止條件應該是i<=y。

            第二處:要取低3位的值時,應模1000取余數,而不是整除1000取商。

            ***************************************************

            例如, 在主函數中從鍵盤給x輸入0.21,輸出為:s=1.100000。

            注意: 部分源程序在文件PROG1.C中。

             

             

            請勿改動主函數main和其他函數中的任何內容, 僅在函數fun

            花括號中填入你編寫的若干語句。

            給定源程序:

            #include

            #include

            double fun(double x)

            {

            }

            main()

            { double x,s;

            printf("Input x: "); scanf("%lf",&x);

            s=fun(x);

            printf("s=%f\n",s);

            NONO();

            }

            解題思路:

            本題是根據給定的公式進行計算。具體操作請看答案程序中的說明。

            參考答案:

            double fun(double x)

            {

            int n=1; /* 循環計數*/

            double sn=1; /* 累計數*/

            double xn=1,xn1=0; /*xn,以及xn-1;*/

            while(fabs(xn-xn1)>=0.000001)/*絕對值是否滿足條件*/

            {

            xn=xn*x*(0.5-n+1)/n; /*表達式分解以后xn=(xn-1)*x*(0.5-n+1)/n*/

            n+=1;

            sn+=xn; /*sn累加上xn*/

            }

            return(sn);

            }

             

            ※※※※※※※※※※※※※※※※※※※※※※※※※

            54套:

            給定程序中,函數fun的功能是:計算出帶有頭結點的單向鏈表中各結點數據

            域中值之和作為函數值返回。

            請在程序的下劃線處填入正確的內容并把下劃線刪除,使程序得出正確的結

            果。

            注意:源程序存放在考生文件夾下的BLANK1.C中。

            不得增行或刪行,也不得更改程序的結構!

            給定源程序:

            #include

            #include

            #define N 8

            typedef struct list

            { int data;

            struct list *next;

            } SLIST;

            SLIST *creatlist(int *);

            void outlist(SLIST *);

            int fun( SLIST *h)

            { SLIST *p; int s=0;

            p=h->next;

            while(p)

            {

            /**********found**********/

            s+= p->___1___;

            /**********found**********/

            p=p->___2___;

            }

            return s;

            }

             

             

             

             

            main()

            { SLIST *head;

            int a[N]={12,87,45,32,91,16,20,48};

            head=creatlist(a); outlist(head);

            /**********found**********/

            printf("\nsum=%d\n", fun(___3___));

            }

            SLIST *creatlist(int a[])

            { SLIST *h,*p,*q; int i;

            h=p=(SLIST *)malloc(sizeof(SLIST));

            for(i=0; i

            { q=(SLIST *)malloc(sizeof(SLIST));

            q->data=a[i]; p->next=q; p=q;

            }

            p->next=0;

            return h;

            }

            void outlist(SLIST *h)

            { SLIST *p;

            p=h->next;

            if (p==NULL) printf("The list is NULL!\n");

            else

            { printf("\nHead ");

            do

            { printf("->%d", p->data); p=p->next; }

            while(p!=NULL);

            printf("->End\n");

            }

            }

            解題思路:

            本題是計算出帶有頭結點的單向鏈表中各結點數據域中值之和。

            第一處:累加數據域中的值,所以應填:data。

            第二處:指定p的下一個指針,所以應填:next。

            第三處:函數調用,在主函數中已經給出了head,所以應填:head。

            ***************************************************

            給定程序MODI1.C中函數fun的功能是:s所指字符串中出現的與t1所指字符

            串相同的子串全部替換成t2所指字符串,所形成的新串放在w所指的數組中。在此

            處,要求t1t2所指字符串的長度相同。

            例如,當s所指字符串中的內容為:"abcdabfab",t1所指子串中的內容為:

            "ab",t2所指子串中的內容為:"99"時, 結果在w所指的數組中的內容應為:

            "99cd99f99"。

            請改正程序中的錯誤,使它能得出正確的結果。

            注意:不要改動main函數,不得增行或刪行,也不得更改程序的結構!

            給定源程序:

            #include

            #include

            int fun (char *s, char *t1, char *t2 , char *w)

             

             

             

             

            {

            int i; char *p , *r, *a;

            strcpy( w, s );

            while ( *w )

            { p = w; r = t1;

            /************found************/

            while ( r )

            if ( *r == *p ) { r++; p++; }

            else break;

            if ( *r == '\0' )

            { a = w; r = t2;

            while ( *r ){

            /************found************/

            *a = *r; a++; r++

            }

            w += strlen(t2) ;

            }

            else w++;

            }

            }

            main()

            {

            char s[100], t1[100], t2[100], w[100];

            printf("\nPlease enter string S:"); scanf("%s", s);

            printf("\nPlease enter substring t1:"); scanf("%s", t1);

            printf("\nPlease enter substring t2:"); scanf("%s", t2);

            if ( strlen(t1)==strlen(t2) ) {

            fun( s, t1, t2, w);

            printf("\nThe result is : %s\n", w);

            }

            else printf("Error : strlen(t1) != strlen(t2)\n");

            }

            解題思路:

            第一處:判斷字符串當前字符是否是字符串結束符,所以應改為:while(*r)。

            第二處:語句后缺少分號。

            ***************************************************

            函數fun的功能是:將s所指字符串中下標為偶數的字符刪除,串中剩余字符

            形成的新串放在t所指數組中。

            例如,當s所指字符串中的內容為:"ABCDEFGHIJK",

            t所指數組中的內容應是:"BDFHJ"。

            注意: 部分源程序存在文件PROG1.C中。

            請勿改動主函數main和其它函數中的任何內容,僅在函數fun的花括號中填入

            你編寫的若干語句。

            給定源程序:

            #include

            #include

            void fun(char *s, char t[])

             

             

             

             

            {

            }

            main()

            {

            char s[100], t[100];

            printf("\nPlease enter string S:"); scanf("%s", s);

            fun(s, t);

            printf("\nThe result is: %s\n", t);

            NONO();

            }

             

            解題思路:

            本題是從一個字符串按要求生成另一個新的字符串。我們使用for循環語句來解決這個問

            題。

            參考答案:

            void fun(char *s, char t[])

            {

            int i, j = 0 ;

            for(i = 1 ; i < strlen(s); i+=2) t[j++] = s[i] ;

            t[j] = 0 ;

            }

             

            ※※※※※※※※※※※※※※※※※※※※※※※※※

            55套:

            給定程序中,函數fun的功能是:判斷形參s所指字符串是否是"回文"

            Palindrome),若是,函數返回值為1;不是,函數返回值為0。"回文"

            是正讀和反讀都一樣的字符串(不區分大小寫字母)。

            例如,LEVELLevel"回文",而LEVLEV不是"回文"。

            請在程序的下劃線處填入正確的內容并把下劃線刪除, 使程序得出正確的結

            果。

            注意:源程序存放在考生文件夾下的BLANK1.C中。

            不得增行或刪行,也不得更改程序的結構!

            給定源程序:

            #include

            #include

            #include

            int fun(char *s)

            { char *lp,*rp;

            /**********found**********/

            lp= __1__ ;

            rp=s+strlen(s)-1;

            while((toupper(*lp)==toupper(*rp)) && (lp

            /**********found**********/

            lp++; rp __2__ ; }

            /**********found**********/

            if(lp

            else return 1;

            }

            main()

            { char s[81];

            printf("Enter a string: "); scanf("%s",s);

            if(fun(s)) printf("\n\"%s\" is a Palindrome.\n\n",s);

            else printf("\n\"%s\" isn't a Palindrome.\n\n",s);

            }

            解題思路:

            本題是判斷字符串是否是“回文”。

             

             

             

             

            第一處:根據函數體fun中,對變量lp的使用可知,lp應指向形參s,所以應填:s。

            第二處:rp是指向字符串的尾指針,當每做一次循環rp指向就要指向前一個字符,所以應

            填:--。

            第三處:當lprp相等時,則表示字符串是回文并返回1,否則就返回0,所以應填:return

            0。

            ***************************************************

            給定程序MODI1.Cfun函數的功能是:求出以下分數序列的前n項之和。

            2 3 5 8 13 21

            ┄┄ , ┄┄ , ┄┄ , ┄┄ , ┄┄ , ┄┄ , ……

            1 2 3 5 8 13

            和值通過函數值返回main函數。

            例如,若 n = 5,則應輸出: 8.391667。

            請改正程序中的錯誤,使它能得出正確的結果。

            注意:不要改動 main 函數,不得增行或刪行,也不得更改程序的結構!

            給定源程序:

            #include

            /**************found**************/

            fun (int n )

            { int a = 2, b = 1, c, k ;

            double s=0.0 ;

            for ( k = 1; k <= n; k++ )

            { s = s + 1.0 * a / b ;

            /**************found**************/

            c = a; a += b; b += c;

            }

            return(s) ;

            }

            main( )

            { int n = 5 ;

            printf( "\nThe value of function is: %lf\n", fun ( n ) ) ;

            }

            解題思路:

            第一處:由于計算的實型值要通過函數返回,所以必須定義函數的返回類型,只要intvoid

            可以省略,其他都要定義類型。由于返回是實型值,所以應在數名前加上doublefloat等定義。

            第二處:根據公式可知,在for循環內b的值應是c。

            ***************************************************

            請編寫函數fun,函數的功能是:將大于形參m且緊靠mk個素數存入xx所指

            的數組中。例如,若輸入17, 5,則應輸出:19, 23, 29, 31, 37。函數fun中給

            出的語句僅供參考。

            注意: 部分源程序在文件PROG1.C文件中。

            請勿改動主函數main和其它函數中的任何內容,僅在函數fun的花括號中填入

            你編寫的若干語句。

            給定源程序:

            #include

            void fun(int m, int k, int xx[])

            {

            /* 以下代碼僅供參考 */

             

             

             

             

            int i, j=1, t=m+1;

            while(j<=k)

            {

            /* 以下完成判斷素數,并存放到數組xx */

            }

            }

            main()

            {

            int m, n, zz[1000] ;

            printf( "\nPlease enter two integers:") ;

            scanf("%d%d", &m, &n ) ;

            fun( m, n, zz) ;

            for( m = 0 ; m < n ; m++ )

            printf("%d ", zz[m]) ;

            printf("\n") ;

            NONO( ) ;

            }

             

            解題思路:

            本題是考察考生如何判斷一個數是素數,再判斷所求出的素數是否符合題義要求,如果符

            合,則存入指定的數組xx中保存,最后由形參xx返回。

            本題是用while循環語句分別求出5個符合題義的素數。其中,j是控制變量,m是所求素數

            要大于這個數且還要緊靠這個數,k是所求素數的個數,j是當前所求第幾個素數。其中while

            循環體中的for循環語句是判斷t是否是素數。

            參考答案:

            void fun(int m, int k, int xx[])

            {

            /* 以下代碼僅供參考 */

            int i, j=1, t=m+1;

            while(j<=k)

            {

            /* 以下完成判斷素數,并存放到數組xx */

             

             

             

             

            for(i = 2 ; i < t; i++)

            if(t % i==0) break;

            if(i==t) {

            xx[j-1] = i;

            j++;

            }

            t++;

            }

            }

            }

             

            ※※※※※※※※※※※※※※※※※※※※※※※※※

            56套:

            給定程序的功能是:從鍵盤輸入若干行文本(每行不超過80個字符),寫到

            文件myfile4.txt,-1作為字符串輸入結束的標志。然后將文件的內容讀出顯

            示在屏幕上。文件的讀寫分別由自定義函數ReadTextWriteText實現。

            請在程序的下劃線處填入正確的內容并把下劃線刪除,使程序得出正確的結

            果。

            注意:源程序存放在考生文件夾下的BLANK1.C中。

            不得增行或刪行,也不得更改程序的結構!

            給定源程序:

            #include

             

             

             

             

            #include

            #include

            void WriteText(FILE *);

            void ReadText(FILE *);

            main()

            { FILE *fp;

            if((fp=fopen("myfile4.txt","w"))==NULL)

            { printf(" open fail!!\n"); exit(0); }

            WriteText(fp);

            fclose(fp);

            if((fp=fopen("myfile4.txt","r"))==NULL)

            { printf(" open fail!!\n"); exit(0); }

            ReadText(fp);

            fclose(fp);

            }

            /**********found**********/

            void WriteText(FILE ___1___)

            { char str[81];

            printf("\nEnter string with -1 to end :\n");

            gets(str);

            while(strcmp(str,"-1")!=0) {

            /**********found**********/

            fputs(___2___,fw); fputs("\n",fw);

            gets(str);

            }

            }

            void ReadText(FILE *fr)

            { char str[81];

            printf("\nRead file and output to screen :\n");

            fgets(str,81,fr);

            while( !feof(fr) ) {

            /**********found**********/

            printf("%s",___3___);

            fgets(str,81,fr);

            }

            }

            解題思路:

            本題要求是把鍵盤上輸入的內容寫到指定的文件中。程序中共有三處要填上適當的內容,

            使程序能運行出正確的結果。

            第一處:要求填寫文件流的自變量名,在這個函數中,已有的語句fputs("\n",fw);分析可

            知:由于文件流變量fw在函數體沒有定義過,所以本處應填*fwfw[]。

            第二處:通過while循環語句,把鍵盤上輸入的內容,要寫入到指定的文件中,鍵盤上輸入

            的內容已存入字符串str變量中,因此,本處應填寫str。

            第三處:要把已存入文件中的內容,再從文件中讀出且已存入字符串變量str中,最后在屏

            幕顯示出來,因此,此處應填寫str。

            ***************************************************

            給定程序MODI1.C中函數fun的功能是:從低位開始取出長整型變量s中奇數位

             

             

             

             

            上的數,依次構成一個新數放在t中。高位仍在高位,低位仍在低位。

            例如,當s中的數為:7654321時,t中的數為:7531。

            請改正程序中的錯誤,使它能得出正確的結果。

            注意:不要改動main函數,不得增行或刪行,也不得更改程序的結構!

            給定源程序:

            #include

            /************found************/

            void fun (long s, long t)

            { long sl=10;

            *t = s % 10;

            while ( s > 0)

            { s = s/100;

            *t = s * sl + *t;

            /************found************/

            \TAB sl = sl*100;

            }

            }

            main()

            { long s, t;

            printf("\nPlease enter s:"); scanf("%ld", &s);

            fun(s, &t);

            printf("The result is: %ld\n", t);

            }

            解題思路:

            第一處:在函數fun中使用了*t,但在函數定義時沒有使用*t,所以應改為:void fun(long

            s,long *t)。

            第二處:每循環一次,sl的值就乘以10,所以應改為:sl=sl*10;。

            ***************************************************

            函數fun的功能是:將兩個兩位數的正整數a、b合并形成一個整數放在c中。

            合并的方式是:將a數的十位和個位數依次放在c數的個位和百位上, b數的十位

            和個位數依次放在c數的千位和十位上。

            例如,當a45,b=12時,調用該函數后,c=1524。

            注意: 部分源程序存在文件PROG1.C中。數據文件IN.DAT中的數據不得修改。

            請勿改動主函數main和其它函數中的任何內容,僅在函數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();

             

             

             

             

            }

             

            解題思路:

            本題是給出兩個兩位數的正整數分別取出各位上的數字,再按條件組成一個新數。

            a十位數字的方法:a/10

            a個位數字的方法:a

            參考答案:

            void fun(int a, int b, long *c)

            {

            *c=(b/10)*1000+(a)*100+(b)*10+(a/10);

            }

             

            ※※※※※※※※※※※※※※※※※※※※※※※※※

            57套:

            函數fun的功能是:把形參a所指數組中的最小值放在元素a[0]中,接著把

            形參a所指數組中的最大值放在a[1]元素中;再把a所指數組元素中的次小值放

            a[2]中,把a所指數組元素中的次大值放在a[3];其余以此類推。例如:若a

            所指數組中的數據最初排列為:9、1、4、2、3、6、5、8、7;則按規則移動

            后,數據排列為:1、9、2、8、3、7、4、6、5。形參n中存放a所指數組中數

            據的個數。

            注意:規定fun函數中的max存放當前所找的最大值,px存放當前所找最大

            值的下標。

            請在程序的下劃線處填入正確的內容并把下劃線刪除,使程序得出正確的結

            果。

            注意:源程序存放在考生文件夾下的BLANK1.C中。

            不得增行或刪行,也不得更改程序的結構!

            給定源程序:

            # include

            #define N 9

            void fun(int a[], int n)

            { int i,j, max, min, px, pn, t;

            for (i=0; i

            {

            /**********found**********/

            max = min = ___1___;

            px = pn = i;

            for (j=i+1; j

            /**********found**********/

            if (max<___2___)

            { max = a[j]; px = j; }

            /**********found**********/

            if (min>___3___)

            { min = a[j]; pn = j; }

            }

            if (pn != i)

            { t = a[i]; a[i] = min; a[pn] = t;

            if (px == i) px =pn;

            }

            if (px != i+1)

            { t = a[i+1]; a[i+1] = max; a[px] = t; }

            }

            }

            main()

            { int b[N]={9,1,4,2,3,6,5,8,7}, i;

            printf("\nThe original data :\n");

            for (i=0; iprintf("\n");

            fun(b, N);

            printf("\nThe data after moving :\n");

             

             

             

             

            for (i=0; iprintf("\n");

            }

            解題思路:

            第一處:外循環每循環一次均把數組a當前位置的值,分別賦值給maxmin變量,所以應填:

            a[i]。

            第二處:判斷max是否小于a[j],若小于,則把a[j]賦值給max,所以應填:a[j]。

            第三處:判斷min是否大于a[j],若大于,則把a[j]賦值給min,所以應填:a[j]。

            ***************************************************

            給定程序MODI1.C中函數fun的功能是:用遞歸算法計算斐波拉契數列中第n

            項的值。從第1項起,斐波拉契數列為:1、1、2、3、5、8、13、21、……

            例如,若給n輸入7,該項的斐波拉契數值為:13。

            請改正程序中的錯誤,使它能得出正確結果。

            注意:不要改動main函數,不得增行或刪行,也不得更改程序的結構。

            給定源程序:

            #include

            long fun(int g)

            {

            /**********found**********/

            switch(g);

            { case 0: return 0;

            /**********found**********/

            case 1 ;case 2 : return 1 ;

            }

            return( fun(g-1)+fun(g-2) );

            }

            main()

            { long fib; int n;

            printf("Input n: "); scanf("%d",&n); printf("n = %d\n",n);

            fib=fun(n);

            printf("fib = %d\n\n",fib);

            }

            解題思路:

            第一處:switch后有多余的分號。

            第二處:case 1后沒有返回語句,也應該為return 1;。所以應改為:case 1: return 1; case

            2:return 1;。

            ***************************************************

            某學生的記錄由學號、8門課程成績和平均分組成,學號和8門課程的成績已

            在主函數中給出。請編寫函數fun,它的功能是:求出該學生的平均分放在記錄的

            ave成員中。

            例如,學生的成績是:85.5,76,69.5,85,91,72,64.5,87.5,他的平均分應當

            是:78.875。

            注意: 部分源程序在文件PROG1.C中。

            請勿改動主函數main和其它函數中的任何內容,僅在函數fun部位中填入你編

            寫的若干語句。

            給定源程序:

            #include

             

             

             

             

            #define N 8

            typedef struct

            { char num[10];

            double s[N];

            double ave;

            } STREC;

            void fun(STREC *a)

            {

            }

            main()

            { STREC s={"GA005",85.5,76,69.5,85,91,72,64.5,87.5};

            int i;

            fun( &s );

            printf("The %s's student data:\n", s.num);

            for(i=0;i

            printf("%4.1f\n",s.s[i]);

            printf("\nave=%7.3f\n",s.ave);

            NONO();

            }

             

            解題思路:

            本題是求記錄結構中學生課程成績的平均值,其結果仍放在該記錄結構中。

            參考答案:

            void fun(STREC *a)

            {

            int i ;

            for(i = 0 ; i < N ; i++)

            a->ave = a->ave + a->s[i] ;

            a->ave /= N ;

            }

             

            ※※※※※※※※※※※※※※※※※※※※※※※※※

            58套:

            給定程序中,函數fun的功能是:把形參s所指字符串中最右邊的n個字符復制

            到形參t所指字符數組中,形成一個新串。若s所指字符串的長度小于n,則將整個

             

             

             

             

            字符串復制到形參t所指字符數組中。

            例如,形參s所指的字符串為:abcdefgh,n的值為5,程序執行后t所指字符數

            組中的字符串應為:defgh。

            請在程序的下劃線處填入正確的內容并把下劃線刪除, 使程序得出正確的結

            果。

            注意:源程序存放在考生文件夾下的BLANK1.C中。

            不得增行或刪行,也不得更改程序的結構!

            給定源程序:

            #include

            #include

            #define N 80

            void fun(char *s, int n, char *t)

            { int len,i,j=0;

            len=strlen(s);

            /**********found**********/

            if(n>=len) strcpy(__1__);

            else {

            /**********found**********/

            for(i=len-n; i<=len-1; i++) t[j++]= __2__ ;

            /**********found**********/

            t[j]= __3__ ;

            }

            }

            main()

            { char s[N],t[N]; int n;

            printf("Enter a string: ");gets(s);

            printf( "Enter n:"); scanf("%d",&n);

            fun(s,n,t);

            printf("The string t : "); puts(t);

            }

            解題思路:

            本題是根據要求來復制字符串。

            第一處:當給定的長度n大于該字符串s的長度,那么把該字符串直接拷貝到t就可以了,所

            以應填:t,s。

            第二處:使用for循環語句,把最右邊n個字符依次添加到t中,所以應填:s[i]。

            第三處:字符串操作結束,需要到t加一個字符串結束符,所以應填:'\0'。

            ***************************************************

            給定程序MODI1.C中函數fun的功能是:找出一個大于形參m且緊隨m的素數,

            并作為函數值返回。

            請改正程序中的錯誤,使它能得出正確的結果。

            注意:不要改動main函數,不得增行或刪行,也不得更改程序的結構!

            給定源程序:

            #include

            int fun(int m)

            { int i, k ;

            for (i = m + 1 ; ; i++) {

            for (k = 2 ; k < i ; k++)

             

             

             

             

            /**************found**************/

            if (i % k != 0)

            break ;

            /**************found**************/

            if (k < i)

            return(i);

            }

            }

            void main()

            {

            int n ;

            n = fun(20) ;

            printf("n=%d\n", n) ;

            }

            解題思路:

            第一處:判斷素數的條件是一個數i除自身或1除外不被任何數k整除的數,如果一個數i

            另一個數k取模,模值等于零,那么這個不是素數并退出循環體,所以應改為if(i%k==0)。

            第二處:如果i不被循環中任一個k值不整除,那么循環結束后k的值應該等于i,所以應改

            if(k==i)if(k>=i)也可以。

            ***************************************************

            請編寫函數fun,它的功能是:求出能整除形參x且不是偶數的各整數,并按從

            小到大的順序放在pp所指的數組中,這些除數的個數通過形參n返回。

            例如,若 x 中的值為: 35,則有 4 個數符合要求,它們是: 1, 5, 7, 35。

            注意: 部分源程序在文件PROG1.C文件中。

            請勿改動主函數main和其它函數中的任何內容,僅在函數fun的花括號中填入

            你編寫的若干語句。

            給定源程序:

            #include

            void fun ( int x, int pp[], int *n )

            {

            }

            main( )

            { int x, aa[1000], n, i ;

            printf( "\nPlease enter an integer number:\n" ) ; scanf("%d", &x) ;

            fun(x, aa, &n ) ;

            for( i = 0 ; i < n ; i++ )

            printf("%d ", aa[i]) ;

            printf("\n") ;

            NONO( ) ;

            }

             

            解題思路:

            本題是求出能整除形參x且不是偶數的各整數,并按從小到大的順序放在pp所指的數組中,

            這些除數的個數通過形參n返回。

            參考答案:

            void fun ( int x, int pp[], int *n )

            {

            int i;

            *n=0;

            for(i=1; i <= x; i++)

            if((x % i== 0) && (i % 2)) pp[(*n)++]=i;

            }

             

            ※※※※※※※※※※※※※※※※※※※※※※※※※

            59套:

            給定程序中,函數fun的功能是:在3×4的矩陣中找出在行上最大、在列上最

            小的那個元素,若沒有符合條件的元素則輸出相應信息。

            例如,有下列矩陣:

            1 2 13 4

            7 8 10 6

             

             

             

             

            3 5 9 7

            程序執行結果為:find: a[2][2]=9

            請在程序的下劃線處填入正確的內容并把下劃線刪除, 使程序得出正確的結

            果。

            注意:源程序存放在考生文件夾下的BLANK1.C中。

            不得增行或刪行,也不得更改程序的結構!

            給定源程序:

            #include

            #define M 3

            #define N 4

            void fun(int (*a)[N])

            { int i=0,j,find=0,rmax,c,k;

            while( (i

            { rmax=a[i][0]; c=0;

            for(j=1; j

            if(rmax

            /**********found**********/

            rmax=a[i][j]; c= __1__ ; }

            find=1; k=0;

            while(k

            /**********found**********/

            if (k!=i && a[k][c]<=rmax) find= __2__ ;

            k++;

            }

            if(find) printf("find: a[%d][%d]=%d\n",i,c,a[i][c]);

            /**********found**********/

            __3__ ;

            }

            if(!find) printf("not found!\n");

            }

            main()

            { int x[M][N],i,j;

            printf("Enter number for array:\n");

            for(i=0; i

            for(j=0; j

            printf("The array:\n");

            for(i=0; i

            { for(j=0; jprintf("\n\n");

            }

            fun(x);

            }

            解題思路:

            本題是在矩陣中找出在行上最大、在列上最小的那個元素。

            第一處:找出行上最大的數,并該位置j(列)保存在c中,所以應填:j。

            第二處:使用while循環語句和控制變量find,如果該數不是列是最小數,那么把find0,

            所以應填:0。

             

             

             

             

            第三處:iwhile的控制變量,所以每做一次循環,該數均要加1,所以應填:i++。

            ***************************************************

            給定程序MODI1.C中函數fun的功能是:根據整型形參m的值,計算如下公式的

            值。

            1 1 1

            t = 1 - ----- - ----- - …… - -----

            2*2 3*3 m*m

            例如,若 m 中的值為: 5,則應輸出: 0.536389。

            請改正程序中的錯誤,使它能得出正確的結果。

            注意:不要改動main函數,不得增行或刪行,也不得更改程序的結構!

            給定源程序:

            #include

            double fun ( int m )

            { double y = 1.0 ;

            int i ;

            /**************found**************/

            for(i = 2 ; i < m ; i++)

            /**************found**************/

            y -= 1 /(i * i) ;

            return( y ) ;

            }

            main( )

            { int n = 5 ;

            printf( "\nThe result is %lf\n", fun ( n ) ) ;

            }

            解題思路:

            第一處:使用for循環計算公式,必須計算到m,所以應改為for(i=2; i<=m; i++)。

            第二處:在除法運算中,如果除數和被除數都是整數,所么所除結果也是整數,因此應改

            y-=1./(i*i)。

            ***************************************************

            m個人的成績存放在score數組中,請編寫函數fun,它的功能是:將低于平均

            分的人數作為函數值返回,將低于平均分的分數放在below所指的數組中。

            例如,當score數組中的數據為:10、20、30、40、50、60、70、80、90時,

            函數返回的人數應該是4, below中的數據應為: 10、20、30、40。

            注意: 部分源程序在文件PROG1.C文件中。

            請勿改動主函數main和其它函數中的任何內容,僅在函數fun的花括號中填入

            你編寫的若干語句。

            給定源程序:

            #include

            #include

            int fun(int score[], int m, int below[])

            {

            }

            main( )

            { int i, n, below[9] ;

            int score[9] = {10, 20, 30, 40, 50, 60, 70, 80, 90} ;

            n = fun(score, 9, below) ;

             

             

             

             

            printf( "\nBelow the average score are: " ) ;

            for (i = 0 ; i < n ; i++) printf("%d ", below[i]) ;

            NONO() ;

            }

             

            解題思路:

            本題是計算平均成績,再把低于平均成績的分數存入依次數組below中。

            參考答案:

            int fun(int score[], int m, int below[])

            {

            float av=0.0 ;

            int i, j=0 ;

            for(i=0; i

            av /= m;

            for(i=0; i

            if(av>score[i]) below[j++]=score[i];

            return j;

            }

             

            ※※※※※※※※※※※※※※※※※※※※※※※※※

            60套:

            給定程序中,函數fun的功能是:將形參指針所指結構體數組中的三個元素按

            num成員進行升序排列。

            請在程序的下劃線處填入正確的內容并把下劃線刪除,使程序得出正確的結

            果。

            注意:源程序存放在考生文件夾下的BLANK1.C中。

            不得增行或刪行,也不得更改程序的結構!

            給定源程序:

            #include

            typedef struct

            { int num;

            char name[10];

            }PERSON;

            /**********found**********/

            void fun(PERSON ___1___)

            {

            /**********found**********/

            ___2___ temp;

            if(std[0].num>std[1].num)

            { temp=std[0]; std[0]=std[1]; std[1]=temp; }

            if(std[0].num>std[2].num)

            { temp=std[0]; std[0]=std[2]; std[2]=temp; }

            if(std[1].num>std[2].num)

            { temp=std[1]; std[1]=std[2]; std[2]=temp; }

            }

            main()

            { PERSON std[ ]={ 5,"Zhanghu",2,"WangLi",6,"LinMin" };

            int i;

            /**********found**********/

            fun(___3___);

            printf("\nThe result is :\n");

            for(i=0; i<3; i++)

            printf("%d,%s\n",std[i].num,std[i].name);

            }

            解題思路:

            本題是要求對結構體數組中的三個元素按num成員升序排列。

             

             

             

             

            第一處:由于在函數體fun中,已經使用了std變量,所以應填:*std。

            第二處:由于temp是存放交換記錄的中間變量,所以應填:PERSON。

            第三處:函數的調用,所以應填:std。

            ***************************************************

            給定程序MODI1.C中函數fun的功能是: m1m10)個字符串連接起來,

            組成一個新串,放入pt所指存儲區中。

            例如:把3個串:"abc","CD","EF"連接起來,結果是 "abcCDEF"。

            請改正程序中的錯誤,使它能得出正確的結果。

            注意:不要改動 main 函數,不得增行或刪行,也不得更改程序的結構!

            給定源程序:

            #include

            #include

            int fun ( char str[][10], int m, char *pt )

            {

            /************found************/

            Int k, q, i ;

            for ( k = 0; k < m; k++ )

            { q = strlen ( str [k] );

            for (i=0; i

            /************found************/

            pt[i] = str[k,i] ;

            pt += q ;

            pt[0] = 0 ;

            }

            }

            main( )

            { int m, h ;

            char s[10][10], p[120] ;

            printf( "\nPlease enter m:" ) ;

            scanf("%d", &m) ; gets(s[0]) ;

            printf( "\nPlease enter %d string:\n", m ) ;

            for ( h = 0; h < m; h++ ) gets( s[h]) ;

            fun(s, m, p) ;

            printf( "\nThe result is : %s\n", p) ;

            }

            解題思路:

            第一處:保留字int錯寫成Int。

            第二處:字符數組的字符串書寫格式錯誤。

            ***************************************************

            程序定義了N×N的二維數組,并在主函數中自動賦值。請編寫函數

            fun( int a[][N]),函數的功能是:使數組左下三角元素中的值全部置成0 。

            例如:a 數組中的值為

            | 1 9 7 | | 0 9 7 |

            a = | 2 3 8 | 則返回主程序后a數組中的值應為 | 0 0 8 |

            | 4 5 6 | | 0 0 0 |

            注意: 部分源程序存在文件PROG1.C中。

            請勿改動主函數main和其它函數中的任何內容,僅在函數fun的花括號中填入

             

             

             

             

            你編寫的若干語句。

            給定源程序:

            #include

            #include

            #define N 5

            int fun ( int a[][N] )

            {

            }

            main ( )

            { int a[N][N], i, j;

            printf("***** The array *****\n");

            for ( i =0; i

            { for ( j =0; j

            { a[i][j] = rand(); printf( "M", a[i][j] ); }

            printf("\n");

            }

            fun ( a );

            printf ("THE RESULT\n");

            for ( i =0; i

            { for ( j =0; j

            printf("\n");

            }

            NONO( );

            }

             

            解題思路:

            本題是利用兩重循環給二維數組左下三角元素中的值全部置成0。

            參考答案:

            int fun ( int a[][N] )

            {

            int i, j;

            for(i = 0 ; i < N ; i++)

            for(j = 0 ; j <= i; j++)

            a[i][j] = 0 ;

            }

            国产在线精品一区二区三区不卡_亚洲第一极品精品无码_永久免费无码网站在线观看_亚洲av综合日韩