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

             

             

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

             

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

             

            91套:

            函數fun的功能是:計算

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

            果。

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

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

            給定源程序:

            #include

            #include

            double fun(double x)

            { double f, t; int n;

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

            f = 1.0+___1___;

            t = x;

            n = 1;

            do {

            n++;

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

            t *= x/___2___;

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

            f += ___3___;

            } while (fabs(t) >= 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);

            }

            解題思路:

            第一處:根據公式可知,此處應填:x。

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

            第三處:計算的結果進行累加并賦值給變量f,所以應填:t。

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

            給定程序MODI1.C中函數fun的功能是: 計算n5次方的值(規定n的值大于2、

            小于8),通過形參指針傳回主函數;并計算該值的個位、十位、百位上數字之和

            作為函數值返回。

            例如,75次方是16807, 其低3位數的和值是15。

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

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

            給定源程序:

            #include

            #include

            int fun( int n ,int *value )

            { int d,s,i;

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

            d=0; s=0;

            for(i=1; i<=5; i++) d=d*n;

            *value=d;

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

            { s=s+d;

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

            d=d\10;

            }

            return s;

            }

            main()

            { int n, sum, v;

            do

            { printf("\nEnter n( 2

            while(n<=2||n>=8);

            sum=fun( n,&v );

            printf("\n\nThe result:\n value=%d sum=%d\n\n",v,sum);

            }

            解題思路:

            第一處:變量d的初始值應為1。

            第二處:整除的符號是/。

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

            請編寫函數fun, 其功能是: 計算并輸出給定數組(長度為9)中每相鄰兩個元

            素之平均值的平方根之和。

            例如, 給定數組中的9個元素依次為12.0、34.0、4.0、23.0、34.0、45.0、

            18.0、3.0、11.0, 輸出應為: s=35.951014。

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

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

            你編寫的若干語句。

             

             

             

             

            給定源程序:

            #include

            #include

            double fun(double x[9])

            {

            }

            main()

            { double s,a[9]={12.0,34.0,4.0,23.0,34.0,45.0,18.0,3.0,11.0};

            int i;

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

            for(i=0;i<9;i++)printf("%6.1f",a[i]); printf("\n\n");

            s=fun(a);

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

            NONO();

            }

             

            解題思路:

            本題是計算并輸出給定數組中每相鄰兩個元素之平均值的平方根之和。

            參考答案:

            double fun(double x[9])

            {

            int i ;

            double avg=0.0,sum=0.0;

            for (i=0;i<8;i++) {

            avg=(x[i]+x[i+1])/2;

            sum+=sqrt(avg);

            }

            return sum;

            }

             

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

            92套:

            函數fun的功能是:計算

            的前n項。若x=2.5,函數值為:12.182340。

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

            果。

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

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

            給定源程序:

            #include

            double fun(double x, int n)

            { double f, t; int i;

            f = 1.0;

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

            t = ___1___;

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

            for (i=___2___; i

            {

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

            t *= x/___3___;

            f += t;

            }

            return f;

            }

            main()

            { double x, y;

            x=2.5;

            y = fun(x, 12);

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

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

            }

            解題思路:

            第一處:t是處理公式中每一項中間項,所以應填:1。

            第二處:根據公式可知,for循環變量的初始值應從1開始。

            第三處:每做一次循環均要除以變量i的值,所以應填:i。

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

            給定程序MODI1.C中函數fun的功能是: 找出100n(不大于1000)之間三位數

            字相等的所有整數, 把這些整數放在s所指數組中, 個數作為函數值返回。

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

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

            給定源程序:

            #include

            #define N 100

            int fun(int *s, int n)

            { int i,j,k,a,b,c;

            j=0;

            for(i=100; i

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

            k=n;

            a=k; k/=10;

            b=k; k/=10;

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

            c=k

            if( a==b && a==c ) s[j++]=i;

            }

            return j;

            }

            main()

            { int a[N], n, num=0, i;

            do

            { printf("\nEnter n( <=1000 ) : "); scanf("%d",&n); }

            while(n > 1000);

            num = fun( a,n );

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

            for(i=0; i

            printf("\n\n");

            }

            解題思路:

            第一處:k應該取循環變量i的值,所以應改為:k=i;。

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

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

            請編寫函數fun, 其功能是: 計算并輸出給定10個數的方差:

            例如,給定的10個數為95.0、89.0、76.0、65.0、88.0、72.0、85.0、81.0、

            90.0、56.0,輸出為s=11.730729。

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

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

            你編寫的若干語句。

            給定源程序:

            #include

            #include

            double fun(double x[10])

            {

            }

            main()

            { double s, x[10]={95.0,89.0,76.0,65.0,88.0,72.0,85.0,81.0,90.0,56.0};

            int i;

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

            for(i=0;i<10;i++)printf("%6.1f",x[i]); printf("\n\n");

            s=fun(x);

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

            NONO();

            }

             

            解題思路:

            本題是根據公式進行計算。

            參考答案:

            double fun(double x[10])

            {

            int i;

            double avg=0.0, sum=0.0, abs=0.0, fc;

            for (i=0;i<10;i++) sum+=x[i];

            avg=sum/10; /* 計算平均值 */

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

            abs+=(x[i]-avg)*(x[i]-avg);

            fc=sqrt(abs/10) ;

            return fc;

            }

             

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

            93套:

            給定程序中已建立一個帶有頭結點的單向鏈表,main函數中將多次調用fun

            函數,每調用一次fun函數,輸出鏈表尾部結點中的數據,并釋放該結點,使鏈表

            縮短。

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

            果。

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

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

            給定源程序:

            #include

            #include

            #define N 8

            typedef struct list

            { int data;

            struct list *next;

            } SLIST;

            void fun( SLIST *p)

            { SLIST *t, *s;

            t=p->next; s=p;

            while(t->next != NULL)

            { s=t;

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

            t=t->___1___;

            }

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

            printf(" %d ",___2___);

            s->next=NULL;

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

            free(___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("\nThe list is NULL!\n");

            else

            { printf("\nHead");

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

            printf("->End\n");

            }

            }

            main()

            { SLIST *head;

            int a[N]={11,12,15,18,19,22,25,29};

            head=creatlist(a);

            printf("\nOutput from head:\n"); outlist(head);

            printf("\nOutput from tail: \n");

            while (head->next != NULL){

            fun(head);

            printf("\n\n");

            printf("\nOutput from head again :\n"); outlist(head);

            }

            }

            解題思路:

            本題是對已經建立的鏈表,通過調用一次函數就輸出鏈表尾部的數據。程序中共有三處要

            填上適當的內容,使程序能運行出正確的結果。

            第一處:由于本題要求輸出鏈表尾部的數據,函數是利用while循環語句找出鏈表尾部的指

            針并存入臨時變量s中,那么每循環一次就要判斷鏈表是否已結束位置,如果是,則退出循環,

            進行輸出,由于是通過t指針變量進行操作的,因此,都要取tnext指針重新賦給t來實現,所

            以本處應填next。

            第二處:輸出最后一個結點的數據,所以應填t->data(*t).data。

            第三處:輸出出最后一個結點數據后,并把此結點刪除了,程序要求釋放內存,所以應填t。

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

            給定程序MODI1.C中函數fun的功能是:將字符串中的字符按逆序輸出,但不改

            變字符串中的內容。

            例如,若字符串為abcd,則應輸出:dcba。

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

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

            給定源程序:

            #include

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

            fun (char a)

            { if ( *a )

            { fun(a+1) ;

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

            printf("%c" *a) ;

            }

            }

            main( )

            { char s[10]="abcd";

            printf("處理前字符串=%s\n處理后字符串=", s);

            fun(s); printf("\n") ;

            }

            解題思路:

            第一處:形參a應定義為字符串指針。

            第二處:語句中缺少逗號。

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

            請編寫一個函數fun,它的功能是:比較兩個字符串的長度,(不得調用C語言

            提供的求字符串長度的函數),函數返回較長的字符串。若兩個字符串長度相同,

            則返回第一個字符串。

            例如,輸入beijing shanghai 為回車鍵),

            函數將返回shanghai。

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

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

            你編寫的若干語句。

            給定源程序:

            #include

            char *fun ( char *s, char *t)

            {

            }

            main( )

            { char a[20],b[20];

             printf("Input 1th string:") ;

            gets( a);

            printf("Input 2th string:") ;

            gets( b);

            printf("%s\n",fun (a, b ));

            NONO ();

            }

             

            解題思路:

            本題是比較兩個字符串的長度并按要求返回字符串。

            我們給出的程序是使用for循環來判斷兩個字符串中哪一個比較長或相等,循環的終止值為

            兩個字符串中是否字符串結束符,如果有,則退出循環體。接下來再判斷兩個字符串是否同時

            出現結束符,則返回第一個字符串s,如果不沒有同時出現,則判斷哪一個字符串先有結束符,

            則按要求返回指定的字符串。

            參考答案:

            char *fun ( char *s, char *t)

            {

            int i;

            char *p=s, *q=t;

            for(i=0;*p && *q; i++) {

            p++; q++;

            }

            if(*p == 0 && *q == 0) return s ;

            if(*p) return s ;

            else return t ;

            }

             

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

            94套:

            函數fun的功能是:計算

            的前n項之和。若x=2.5,n=15時,函數值為:1.917914。

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

            果。

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

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

            給定源程序:

            #include

            #include

            double fun(double x, int n)

            { double f, t; int i;

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

            f = ___1___;

            t = -1;

            for (i=1; i

            {

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

            t *= (___2___)*x/i;

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

            f += ___3___;

            }

            return f;

            }

            main()

            { double x, y;

            x=2.5;

            y = fun(x, 15);

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

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

            }

            解題思路:

            第一處:根據公式可知,變量f的初值為1。

            第二處:根據公式可知,此處是正負號的變換,所以應填:-1。

            第三處:計算的結果進行累加并賦值給變量f,所以應填:t。

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

            給定程序MODI1.C中函數fun的功能是: 3個紅球,5個白球, 6個黑球中任意

            取出8個作為一組,進行輸出。在每組中,可以沒有黑球,但必須要有紅球和白球。

            組合數作為函數值返回。正確的組合數應該是15。程序中i的值代表紅球數, j

            值代表白球數,k的值代表黑球數。

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

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

            給定源程序:

            #include

            int fun()

            { int i,j,k,sum=0;

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

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

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

            { for(j=1; j<=5; j++)

            { k=8-i-j;

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

            if(K>=0 && K<=6)

            { sum=sum+1;

            printf("red:M white:M black:M\n",i,j,k);

            }

            }

            }

            return sum;

            }

            main()

            { int sum;

            sum=fun();

            printf("sum =M\n\n",sum);

            }

            解題思路:

            第一處:外for循環的初始變量i的值應為1。

            第二處:變量k寫成了大寫K了。

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

            請編寫函數fun, 其功能是: 計算并輸出下列多項式的值:

            例如, 在主函數中從鍵盤給n輸入15, 則輸出為:s=2.718282。

            注意: 要求n的值大于1但不大于100。

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

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

            你編寫的若干語句。

            給定源程序:

            #include

            double fun(int n)

            {

            }

            main()

            { int n; double s;

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

            s=fun(n);

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

            NONO();

            }

             

            解題思路:

            本題是根據給定的公式計算結果。使用for循環語句依次求出每一項的值,分別進行累加并

            把結果存入變量s中,最后把s作為函數值返回。

            參考答案:

            double fun(int n)

            {

            double s=1 ;

            long t=1;

            int i;

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

            t=t*i; /* 計算階乘 */

            s+=1./t; /* 計算每項的值并累加至變量s */

            }

            return s; /* 返回多項式的值 */

            }

             

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

            95套:

            給定程序中,函數fun的功能是:計算N×N矩陣的主對角線元素和反向對角線

            元素之和,并作為函數值返回。注意:要求先累加主對角線元素中的值,然后累

            加反向對角線元素中的值。例如,若N=3,有下列矩陣:

            1 2 3

            4 5 6

            7 8 9

            fun函數首先累加1、5、9,然后累加3、5、7,函數的返回值為30。

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

            果。

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

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

            給定源程序:

            #include

            #define N 4

            fun(int t[][N], int n)

            { int i, sum;

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

            ___1___;

            for(i=0; i

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

            sum+=___2___ ;

            for(i=0; i

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

            sum+= t[i][n-i-___3___] ;

            return sum;

            }

            main()

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

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

            for(i=0; i

            { for(j=0; j

            printf("\n");

            }

            printf("The result is: %d",fun(t,N));

            }

            解題思路:

            第一處:變量sum是用來存放主對角線元素和反向對角線元素之和,要對其進行初始化,所

            以應填:sum=0。

            第二處:對主對角線元素值累加,所以應填:t[i][i]。

            第三處:對反向對角線元素值累加,所以應填:t[i][n-i-1]。

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

            例如,若給m輸入 -100,給n輸入90,則函數求得的一個根值為2.000。

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

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

            給定源程序:

            #include

            #include

            double funx(double x)

            { return(2*x*x*x-4*x*x+3*x-6); }

            double fun( double m, double n)

            {

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

            int r;

            r=(m+n)/2;

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

            while(fabs(n-m)<0.001)

            { if(funx(r)*funx(n)<0) m=r;

            \TAB else n=r;

            \TAB r=(m+n)/2;

            }

            return r;

            }

            main( )

            { double m,n, root;

            printf("Enter m n : \n"); scanf("%lf%lf",&m,&n);

            root=fun( m,n );

            printf("root = %6.3f\n",root);

            }

            解題思路:

            第一處:變量r應該定義為實數型double或浮點型float變量。

            第二處:while必須先滿足條件,才做循環體的內容,所以應改為:while(fabs(m-n)>0.001)。

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

            假定輸入的字符串中只包含字母和*號。請編寫函數fun,它的功能是: 除了

            字符串前導和尾部的*號之外,將串中其它*號全部刪除。形參h已指向字符串中第

            一個字母,形參p已指向字符串中最后一個字母。在編寫函數時,不得使用C語言

            提供的字符串函數。

            例如,字符串中的內容為:****A*BC*DEF*G********,刪除后,字符串中的內

            容應當是:****ABCDEFG********。在編寫函數時,不得使用C語言提供的字符串

            函數。

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

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

            你編寫的若干語句。

            給定源程序:

            #include

            void fun( char *a, char *h,char *p )

            {

            }

            main()

            { char s[81],*t, *f;

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

            t=f=s;

            while(*t)t++;

            t--;

            while(*t=='*')t--;

            while(*f=='*')f++;

            fun( s , f,t );

            printf("The string after deleted:\n");puts(s);

            NONO();

            }

             

            解題思路:

            本題是考察字符串的操作。

            1. r指針左邊的字符仍存放字符串a首地址開始的位置上。

            2. r指針和p指針中間的字符進行判斷,其字符是否是'*',如果不是'*',則把這些字符

            放到第1步操作字符串a的后面。

            3. p指針右邊的字符放到第2步操作字符串a的后面。

            4. 最后給字符串a加上結束符。

            參考答案:

            void fun( char *a, char *h,char *p )

            {

            int j=0;

            char *q=a;

            while(*q && q < h) a[j++] = *q++ ;

            while(*h && *p && h < p) {

            if(*h != '*') a[j++] = *h ;

            h++;

            }

            while(*p) a[j++] = *p++ ;

            a[j] = 0 ;

            }

             

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

            96套:

            給定程序中,函數fun的功能是:N×N矩陣,將矩陣的外圍元素順時針旋轉。

            操作順序是:首先將第一行元素的值存入臨時數組r,然后使第一列成為第一行,

            最后一行成為第一列,最后一列成為最后一行,臨時數組中的元素成為最后一列。

            例如,若N=3,有下列矩陣:

            1 2 3

            4 5 6

            7 8 9

            計算結果為

            7 4 1

            8 5 2

            9 6 3

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

            果。

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

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

            給定源程序:

            #include

            #define N 4

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

            { int j ,r[N];

            for(j=0; j

            for(j=0; j

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

            t[0][N-j-1]=t[j][___1___ ];

            for(j=0; j

            t[j][0]=t[N-1][j];

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

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

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

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

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

            t[j][N-1]=r[___3___];

            }

            main()

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

            printf("\nThe 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");

            }

            }

            解題思路:

            第一處:把第1列上的數存放到第1行上,所以應填:0。

            第二處:for循環的增量值,由于循環是從大到小遞減,所以應填:j--。

            第三處:把臨時數組中的元素成為最后一列,所以應填:j。

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

            給定程序MODI1.C中函數 fun 的功能是:計算

            S = f(-n) + f(-n+1) +…+ f(0) + f(1) + f(2) +…+ f(n)

            的值。例如,當n5時,函數值應為:10.407143。f(x)函數定義如下:

            (x+1)/(x-2) x>0 x2

            f(x) = 0 x=0 x=2

            (x-1)/(x-2) x<0

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

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

            給定源程序:

            #include

            #include

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

            f( double x)

            {

            if (x == 0.0 || x == 2.0)

            return 0.0;

            else if (x < 0.0)

            return (x -1)/(x-2);

            else

            return (x +1)/(x-2);

            }

            double fun( int n )

            { int i; double s=0.0, y;

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

            {y=f(1.0*i); s += y;}

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

            return s

            }

            main ( )

            {

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

            }

            解題思路:

            第一處:由于返回值是實數型值,所以在函數名前加上double。

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

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

            編寫函數fun,它的功能是計算:

            s作為函數值返回。

            C語言中可調用log ( n )函數求ln (n)。log函數的引用說明是:

            double log(double x)。

            例如,若m的值為: 20,fun函數值為: 6.506583。

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

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

            你編寫的若干語句。

            給定源程序:

            #include

            #include

            double fun( int m )

            {

            }

            main()

            {

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

            NONO();

            }

             

            解題思路:

            本題是根據給定的公式計算結果。使用for循環語句依次求出每一項的值,分別進行累加并

            把結果存入變量s中,循環結束后再對s求平方根,結果仍存入s中,最后返回s。

            參考答案:

            double fun( int m )

            {

            double s = 0.0 ;

            int i ;

            for(i = 1 ; i <= m ; i++) s += log(1.0 * i) ;

            s = sqrt(s) ;

            return s ;

            }

             

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

            97套:

            函數fun的功能是:逆置數組元素中的值。例如:若a所指數組中的數據依次

            為:1、2、3、4、5、6、7、8、9,則逆置后依次為:9、8、7、6、5、4、3、2、

            1。形參n給出數組中數據的個數。

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

            果。

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

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

            給定源程序:

            #include

            void fun(int a[], int n)

            { int i,t;

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

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

            {

            t=a[i];

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

            a[i] = a[n-1-___2___];

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

            ___3___ = t;

            }

            }

            main()

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

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

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

            printf("M ", b[i]);

            printf("\n");

            fun(b, 9);

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

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

            printf("M ", b[i]);

            printf("\n");

            }

            解題思路:

            第一處:利用for循環語句,對數組中的各元素進行逆置,所以終止值為n/2。

            第二處:進行交換數組中元素的值,由于是依次是首和尾交換,所以應填:i。

            第三處:使用中間變量t來交換的,所以應填:a[n-i-1]。

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

            給定程序MODI1.C中函數fun的功能是:將一個由八進制數字字符組成的字符

            串轉換為與其面值相等的十進制整數。規定輸入的字符串最多只能包含5位八進制

            數字字符。

            例如,若輸入:77777,則輸出將是:32767。

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

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

            給定源程序:

            #include

            int fun( char *p )

            { int n;

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

            n= *P-'o';

            p++;

            while( *p!=0 ) {

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

            \TAB n=n*8+*P-'o';

            \TAB p++;

            }

            return n;

            }

            main()

            { char s[6]; int i; int n;

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

            if(strlen(s)>5){ printf("Error: String too longer !\n\n");exit(0); }

            for(i=0; s[i]; i++)

            if(s[i]<'0'||s[i]>'7')

            { printf("Error: %c not is ocatal digits!\n\n",s[i]);exit(0); }

            printf("The original string: "); puts(s);

            n=fun(s);

            printf("\n%s is convered to integer number: %d\n\n",s,n);

            }

            解題思路:

            第一和第二處:*p錯寫成*P,'0'錯寫成'o'。

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

            學生的記錄由學號和成績組成,N名學生的數據已在主函數中放入結構體數組

            s,請編寫函數fun,它的功能是:函數返回指定學號的學生數據,指定的學號在主

            函數中輸入。若沒找到指定學號,在結構體變量中給學號置空串,給成績置-1,作

            為函數值返回。(用于字符串比較的函數是strcmp)。

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

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

            你編寫的若干語句。

            給定源程序:

            #include

            #include

            #define N 16

            typedef struct

            { char num[10];

            int s;

            } STREC;

            STREC fun( STREC *a, char *b )

            {

            }

            main()

            { STREC s[N]={{"GA005",85},{"GA003",76},{"GA002",69},{"GA004",85},

            \TAB \TAB {"GA001",91},{"GA007",72},{"GA008",64},{"GA006",87},

            \TAB \TAB {"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91},

            \TAB \TAB {"GA011",77},{"GA017",64},{"GA018",64},{"GA016",72}};

            STREC h;

            char m[10];

            int i;FILE *out ;

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

            for(i=0; i

            { if(i%4==0) printf("\n");

            printf("%s = ",s[i].num,s[i].s);

            }

            printf("\n\nEnter the number: ");gets(m);

            h=fun( s,m );

            printf("The data : ");

            printf("\n%s M\n",h.num,h.s);

            printf("\n");

            out = fopen("c:\\test\\out.dat","w") ;

            h=fun(s,"GA013");

            fprintf(out,"%s M\n",h.num,h.s);

            fclose(out);

            }

            解題思路:

            本題是從學生記錄體中找出給定的學號。具體操作請看答案程序中的說明。

            參考答案:

            STREC fun( STREC *a, char *b )

            {

            STREC c ;

            int i ;

            c.num[0] = '\0' ; /* 置初始空串 */

            c.s = -1 ; /* 置成績為-1 */

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

            if(strcmp(a[i].num, b)==0) { /* 判斷學號是否相等 */

            strcpy(c.num, a[i].num) ; /* 相等,則對學號進行賦值 */

            c.s=a[i].s; /* 相等,則對成績進行賦值 */

            break ; /* 退出循環體 */

            }

            return c ; /* 返回結構體變量 */

            }

             

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

            98套:

            給定程序中,函數fun的功能是:在帶有頭結點的單向鏈表中,查找數據域中

            值為ch的結點。找到后通過函數值返回該結點在鏈表中所處的順序號;若不存在

             值為ch的結點,函數返回0值。

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

            果。

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

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

            給定源程序:

            #include

            #include

            #define N 8

            typedef struct list

            { int data;

            struct list *next;

            } SLIST;

            SLIST *creatlist(char *);

            void outlist(SLIST *);

            int fun( SLIST *h, char ch)

            { SLIST *p; int n=0;

            p=h->next;

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

            while(p!=___1___)

            { n++;

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

            if (p->data==ch) return ___2___;

            else p=p->next;

            }

            return 0;

            }

            main()

            { SLIST *head; int k; char ch;

            char a[N]={'m','p','g','a','w','x','r','d'};

            head=creatlist(a);

            outlist(head);

            printf("Enter a letter:");

            scanf("%c",&ch);

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

            k=fun(___3___);

            if (k==0) printf("\nNot found!\n");

            else printf("The sequence number is : %d\n",k);

            }

            SLIST *creatlist(char *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("\nThe list is NULL!\n");

            else

            { printf("\nHead");

            do

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

            while(p!=NULL);

            printf("->End\n");

            }

            }

            解題思路:

            本題是在給定的鏈表中要求找出指定的值。

            第一處:判斷p是否結束,所以應填:NULL。

            第二處:在函數fun中,使用n來計算結點的位置,當找到ch值,則返回結點的位置n,所以

            應填:return n。

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

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

            給定程序MODI1.C中函數fun的功能是:刪除p所指字符串中的所有空白字符(

            括制表符、回車符及換行符)。

            輸入字符串時用'#'結束輸入。

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

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

            給定源程序:

            #include

            #include

            #include

            fun ( char *p)

            { int i,t; char c[80];

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

            For (i = 0,t = 0; p[i] ; i++)

            if(!isspace(*(p+i))) c[t++]=p[i];

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

            c[t]="\0";

            strcpy(p,c);

            }

            main( )

            { char c,s[80];

            int i=0;

            printf("Input a string:");

            c=getchar();

            while(c!='#')

            { s[i]=c;i++;c=getchar(); }

            s[i]='\0';

             

             

             

             

            fun(s);

            puts(s);

            }

            解題思路:

            第一處:保留字for錯寫成For。

            第二處:置字符串結束符錯誤,應該是:'\0'。

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

            請編寫一個函數fun,它的功能是:將ss所指字符串中所有下標為奇數位置上

            的字母轉換為大寫(若該位置上不是字母,則不轉換)。

            例如, 若輸入"abc4EFg",則應輸出"aBc4EFg"。

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

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

            你編寫的若干語句。

            給定源程序:

            #include

            #include

            void fun ( char *ss )

            {

            }

            main( )

            { char tt[81] ;

            printf( "\nPlease enter an string within 80 characters:\n" ); gets( tt );

            printf( "\n\nAfter changing, the string\n \"%s\"", tt );

            fun( tt );

            printf( "\nbecomes\n \"%s\"\n", tt );

            NONO ( );

            }

             

            解題思路:

            本題是考察考生對字母按要求進行轉換。其中大小字母的ASCII值相差32。

            參考答案:

            void fun ( char *ss )

            {

            int i ;

            for(i = 1 ; i < strlen(*ss) ; i+=2) {

            if(ss[i] >= 'a' && ss[i] <= 'z') ss[i] -= 32 ;

            }

            }

             

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

            99套:

            函數fun的功能是:將形參a所指數組中的前半部分元素中的值和后半部分元

            素中的值對換。形參n中存放數組中數據的個數,若n為奇數,則中間的元素不動。

            例如:若a所指數組中的數據依次為:1、2、3、4、5、6、7、8、9,則調換后

            為:6、7、8、9、5、1、2、3、4。

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

            果。

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

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

            給定源程序:

            #include

            #define N 9

            void fun(int a[], int n)

            { int i, t, p;

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

            p = (n%2==0)?n/2:n/2+___1___;

            for (i=0; i

            {

            t=a[i];

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

            a[i] = a[p+___2___];

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

            ___3___ = t;

            }

            }

            main()

            { int b[N]={1,2,3,4,5,6,7,8,9}, 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");

            }

            解題思路:

            第一處:如果n是奇數,則中間的元素不動,所以應填:1。

            第二處:使用for循環語句來交換數組元素的值,所以應填:i。

            第三處:使用中間變量t來交換的,所以應填:a[p+i]。

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

            給定程序MODI1.C中函數fun的功能是:把主函數中輸入的3個數,最大的放在

            a中,最小的放在c中,中間的放在b中。

            例如,輸入的數為:55 12 34,

            輸出結果應當是:a=55.0 , b=34.0 , c=12.0。

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

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

            給定源程序:

            #include

            void fun(float *a,float *b,float *c)

            {

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

            float *k;

            if( *a<*b )

            { k=*a; *a=*b; *b=k; }

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

            if( *a>*c )

            { k=*c; *c=*a; *a=k; }

            if( *b<*c )

            { k=*b; *b=*c; *c=k; }

            }

            main()

            { float a,b,c;

            printf("Input a b c: "); scanf("%f%f%f",&a,&b,&c);

             printf("a = %4.1f, b = %4.1f, c = %4.1f\n\n",a,b,c);

            fun(&a,&b,&c);

            printf("a = %4.1f, b = %4.1f, c = %4.1f\n\n",a,b,c);

            }

            解題思路:

            第一處:在函數fun體中,k是一個浮點型變量,所以應改為:float k;。

            第二處:三個數比較大小,第1個條件是第1個比第2個小,則交換。第3個條件是第2個比第

            3個小,則也交換。第2個條件是應該第1和第3個小,則交換就符合題意了,所以應改為:

            if(*a<*c)。

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

            學生的記錄由學號和成績組成,N名學生的數據已在主函數中放入結構體數組

            s,請編寫函數fun,它的功能是:把分數最高的學生數據放在b所指的數組中,

            意:分數最高的學生可能不止一個,函數返回分數最高的學生的人數。

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

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

            你編寫的若干語句。

            給定源程序:

            #include

            #define N 16

            typedef struct

            { char num[10];

            int s;

            } STREC;

            int fun( STREC *a, STREC *b )

            {

            }

            main()

            { STREC s[N]={{"GA05",85},{"GA03",76},{"GA02",69},{"GA04",85},

            {"GA01",91},{"GA07",72},{"GA08",64},{"GA06",87},

            {"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91},

            {"GA011",77},{"GA017",64},{"GA018",64},{"GA016",72}};

            STREC h[N];

            int i,n;FILE *out ;

            n=fun( s,h );

            printf("The %d highest score :\n",n);

            for(i=0;i

            printf("%s M\n",h[i].num,h[i].s);

            printf("\n");

            out = fopen("c:\\test\\out.dat","w") ;

            fprintf(out, "%d\n",n);

            for(i=0;i

            fprintf(out, "M\n",h[i].s);

            fclose(out);

            }

            解題思路:

            本題是找出最高成績,再把N名學生的成績等于最高成績的記錄存入b所指的數組中。具體操作請看答案程序中的說明。

            參考答案:

            int fun( STREC *a, STREC *b )

            {

            int i, max = a[0].s, n=0;

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

            if(max < a[i].s) max = a[i].s ; /* 找出最高成績 */

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

            if(max==a[i].s) b[n++] = a[i] ; /* 找相等的最高成績并存入數組b */

            return n; /* 返回符合條件的人數 */

            }

             

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

            100套:

            給定程序中,函數fun的功能是:在形參s所指字符串中尋找與參數c相同的字符,并在其后插入一個與之相同的字符,若找不到相同的字符則函數不做任何處理。

            例如,s所指字符串為:baacda,c中的字符為:a,

            執行后s所指字符串為:baaaacdaa。

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

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

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

            給定源程序:

            #include

            void fun(char *s, char c)

            { int i, j, n;

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

            for(i=0; s[i]!=___1___ ; i++)

            if(s[i]==c)

            {

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

            n=___2___ ;

            while(s[i+1+n]!='\0') n++;

            for(j=i+n+1; j>i; j--) s[j+1]=s[j];

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

            s[j+1]=___3___ ;

            i=i+1;

            }

            }

            main()

            { char s[80]="baacda", c;

            printf("\nThe string: %s\n",s);

            printf("\nInput a character: "); scanf("%c",&c);

            fun(s,c);

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

            }

            解題思路:

            第一處:在for循環中終止值要判斷字符串是否結束符,所以應填:'\0'。

            第二處:n用于統計參數c后還有多少個字符,要對其進行初始化,所以應填:0。

            第三處:要求插入相同的字符c,所以應填:c。

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

            在主函數中從鍵盤輸入若干個數放入數組中, 0結束輸入并放在最后一個

            元素中。給定程序MODI1.C中函數fun的功能是:計算數組元素中值為正數的平均

            (不包括0)。

            例如:數組中元素中的值依次為:39,-47,21,2,-8,15,0,

            則程序的運行結果為:19.250000。

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

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

            給定源程序:

            #include

            double fun ( int x[])

            {

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

            int sum = 0.0;

            int c=0, i=0;

            while (x[i] != 0)

            { if (x[i] > 0) {

            sum += x[i]; c++; }

            i++;

            }

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

             sum \= c;

            return sum;

            }

            main( )

            { int x[1000]; int i=0;

            printf( "\nPlease enter some data (end with 0): " );

            do

            { scanf("%d", &x[i]); }

            while (x[i++] != 0);

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

            }

            解題思路:

            第一處:由于sum是存放實數值,因此不能定義為整型,所以應改為double sum=0.0;float

            sum=0.0;。

            第二處:除的運算符是“/”。

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

            編寫函數fun,函數的功能是:根據以下公式計算s,計算結果作為函數值返

            回;n通過形參傳入。

               1       1              1

            S=1 + ── + ─── + ... + ──────

               1+2    1+2+3         1+2+3+...+n

            例如:若n的值為11時,函數的值為:1.833333

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

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

            你編寫的若干語句。

            給定源程序:

            #include

            float fun(int n)

            {

            }

            main()

            { int n; float s;

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

            s = fun(n);

            printf("the result is: %f\n", s);

            NONO();

            }

             

            解題思路:

            本題是根據給定的公式計算結果。使用for循環語句依次求出每一項的值,分別進行累加并

            把結果存入變量s中,最后返回s。

            參考答案:

            float fun(int n)

            {

            int i,j,t;

            float s=0;

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

            t=0;

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

            s=s+1./t;

            }

            return s;

            }

             

             

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