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

             

             

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

             

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

            71套:

            給定程序中,函數fun的功能是:將形參s所指字符串中的所有數字字符順序

            前移,其他字符順序后移,處理后新字符串的首地址作為函數值返回。

            例如,s所指字符串為:asd123fgh5##43df,

            處理后新字符串為:123543asdfgh##df。

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

            果。

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

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

            給定源程序:

            #include

            #include

            #include

            #include

             

             

             

             

            char *fun(char *s)

            { int i, j, k, n; char *p, *t;

            n=strlen(s)+1;

            t=(char*)malloc(n*sizeof(char));

            p=(char*)malloc(n*sizeof(char));

            j=0; k=0;

            for(i=0; i

            { if(isdigit(s[i])) {

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

            p[__1__]=s[i]; j++;}

            else

            { t[k]=s[i]; k++; }

            }

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

            for(i=0; i<__2__; i++) p[j+i]= t[i];

            p[j+k]=0;

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

            return __3__;

            }

            main()

            { char s[80];

            printf("Please input: "); scanf("%s",s);

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

            }

            解題思路:

            第一處:函數中申請了兩個內存空間,其p是存放數字字符串,t是存放非數字字符串,根

            據條件可知,p依次存放數字字符串,其位置由j來控制,所以應填:j。

            第二處:利用for循環再把t中的內容依次追加到p中,其中t的長度為k,所以應填:k。

            第三處:最后返回p的首地址即可,所以應填:p。

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

            給定程序MODI1.C中函數fun的功能是:首先把b所指字符串中的字符按逆序存

            放, 然后將a所指字符串中的字符和b所指字符串中的字符,按排列的順序交叉合

            并到c所指數組中,過長的剩余字符接在c所指數組的尾部。例如,當a所指字符串

            中的內容為"abcdefg",b所指字符串中的內容為"1234"時,c所指數組中的內容應

            該為"a4b3c2d1efg";而當a所指字符串中的內容為"1234",b所指字符串中的內容

            "abcdefg"時,c所指數組中的內容應該為"1g2f3e4dcba"。

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

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

            給定源程序:

            #include

            #include

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

            {

            int i , j; char ch;

            i = 0; j = strlen(b)-1;

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

            while ( i > j )

             

             

             

             

            { ch = b[i]; b[i] = b[j]; b[j] = ch;

            i++; j--;

            }

            while ( *a || *b ) {

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

            If ( *a )

            { *c = *a; c++; a++; }

            if ( *b )

            { *c = *b; c++; b++; }

            }

            *c = 0;

            }

            main()

            {

            char s1[100],s2[100],t[200];

            printf("\nEnter s1 string : ");scanf("%s",s1);

            printf("\nEnter s2 string : ");scanf("%s",s2);

            fun( s1, s2, t );

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

            }

            解題思路:

            第一處:應該判斷i是否小于j,所以應改為:while(i。

            第二處:if錯寫成If。

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

            函數fun的功能是:將s所指字符串中下標為偶數同時ASCII值為奇數的字符刪

            除,s所指串中剩余的字符形成的新串放在t所指的數組中。

            例如,若s所指字符串中的內容為"ABCDEFG12345",其中字符CASCII碼值為

            奇數,在數組中的下標為偶數, 因此必須刪除;而字符1ASCII碼值為奇數,在

            數組中的下標也為奇數,因此不應當刪除,其它依此類推。

            最后t所指的數組中的內容應是"BDF12345"。

            注意: 部分源程序存在文件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 = 0 ; i < strlen(s) ; i++)

            if(!((i % 2) ==0 && (s[i] % 2))) t[j++] = s[i] ;

            t[j] = 0 ;

            }

             

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

            72套:

            給定程序中,函數fun的功能是計算下式

            例如,若形參e的值為1e-3,函數的返回值2.735678。

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

            果。

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

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

            給定源程序:

            #include

            double fun(double e)

            { int i; double s, x;

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

            s=0; i=__1__;

            x=1.0;

            while(x>e){

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

            __2__;

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

            x=(2.0*i-1)/((__3__)*(2.0*i));

            s=s+x;

            }

            return s;

            }

            main()

            { double e=1e-3;

            printf("\nThe result is: %f\n",fun(e));

            }

            解題思路:

            第一處:根據公式以及下面的程序,可以得出i應為0。

            第二處:根據公式以及i的初值為0,所以應填:i++。

            第三處:根據公式要求,所以應填:2.0*i。

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

            給定程序MODI1.C中函數 fun 的功能是:將s所指字符串的正序和反序進行連

            接,形成一個新串放在t所指的數組中。

            例如,當s所指字符串為:"ABCD" 時,則t所指字符串中的內容應

            為:"ABCDDCBA"。

             

             

             

             

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

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

            給定源程序:

            #include

            #include

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

            void fun (char s, char t)

            {

            int i, d;

            d = strlen(s);

            for (i = 0; i

            for (i = 0; i

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

            t[2*d-1] = '\0';

            }

            main()

            {

            char s[100], t[100];

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

            fun(s, t);

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

            }

            解題思路:

            第一處:從函數體fun中可知,兩個均為字符指針型變量,應改為:void fun (char *s, char

            *t)。

            第二處:字符串結束位置錯誤,應改為:t[2*d]=0;。

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

            函數fun的功能是: s所指字符串中除了下標為奇數、同時ASCII值也為奇

            數的字符之外,其余的所有字符都刪除,串中剩余字符所形成的一個新串放在t

            指的數組中。

            例如,若s所指字符串中的內容為:"ABCDEFG12345",其中字符AASCII碼值

            雖為奇數,但所在元素的下標為偶數,因此必需刪除;而字符1ASCII碼值為奇

            數,所在數組中的下標也為奇數,因此不應當刪除,其它依此類推。最后t所指的

            數組中的內容應是:"135"。

            注意: 部分源程序存在文件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)

            if(s[i] % 2) t[j++] = s[i] ;

            t[j] = 0 ;

            }

             

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

            73套:

            給定程序中,函數fun的功能是計算下式

            例如:若形參e的值為1e-3,函數的返回值為0.551690。

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

            果。

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

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

            給定源程序:

            #include

            double fun(double e)

            { int i, k; double s, t, x;

            s=0; k=1; i=2;

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

            x=__1__/4;

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

            while(x __2__ e)

            { s=s+k*x;

            k=k* (-1);

            t=2*i;

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

            x=__3__/(t*t);

            i++;

            }

            return s;

            }

            main()

            { double e=1e-3;

            printf("\nThe result is: %f\n",fun(e));

            }

            解題思路:

            第一處:根據公式,首項應該是3.4,所以應填:3.。

            第二處:當x大于e時,循環體才會運行,所以應填:>。

             

             

             

             

            第三處:分子的值是2i+1,所以應填:2*i+1。

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

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

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

            2 3 5 8 13 21

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

            1 2 3 5 8 13

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

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

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

            給定源程序:

            #include

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

            fun ( int n )

            { int a, b, c, k; double s;

            s = 0.0; a = 2; b = 1;

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

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

            s = s + (Double)a / b;

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

            }

            return s;

            }

            main( )

            { int n = 5;

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

            }

            解題思路:

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

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

            第二處:double的第1個字母錯寫成大寫D。

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

            請編寫一個函數fun,它的功能是:求出一個2×M整型二維數組中最大元素的

            ,并將此值返回調用函數。

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

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

            你編寫的若干語句。

            給定源程序:

            #include

            #define M 4

            fun (int a[][M])

            {

            }

            main( )

            { int arr[2][M]={5,8,3,45,76,-4,12,82} ;

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

            NONO( ) ;

             

             

             

             

            }

            解題思路:

            本題是求出一個2×M整型二維數組中最大元素的值。

            參考答案:

            fun (int a[][M])

            {

            int i, j, max=a[0][0];

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

            for(j=0; j

            if(max

            return max;

            }

             

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

            74套:

            人員的記錄由編號和出生年、月、日組成,N名人員的數據已在主函數中存入

            結構體數組std中。函數fun的功能是:找出指定出生年份的人員,將其數據放在

            形參k所指的數組中,由主函數輸出,同時由函數值返回滿足指定條件的人數。

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

            果。

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

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

            給定源程序:

            #include

            #define N 8

             

             

             

             

            typedef struct

            { int num;

            int year,month,day ;

            }STU;

            int fun(STU *std, STU *k, int year)

            { int i,n=0;

            for (i=0; i

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

            if( ___1___==year)

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

            k[n++]= ___2___;

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

            return (___3___);

            }

            main()

            { STU std[N]={ {1,1984,2,15},{2,1983,9,21},{3,1984,9,1},{4,1983,7,15},

            {5,1985,9,28},{6,1982,11,15},{7,1982,6,22},{8,1984,8,19}};

            STU k[N]; int i,n,year;

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

            n=fun(std,k,year);

            if(n==0)

            printf("\nNo person was born in %d \n",year);

            else

            { printf("\nThese persons were born in %d \n",year);

            for(i=0; i

            printf("%d %d-%d-%d\n",k[i].num,k[i].year,k[i].month,k[i].day);

            }

            }

            解題思路:

            本題是從給定的人員數據中找出年齡相同的記錄存入k中,并返回符合條件的人數。

            第一處:斷結構變量中的編號year是否相等,所以應填:std[i].year。

            第二處:把符合條件的記錄依次存入實參k中,所以應填:std[i]。

            第三處:返回符合滿足條件的人數,所以應填:n。

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

            給定程序MODI1.C的功能是:讀入一個整數k(2k10000),打印它的所有質

            因子(即所有為素數的因子)。

            例如,若輸入整數:2310,則應輸出:2、3、5、7、11。

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

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

            給定源程序:

            #include

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

            IsPrime ( int n );

            { int i, m;

            m = 1;

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

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

             

             

             

             

            if !( n%i )

            { m = 0; break ; }

            return ( m );

            }

            main( )

            { int j, k;

            printf( "\nPlease enter an integer number between 2 and 10000: " ); scanf( "%d",

            &k );

            printf( "\n\nThe prime factor(s) of %d is( are ):", k );

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

            if( ( !( k%j ) )&&( IsPrime( j ) ) ) printf( "\n M", j );

            printf("\n");

            }

            解題思路:

            第一處:函數定義的行尾有多余的分號。

            第二處:條件判斷缺少圓括號。

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

            已知學生的記錄由學號和學習成績構成,N名學生的數據已存入結構體數組a

            中。請編寫函數 fun,函數的功能是:找出成績最高的學生記錄,通過形參指針

            傳回主函數(規定只有一個最高分)。已給出函數的首部,請完成該函數。

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

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

            你編寫的若干語句。

            給定源程序:

            #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;

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

            for ( i=0; i< N; i++ )printf("No = %s Mark = %d\n", a[i].num,a[i].s);

            fun ( a, &m );

            printf ("***** THE RESULT *****\n");

            printf ("The top : %s , %d\n",m.num, m.s);

            NONO( );

            }

            解題思路:

            本題考察學生在一組記錄中找出最高分。我們使用for循環語句來解決這個問題。

            參考答案:

            fun( STU a[], STU *s )

            {

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

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

            if(max < a[i].s) {

            j = i ;

            max = a[i].s ;

            }

            *s = a[j] ;

            }

             

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

            75套:

            給定程序中,函數fun的功能是:對形參ss所指字符串數組中的M個字符串按

            長度由短到長進行排序。ss所指字符串數組中共有M個字符串,且串長。

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

            果。

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

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

            給定源程序:

            #include

            #include

            #define M 5

            #define N 20

            void fun(char (*ss)[N])

            { int i, j, k, n[M]; char t[N];

            for(i=0; i

            for(i=0; i

            { k=i;

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

            for(j=___1___; j

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

            if(n[k]>n[j]) ___2___;

            if(k!=i)

            { strcpy(t,ss[i]);

            strcpy(ss[i],ss[k]);

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

            strcpy(ss[k],___3___);

            n[k]=n[i];

            }

            }

            }

            main()

            { char ss[M][N]={"shanghai","guangzhou","beijing","tianjing","cchongqing"};

            int i;

            printf("\nThe original strings are :\n");

            for(i=0; i

            printf("\n");

            fun(ss);

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

            for(i=0; i

            }

            解題思路:

            本題是要求按字符串的長短進行排序。

             

             

             

             

            第一處:內循環賦初值,應填:i+1。

            第二處:找出最短的一個長度,所以應填:m=j。

            第三處:交換字符串,所以應填:t。

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

            給定程序MODI1.C中函數 fun 的功能是:判斷ch中的字符是否與str所指串中

            的某個字符相同; 若相同,什么也不做,若不同,則將其插在串的最后。

            請改正程序中的錯誤,使它能進行正確的操作。

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

            給定源程序:

            #include

            #include

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

            void fun(char str, char ch )

            { while ( *str && *str != ch ) str++;

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

            if ( *str == ch )

            { str [ 0 ] = ch;

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

            str[1] = '0';

            }

            }

            main( )

            { char s[81], c ;

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

            printf ("\n Please enter the character to search : " );

            c = getchar();

            fun(s, c) ;

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

            }

            解題思路:

            第一處:第1個形參應該是字符串類型,所以應改為:void fun(char *str, char ch)。

            第二處:應該是判斷不相等,所以應改為:if(*str!=ch)。

            第三次:置字符串結束符錯誤,所以應改為:str[1] = 0;。

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

            請編一個函數fun(char *s),函數的功能是把s所指字符串中的內容逆置。

            例如:字符串中原有的字符串為:abcdefg,

            則調用該函數后, 串中的內容為:gfedcba。

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

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

            你編寫的若干語句。

            給定源程序:

            #include

            #include

            #define N 81

            fun ( char *s )

            {

            }

             

             

             

             

            main( )

            { char a[N];

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

            printf ( "The original string is : " ); puts( a );

            fun ( a );

            printf("\n");

            printf ( "The string after modified : ");

            puts ( a );

            NONO( );

            }

            解題思路:

            本題是考察考生如何對字符串中的字符進行逆序操作。給出的程序使用了一個臨時變量b

            的字符串,使用for循環語句把原字符串的字符從尾部依次賦給臨時變量b(從頭開始)中,循

            環結束后,再把臨時變量b的內容重新復制給原字符串變量即可。

            參考答案:

            fun ( char *s )

            {

            char b[N] ;

            int i = 0, j ;

            memset(b, 0, N) ;

            for(j = strlen(s) - 1 ; j >= 0 ; j--) b[i++] = s[j] ;

            strcpy(s, b) ;

            }

             

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

            76套:

            給定程序中,函數fun的功能是:計算下式前n項的和作為函數值返回。

            例如,當形參n的值為10時,函數返回:-0.204491。

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

            果。

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

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

            給定源程序:

            #include

            double fun(int n)

            { int i, k; double s, t;

            s=0;

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

            k=__1__;

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

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

            t=__2__;

            s=s+k*(2*i-1)*(2*i+1)/(t*t);

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

            k=k*__3__;

            }

            return s;

             

             

             

             

            }

            main()

            { int n=-1;

            while(n<0)

            { printf("Please input(n>0): "); scanf("%d",&n); }

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

            }

            解題思路:

            第一處:k是用來管理正負號的,公式中第一個值是正數,所以應填:1。

            第二處:根據公式,t2i,所以應填:2*i。

            第三處:根據公式,第2個是負數,所以應填:(-1)。

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

            給定程序MODI1.C中函數 fun 的功能是:判斷一個整數是否是素數,若是返

            1,否則返回0。

            main()函數中,若fun返回1輸出YES,若fun返回0輸出NO!。

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

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

            給定源程序:

            #include

            int fun ( int m )

            { int k = 2;

            while ( k <= m && (m%k))

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

            k++

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

            if (m = k )

            return 1;

            else return 0;

            }

            main( )

            { int n;

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

            if ( fun ( n ) ) printf( "YES\n" );

            else printf( "NO!\n" );

            }

            解題思路:

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

            第二處:條件判斷相等的符號是==。

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

            請編寫一個函數fun,它的功能是:找出一維整型數組元素中最大的值和它所

            在的下標, 最大的值和它所在的下標通過形參傳回。數組元素中的值已在主函數

            中賦予。

            主函數中x是數組名, nx中的數據個數,max存放最大值,index存放最大值

            所在元素的下標。

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

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

            你編寫的若干語句。

             

             

             

             

            給定源程序:

            #include

            #include

            void fun(int a[], int n , int *max, int *d )

            {

            }

            main()

            { int i, x[20], max , index, n = 10;

            randomize() ;

            for (i=0;i < n;i++) {x[i] = rand()P; printf("M", x[i]) ; }

            printf("\n");

            fun( x, n , &max, &index);

            printf("Max =] , Index =M\n",max, index );

            NONO();

            }

             

            解題思路:

            本題是找出一維整型數組元素中最大的值和它所在的下標, 最大的值和它所在的下標通過

            形參傳回。具體看參考源程序中的說明。

            參考答案:

            void fun(int a[], int n , int *max, int *d )

            {

            int i ;

            *max=a[0];*d = 0 ; /* 把數組的第1個元素值賦值給最大值變量*max */

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

            if(*max < a[i]) { /* 判斷*max是否小于當前值 */

            *max = a[i]; /* 重新把最大值賦值給*max */

            *d = i ; /* 記住下標 */

            }

            }

             

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

            77套:

            給定程序中,函數fun的功能是:將形參n中,各位上為偶數的數取出,并按

            原來從高位到低位相反的順序組成一個新的數,并作為函數值返回。

            例如,輸入一個整數:27638496,函數返回值為:64862。

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

            果。

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

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

            給定源程序:

            #include

            unsigned long fun(unsigned long n)

            { unsigned long x=0; int t;

            while(n)

            { t=n;

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

            if(t%2==__1__)

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

            x=__2__+t;

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

            n=__3__;

            }

            return x;

            }

            main()

            { unsigned long n=-1;

             

             

             

             

            while(n>99999999||n<0)

            { printf("Please input(0

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

            }

            解題思路:

            第一處:判斷t是否是偶數,所以應填:0。

            第二處:每操作一次,x必須乘以10,再加t,所以應填:10*x。

            第三處:每循環一次n的值縮小10倍,所以應填:n/10。

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

            給定程序MODI1.C中函數fun的功能是:將長整型數中每一位上為奇數的數依

            次取出,構成一個新數放在t中。高位仍在高位,低位仍在低位。

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

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

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

            給定源程序:

            #include

            void fun (long s, long *t)

            { int d;

            long sl=1;

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

            t = 0;

            while ( s > 0)

            { d = s;

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

            if (d%2 == 0)

            { *t = d * sl + *t;

            \TAB sl *= 10;

            }

            s /= 10;

            }

            }

            main()

            { long s, t;

            clrscr();

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

            fun(s, &t);

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

            }

            解題思路:

            第一處:由于t是一個指針變量,賦初值的方式應為:*t=0;。

            第二處:d%2條件判斷時應為不是0,所以應改為:if(d%2!=0)。

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

            編寫一個函數fun,它的功能是:實現兩個字符串的連接(不使用庫函數strcat),

            即把p2所指的字符串連接到p1所指的字符串后。

            例如,分別輸入下面兩個字符串:

            FirstString--

            SecondString

             

             

             

             

            程序輸出:

            FirstString--SecondString

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

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

            你編寫的若干語句。

            給定源程序:

            #include

            void fun(char p1[], char p2[])

            {

            }

            main()

            { char s1[80], s2[40] ;

            printf("Enter s1 and s2:\n") ;

            scanf("%s%s", s1, s2) ;

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

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

            printf("Invoke fun(s1,s2):\n") ;

            fun(s1, s2) ;

            printf("After invoking:\n") ;

            printf("%s\n", s1) ;

            NONO() ;

            }

             

            解題思路:

            本題是不使用字符串庫函數來實現兩個字符串的連接。

            參考答案:

            void fun(char p1[], char p2[])

            {

            char *p=p1;

            while(*p)p++;

            while(*p2) *p++=*p2++;

             

             

             

             

            *p=0;

            }

             

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

            78套:

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

            線對應位置上元素中的值進行交換。例如,若N=3,有下列矩陣:

            1 2 3

            4 5 6

            7 8 9

            交換后為:

            3 2 1

            4 5 6

            9 8 7

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

            果。

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

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

            給定源程序:

            #include

             

             

             

             

            #define N 4

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

            void fun(int ___1___ , int n)

            { int i,s;

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

            for(___2___; i++)

            { s=t[i][i];

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

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

            t[i][n-1-i]=___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,N);

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

            for(i=0; i

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

            }

            }

            解題思路:

            第一處:在函數體fun中,已經使用了t整型數組,所以應填:t[][N]。

            第二處:要求填寫for循環語句的初始值和終止值,所以應填:i=0;i。

            第三處:交換變量的值,根據循環體中的語句可知,s是存放交換的中間變量,所以應填:

            s。

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

            N個有序整數組成的數列已放在一維數組中,給定程序MODI1.C中函數fun

            功能是:利用折半查找算法查找整數m在數組中的位置。若找到,返回其下標值;

            反之,返回-1。

            折半查找的基本算法是:每次查找前先確定數組中待查的范圍:lowhigh

            low,然后把m與中間位置(mid)中元素的值進行比較。如果m的值大于

            中間位置元素中的值, 則下一次的查找范圍落在中間位置之后的元素中;反之,

            下一次的查找范圍落在中間位置之前的元素中。直到low>high,查找結束。

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

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

            給定源程序:

            #include

            #define N 10

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

            void fun(int a[], int m )

            { int low=0,high=N-1,mid;

             

             

             

             

            while(low<=high)

            { mid=(low+high)/2;

            if(m

            high=mid-1;

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

            else If(m > a[mid])

            low=mid+1;

            else return(mid);

            }

            return(-1);

            }

            main()

            { int i,a[N]={-3,4,7,9,13,45,67,89,100,180 },k,m;

            printf("a數組中的數據如下:");

            for(i=0;iprintf("Enter m: "); scanf("%d",&m);

            k=fun(a,m);

            if(k>=0) printf("m=%d,index=%d\n",m,k);

            else printf("Not be found!\n");

            }

            解題思路:

            第一處:函數有返回值,不能定義為void,所以應改為:int fun(int a[],int m)。

            第二處:if錯定成If。

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

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

            尾部的*號之外,將字符串中其它*號全部刪除。形參p已指向字符串中最后的一個

            字母。在編寫函數時,不得使用C語言提供的字符串函數。

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

            容應當是: ABCDEFG*******。

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

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

            你編寫的若干語句。

            給定源程序:

            #include

            void fun( char *a, char *p )

            {

            }

            main()

            { char s[81],*t;

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

            t=s;

            while(*t)t++;

            t--;

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

            fun( s , t );

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

             

             

             

             

            NONO();

            }

             

            解題思路:

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

            1. 利用循環掃描出p指針左邊的字符是否是'*',如果不是'*',則依次把這些字符移動原

            字符串a首地址開始存放。

            2. p指針所指的字符串也依次存放到字符串a中。

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

            參考答案:

            void fun( char *a, char *p )

            {

            char *q=a;

            int j=0;

            while(*q && q

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

            q++ ;

            }

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

            a[j]=0;

            }

             

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

            79套:

            給定程序中,函數fun的功能是:ss所指字符串數組中長度最短的字符串所

            在的行下標,作為函數值返回,并把其串長放在形參n所指變量中。ss所指字符串

            數組中共有M個字符串,且串長。

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

            果。

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

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

            給定源程序:

            #include

            #include

            #define M 5

            #define N 20

            int fun(char (*ss)[N], int *n)

            { int i, k=0, len= N;

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

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

            { len=strlen(ss[i]);

            if(i==0) *n=len;

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

            if(len ___2___ *n)

            { *n=len;

            k=i;

            }

            }

             

             

             

             

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

            return(___3___);

            }

            main()

            { char ss[M][N]={"shanghai","guangzhou","beijing","tianjing","chongqing"};

            int n,k,i;

            printf("\nThe original strings are :\n");

            for(i=0;i

            k=fun(ss,&n);

            printf("\nThe length of shortest string is : %d\n",n);

            printf("\nThe shortest string is : %s\n",ss[k]);

            }

            解題思路:

            第一處:字符串數組共有M個字符串,所以在循環中終止值應填:M。

            第二處:由于本題是取長度最短的字符串,*n總是保存長度最短值,所以應填:<。

            第三處:其中k是保存長度最短的字符串所在的行下標,所以應填:k。

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

            給定程序MODI1.C中函數 fun 的功能是:將tt所指字符串中的小寫字母都改

            為對應的大寫字母,其它字符不變。

            例如,若輸入"Ab, cD",則輸出"AB, CD"。

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

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

            給定源程序:

            #include

            #include

            char* fun( char tt[] )

            {

            int i;

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

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

            if(( 'a' <= tt[i] )||( tt[i] <= 'z' ) )

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

            tt[i] += 32;

            return( tt );

            }

            main( )

            {

            char tt[81];

            printf( "\nPlease enter a string: " );

            gets( tt );

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

            }

            解題思路:

            第一處:判斷是小寫字母,則條件應該是與的關系。

            第二處:小寫字母的ASCII值減去32正好是其大寫字母。

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

            請編寫函數fun,其功能是: 將所有大于1小于整數m的非素數存入xx所指數組

             

             

             

             

            , 非素數的個數通過k傳回。

            例如,若輸入:17,則應輸出:4 6 8 9 10 12 14 15 16。

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

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

            你編寫的若干語句。

            給定源程序:

            #include

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

            {

            }

            main()

            {

            int m, n, zz[100];

            printf( "\nPlease enter an integer number between 10 and 100: " );

            scanf( "%d", &n );

            fun( n, &m, zz );

            printf( "\n\nThere are %d non-prime numbers less than %d:", m, n );

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

            printf( "\n M", zz[n] );

            NONO();

            }

             

            解題思路:

            本題是考察考生如何判斷一個數不是素數,如果所給出的數是非素數且小于指定的數,那

            么這些數應存放到指定的數組xx中保存,最后由形參xx返回。

            在給出的程序中函數isP就是判斷一個數是否是素數,若是非素數,則返回1,否則返回0。

            本題是用for(i=2;i循環語句分別判斷i是否為非素數,如果i是非素數,則把該數i

            存入數組xx中。其中,i是控制變量,m是試題給出的整數。

            參考答案:

            #include

            int isP(int m)

            {

             

             

             

             

            int j, tag = 0 ;

            for(j = 2 ; j < m && !tag ; j++)

            if(m % j == 0) tag = 1 ;

            return tag ;

            }

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

            {

            int i, cnt = 0 ;

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

            if(isP(i)) xx[cnt++] = i ;

            *k = cnt ;

            }

             

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

            80套:

            給定程序中,函數fun的功能是:將形參n中,各位上為偶數的數取出,并按

            原來從高位到低位的順序組成一個新的數,并作為函數值返回。

            例如,從主函數輸入一個整數:27638496,函數返回值為:26846。

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

            果。

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

             

             

             

             

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

            給定源程序:

            #include

            unsigned long fun(unsigned long n)

            { unsigned long x=0, s, i; int t;

            s=n;

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

            i=__1__;

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

            while(__2__)

            { t=s;

            if(t%2==0){

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

            x=x+t*i; i=__3__;

            }

            s=s/10;

            }

            return x;

            }

            main()

            { unsigned long n=-1;

            while(n>99999999||n<0)

            { printf("Please input(0

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

            }

            解題思路:

            第一處:對變量i賦初值,根據i的使用規則來看,i應等于1。

            第二處:while循環要求計算后的s應大于0,所以應填:s。

            第三處:每循環一次,i要乘以10,所以應填:i*10。

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

            給定程序MODI1.C中函數fun的功能是:輸出MM列整數方陣,然后求兩條對

            角線上元素之和,返回此和數。

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

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

            給定源程序:

            #include

            #define M 5

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

            int fun(int n, int xx[][])

            { int i, j, sum=0;

            printf( "\nThe %d x %d matrix:\n", M, M );

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

            { for( j = 0; j < M; j++ )

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

            printf( "%f ", xx[i][j] );

            printf("\n");

            }

             

             

             

             

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

            sum += xx[i][i]+xx[i][ n-i-1 ];

            return( sum );

            }

            main( )

            { int aa[M][M]={{1,2,3,4,5},{4,3,2,1,0},

            \TAB \TAB {6,7,8,9,0},{9,8,7,6,5},{3,4,5,6,7}};

            printf ( "\nThe sum of all elements on 2 diagnals is %d.",fun( M, aa ));

            }

            解題思路:

            第一處:形參必須定義字符串數組的長度,所以應改為:int fun(int n,int xx[][M])。

            第二處:由于xx是整型的雙維數組,不能用浮點型輸出,所以應改為:printf("%d

            ",xx[i][j]);。

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

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

            中。合并的方式是:a中的十位和個位數依次放在變量c的千位和十位上,b中的

            十位和個位數依次放在變量c的個位和百位上。

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

            注意: 部分源程序存在文件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=(a/10)*1000+(b)*100+(a)*10+(b/10);

            }

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