鸭子tv国产极品在线观看_成人69视频在线播放_91精品免费在线观看_亚洲AT永久偷窥无码精品_国产精品自产拍在线观看涩浪潮久

江蘇省高校計算機等級考試命題研究院 江蘇省高校計算機等級考試輔導
全國計算機二級C題庫第51--60套

 

 

本題目如果下載后發(fā)現(xiàn)有錯誤的地方,請聯(lián)系網(wǎng)站管理員:QQ121431055

 

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

 

51套:

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

作為函數(shù)值返回。為便于統(tǒng)計,規(guī)定各單詞之間用空格隔開。

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

的返回值為6。

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

果。

注意:源程序存放在考生文件夾下的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);

}

解題思路:

本題是統(tǒng)計字符串中包含的單詞個數(shù)。

第一處:單詞個數(shù)用變量n來統(tǒng)計,當當前字母不是空格且flag狀態(tài)標志為0時,則單詞數(shù)

就加1,將狀態(tài)標志flag置為1,所以應填:n++

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

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

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

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

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

元中。

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

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

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

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

給定源程序:

#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就可以了。

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

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

指的存儲單元中。

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

則輸出結果為: 6, 980

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

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

}

 

解題思路:

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

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

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

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

執(zhí)行語句*k=pos就可以實現(xiàn)返回了。

參考答案:

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套:

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

 

 

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

1 2 3

4 5 6

7 8 9

計算結果為

3 1 2

6 4 5

9 7 8

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

果。

注意:源程序存放在考生文件夾下的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");

}

}

解題思路:

第一處:函數(shù)fun是對N×N矩陣進行操作,for循環(huán)的終止值為N。

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

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

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

 

 

例如,若q的值為: 50.0,則函數(shù)值為: 49.394948

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

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

給定源程序:

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

}

解題思路:

第一處:如果兩個整數(shù)類型相除,結果仍為整數(shù),所以必須轉(zhuǎn)換其中一個數(shù)的類型,所以

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

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

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

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

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

F(0)0,F(1)1

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

例如:當t = 1000時,函數(shù)值為:1597。

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

請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入

你編寫的若干語句。

給定源程序:

#include

#include

int fun( int t)

 

 

{

}

main() /* 主函數(shù) */

{ int n;

n=1000;

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

NONO();

}

 

解題思路:

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

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

環(huán),執(zhí)行語句f=f0+f1;將所得和值存入f中,這就是數(shù)列的第3項,把f1的值移入f0中,將f

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

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

參考答案:

int fun( int t)

{

int f0 = 0, f1 = 1, f ;

do {

f = f0 + f1 ;

f0 = f1 ;

f1 = f ;

} while(f < t) ;

return f ;

}

 

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

53套:

函數(shù)fun的功能是:計算

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

果。

注意:源程序存放在考生文件夾下的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);

}

解題思路:

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

第二處:根據(jù)公式可知,此處應該除以n,所以應填:n

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

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

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

數(shù)56次方為15625, 此值的低3位值為625。

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

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

給定源程序:

#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循環(huán)語句上,根據(jù)試題要求,終止條件應該是i<=y

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

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

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

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

 

 

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

}

解題思路:

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

參考答案:

double fun(double x)

{

int n=1; /* 循環(huán)計數(shù)*/

double sn=1; /* 累計數(shù)*/

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套:

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

域中值之和作為函數(shù)值返回。

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

果。

注意:源程序存放在考生文件夾下的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");

}

}

解題思路:

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

第一處:累加數(shù)據(jù)域中的值,所以應填:data。

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

第三處:函數(shù)調(diào)用,在主函數(shù)中已經(jīng)給出了head,所以應填:head。

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

給定程序MODI1.C中函數(shù)fun的功能是:s所指字符串中出現(xiàn)的與t1所指字符

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

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

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

"ab",t2所指子串中的內(nèi)容為:"99"時, 結果在w所指的數(shù)組中的內(nèi)容應為:

"99cd99f99"

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

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

給定源程序:

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

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

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

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

形成的新串放在t所指數(shù)組中。

例如,當s所指字符串中的內(nèi)容為:"ABCDEFGHIJK",

t所指數(shù)組中的內(nèi)容應是:"BDFHJ"

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

請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)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循環(huán)語句來解決這個問

題。

參考答案:

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套:

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

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

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

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

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

果。

注意:源程序存放在考生文件夾下的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);

}

解題思路:

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

 

 

 

 

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

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

填:--

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

0。

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

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

2 3 5 8 13 21

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

1 2 3 5 8 13

和值通過函數(shù)值返回main函數(shù)。

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

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

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

給定源程序:

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

}

解題思路:

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

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

第二處:根據(jù)公式可知,在for循環(huán)內(nèi)b的值應是c。

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

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

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

出的語句僅供參考。

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

請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入

你編寫的若干語句。

