當前位置:才華齋>計算機>C語言>

計算機二級C語言上機程式設計題詳細分析

C語言 閱讀(3.09W)

相信不少同學都認為計算機二級C語言上機程式設計題很難,所以今天本站小編為大家帶來計算機二級C語言上機程式設計題詳細分析,希望各位考生考出理想成績。

計算機二級C語言上機程式設計題詳細分析

1、請編一個函式fun,它的功能是:根據以下公式求π的值(要求滿足精度0.0005,即,某項小於0.0005時停止迭代):

程式執行後,如果輸入精度0.0005,則程式輸出多少。

注意:部分源程式存在PROG1.C中,請勿改動主函式和其他函式中的內容,僅在函式fun的指定的部位填入你編寫的若干語句。

試題源程式如下:

#include

#include

double fun(double eps)

{

}

main()

{ double x;

printf("Input eps:");

scanf("%lf",&x); printf("neps=%lf, PI=%lfn",x,fun(x));

}

分析:

(1)本題所用基本演算法應為累加。假設累加值放在變數s中,累加項放在變數t中,累加操作由語句s=s+t;來實現。

(2)若稱 為第1累加項,則其前的1為第0累加項,其後的一項為第2累加項,按給定的公式可知,從第1累加項開始,後一項的累加項是前一項的值乘以 。所以當前的累加項應當是:t=t*n/(2.0*n+1.0)。表示式右邊的t中是前一項的值,表示式左邊的t為當前的每累加累加項。請注意,不要寫成:t*n/(2*n+1)而進行整除。

(3)若第0累加項的1作為s的初值,語句:s=s+t;執行n次,就把第1到第n項累加到了s中。每進行一次累加,n值增1。

(4)把以上操作放在迴圈中。按本題規定,當某項小於eps(0.0005)時停止迭代,因此若用while迴圈,可用t>=eps作為控制迴圈進行的條件:

while( t>=eps ){ s+=t; n++; t=t*n/(2.0*n+1); }

(5)注意應給所用變數賦適當的初值。

(6)退出迴圈後,函式的返回值應是:2*s。2、請編一個函式fun,其中n所指儲存單元中存放了陣列中元素的個數。函式的功能是:刪除所有值為y的元素。已在主函式中給陣列元素賦值,y的值由主函式通過鍵盤讀入。

注意:部分源程式存在PROG1.C中,請勿改動主函式和其他函式中的內容,僅在函式fun的指定的部位填入你編寫的若干語句。

試題源程式如下:

#include

#define M 20

void fun(int bb[],int *n, int y)

{

}

main()

{ int aa[M]={1,2,3,3,2,1,1,2,3,4,5,4,3,2,1}, n=15, y, k;

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

for(k=0; k

fun(aa, &n, y);

printf("The data after deleted %d: n",y);

for(k=0; k

}

分析:

(1)本題的基本演算法是查詢和刪除。

(2)若迴圈控制變數是i,通過for迴圈逐個檢查元素中的值,把陣列元素中不等於y的值從頭開始重新放入bb所指的陣列中。用i作為下標,逐個引用陣列元素;用i作為下標,把不等於y的元素中的.值逐一重新放入bb所指的陣列中。這一操作可用以下語句來實現:

if(bb[i]!=y)bb[j++]=bb[i];

(3)因為已刪除了與y值相等的元素,因此,陣列中資料的個數已經改變;所以迴圈結束後,需要重新給n所指變數賦值。退出迴圈後,變數j中存放的是刪除後陣列中資料的個數,通過語句*n=j;把它賦給n所指變數即可。

(4)主函式中輸出aa陣列中原有的資料,和刪除後的資料。考生可以對照所編函式是否正確。3.請編寫一個函式void fun(char m,int k,int xx[]),該函式的功能是:將大於整數m且緊靠m的k個素數存入xx所指的陣列中。例如,若輸入17和5,則應輸出:19,23,29,31, 37。

注意:部分源程式存在PROG1.C中,請勿改動主函式和其他函式中的內容,僅在函式fun的指定的部位填入你編寫的若干語句。

試題源程式如下:

#include

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

{

}

main()

{ int m, n, zz[100];

printf("nPlease enter two integers(m & n): ");

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

fun(m, n, zz);

for(m=0; m

printf("nn");

分析:

(1)本題的基本演算法是求素數。假設有整數i,若i不能被2到i之間的任意一個數除盡,則i就是素數;若一旦能被某個數除盡就不是素數。

(2)以下是求i是否為素數的基本演算法:變數ok用作i是素數的標誌,ok為1,則i是素數。

ok=1;

for(p=2; p

if( i%p==0){ ok=0; break; }

if(ok)……

(3)本題要求把大於m的k個素數存入xx所指的陣列中。所以,i的值應大於m;取大於m的值逐一進行判斷,若是素數就放入xx所指陣列中。把以上語句放入一個迴圈中:

for( i=m+1,j=0; ? ; i++ )

{ ok=1;

for(p=2; p<=i/2; p++)

if( i%p==0 ){ ok=0; break; }

if (ok) { xx[j]=i;j++; }

}

此處,變數i統計存入陣列中元素的個數,同時作為下標。

(4)按本題的要求,外迴圈結束的條件應當是:j