給定源程序:

#include

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

{

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

 

 

 

 

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

while(j<=k)

{

/* 以下完成判斷素數(shù),并存放到數(shù)組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( ) ;

}

 

解題思路:

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

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

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

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

循環(huán)體中的for循環(huán)語句是判斷t是否是素數(shù)。

參考答案:

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

{

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

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

while(j<=k)

{

/* 以下完成判斷素數(shù),并存放到數(shù)組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作為字符串輸入結束的標志。然后將文件的內(nèi)容讀出顯

示在屏幕上。文件的讀寫分別由自定義函數(shù)ReadTextWriteText實現(xiàn)。

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

果。

注意:源程序存放在考生文件夾下的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);

}

}

解題思路:

本題要求是把鍵盤上輸入的內(nèi)容寫到指定的文件中。程序中共有三處要填上適當?shù)膬?nèi)容,

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

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

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

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

的內(nèi)容已存入字符串str變量中,因此,本處應填寫str

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

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

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

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

 

 

 

 

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

例如,當s中的數(shù)為:7654321時,t中的數(shù)為:7531。

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

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

給定源程序:

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

}

解題思路:

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

s,long *t)。

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

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

函數(shù)fun的功能是:將兩個兩位數(shù)的正整數(shù)ab合并形成一個整數(shù)放在c中。

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

和個位數(shù)依次放在c數(shù)的千位和十位上。

例如,當a45,b=12時,調(diào)用該函數(shù)后,c=1524。

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

請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入

你編寫的若干語句。

給定源程序:

#include

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

{

}

main()

{ int a,b; long c;

printf("Input a, b:");

scanf("%d,%d", &a, &b);

fun(a, b, &c);

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

NONO();

 

 

 

 

}

 

解題思路:

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

a十位數(shù)字的方法:a/10

a個位數(shù)字的方法:a

參考答案:

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

{

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

}

 

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

57套:

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

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

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

所指數(shù)組中的數(shù)據(jù)最初排列為:9、1、42、36、5、87;則按規(guī)則移動

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

據(jù)的個數(shù)。

注意:規(guī)定fun函數(shù)中的max存放當前所找的最大值,px存放當前所找最大

值的下標。

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

果。

注意:源程序存放在考生文件夾下的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");

}

解題思路:

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

a[i]。

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

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

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

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

項的值。從第1項起,斐波拉契數(shù)列為:1、1、2、35、8、13、21、……

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

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

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

給定源程序:

#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門課程的成績已

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

ave成員中。

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

是:78.875。

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

請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)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套:

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

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

 

 

 

 

字符串復制到形參t所指字符數(shù)組中。

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

組中的字符串應為:defgh。

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

果。

注意:源程序存放在考生文件夾下的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);

}

解題思路:

本題是根據(jù)要求來復制字符串。

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

以應填:t,s。

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

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

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

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

并作為函數(shù)值返回。

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

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

給定源程序:

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

}

解題思路:

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

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

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

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

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

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

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

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

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

請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)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且不是偶數(shù)的各整數(shù),并按從小到大的順序放在pp所指的數(shù)組中,

這些除數(shù)的個數(shù)通過形參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套:

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

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

例如,有下列矩陣:

1 2 13 4

7 8 10 6

 

 

 

 

3 5 9 7

程序執(zhí)行結果為:find: a[2][2]=9

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

果。

注意:源程序存放在考生文件夾下的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);

}

解題思路:

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

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

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

所以應填:0。

 

 

 

 

第三處:iwhile的控制變量,所以每做一次循環(huán),該數(shù)均要加1,所以應填:i++

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

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

值。

1 1 1

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

2*2 3*3 m*m

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

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

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

給定源程序:

#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循環(huán)計算公式,必須計算到m,所以應改為for(i=2; i<=m; i++)。

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

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

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

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

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

例如,當score數(shù)組中的數(shù)據(jù)為:1020、30、40、50、60、70、80、90時,

函數(shù)返回的人數(shù)應該是4, below中的數(shù)據(jù)應為: 10、2030、40

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

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

}

 

解題思路:

本題是計算平均成績,再把低于平均成績的分數(shù)存入依次數(shù)組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套:

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

num成員進行升序排列。

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

果。

注意:源程序存放在考生文件夾下的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);

}

解題思路:

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

 

 

 

 

第一處:由于在函數(shù)體fun中,已經(jīng)使用了std變量,所以應填:*std

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

第三處:函數(shù)的調(diào)用,所以應填:std。

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

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

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

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

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

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

給定源程序:

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

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

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

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

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

例如:a 數(shù)組中的值為

| 1 9 7 | | 0 9 7 |

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

| 4 5 6 | | 0 0 0 |

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

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

}

 

解題思路:

本題是利用兩重循環(huán)給二維數(shù)組左下三角元素中的值全部置成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 ;

}