欢迎光临散文网 会员登陆 & 注册

计算机二级C语言上机题库(七)

2021-03-01 08:09 作者:朝颜晚扶桑  | 我要投稿

编程题

一、 数字题

1、 将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位依次放在c个位和十位上,b的十位和个位依次放在c的百位和千位上。如当a=16,b=35,则c=5361

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

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

2、 将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个数依次放在c数的千位和十位上,b数的十位和个数依次放在c数的百位和个位上。例如:当a=45,b=12,调用该函数后,c=4152。

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

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

3、 将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的个位和百位上,b数的十位和个位数依次放在c数的千位和十位上。例如,当a=45,b=12,调用该函数后,c=1524

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

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

4、 将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的十位和千位上,b数的十位和个位数依次放在c数的个位和百位上。例如,当a=45,b=12,调用该函数后,c=5241。

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

{*c=a%10*1000+b%10*100+a/10*10+b/10;}

5、 将两个两位数的正整数a、b合并形成一个整数放在c中。合并方式是:将a数的十位和个位数依次放在c数的千位和十位上,b数的十位和个位数依次放在c数的个位和百位上。例如,当a=45,b=12,调用该函数后,c=4251。

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

{*c=a/10*1000+b%10*100+a%10*10+b/10;}

6、 将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的个位和百位上,b数的十位和个位数依次放在c数的十位和千位上。例如,当a=45,b=12,调用该函数后,c=2514。

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

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

7、 将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的百位和个位上,b数的十位和个位数依次放在c数的千位和十位上。例如,当a=45,b=12,调用该函数后,c=1425。

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

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

8、 将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的百位和个位上,b数的十位和个位数依次放在c数的十位和千位上。例如,当a=45,b=12,调用该函数后,c=2415.

Void  fun(int a,int b,int*c)

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

9、 将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的十位和千位上,b数的十位和个位数依次放在c数的百位和个位上。例如,当a=45时,b=12,调用该函数后,c=5142。

Void  fun(int a,int b,int*c)

{*c=a%10*1000+b/10*100+a/10*10+b%10;}

10、 求n以内(不包括n)同时能被5与11整除的所有自然数之和的平方根s并作为函数值返回。如:n为1000时,函数值应为s=96.979379。

double fun(int  n)

{double  s=0.0;int i;

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

If(i%5 = =0&&i%11= =0)s=s+i;

s=sqrt(s);return  s;}

11、 计算并输出给定整数n的所有因子(不包括1与自身)的平方和(规定n的值不大于100)。如:n的值为56,则输出为sum=1113。

long fun(int n)

{int i;long s=0;

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

if(n%i= =0)s+=i*i;return  s;}

12、 求n以内(不包括n)同时能被3与7整除的所有自然数之和的平方根s,并作为函数值返回。若n为1000时,s=153.909064

double  fun(int n)

{double s=0;int i;

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

if (i%3= = 0&&i%7= = 0)s+=1;s=sqrt(s);   return s;}

13、 计算并输出n(包括n)以内能被5或9整除的所有自然数的倒数之和。如,若给n输入20后,则输出为s=0.583333.

double  fun(int n)

{int i;double sum=0;

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

If(i%5= = 0||i%9= =0)sum+=1.0/i;    return  sum;}

14、 计算并输出3到n之间所有素数的平方根之和。如,若给n输入100后,则输出为sum=148.874270

double  fun (int n)

{int m,k,i;double s=0;

for(m=3;m<=n;m++){k=aqrt(m);

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

If(m%i= =0)break;

If(i>=k+1)s+=sqrt(m);}return s:}

15、 判断整数X是否是同构数。若是同构数,函数返回1;否则返回0。

int fun(int x)

(if(x<10)return (! ((x*x-x)%10));

else return (! ((x*x-x)%100));}

106、用筛选法求出100之内的素数

Void fun (int *pt)

{int i,j,flag;*pt=2;*pt++;

for(i=3;i<100;i++){flag=1;

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

If(i%j= =0)flag=0;

If(flag){*pt=i;*pt++;}}*pt=0;}

16、 返回小蚕需要多少天才能爬到树顶(树高k厘米,小蚕每天白天向上爬m厘米,每天晚上因睡觉向下滑n厘米,爬到顶后不再下滑)(n<m<k)。例如,若分别输入253、71、29给k、m、n,则输出结果为:6。

int day(int k,int m,int n)

{int days,height=0;

for(days=1;;days++){height+=m;if(height>=k)return days;height-=n;}}

17、 求Fibonacci数列中小于t的最大的一个数,结果由函数返回。其中数列F(n)的定义为F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)例如:t=1000时,函数值为987。

int fun(int t)

{int a=1,b=1,c=0,i;

do{c=a+b;a=b;b=c;}while(c<t);

c=a;return c;}

18、 求Fibonacci数列中大于T的最小的一个数,结果由函数返回。其中Fibonacci数列F(n)的定义为:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2 ) 例如,当t=1000时,函数值为1597。

int fun(int t)

{int a=1,b=1,c=0,i;

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

{if(c<t) {c=a+b;a=b;b=c; }

else break;}return c;}

19、 W是一个大于10的无符号整数,若w是n(n≥2)位的整数,则函数求出w的后n-1位的数作为函数值返回。例如:w值为5923,则函数返回923;若w值为923,则函数返回23。

unsigned fun(unsigned w)

{if(w>=10000) return w%10000;

If(w>=1000) return w%1000;

If(w>=100) return w%100;

If(w>=10)return w%10;}

20、 对变量h中的值保留两位小数,并对第三位进行四舍五入(规定h中的值为正数)。例如:若h值为8.32433,则函数返回8.32;若h值为8.32533,则函数返回8.33。

float fun (float h)

{long t;t=(h*1000+5)/10;

Return (float)t/100;}

21、 利用以下所示的简单迭代方法求方程cos(x)-x=0的一个实根。Xn-1=cos(xn)迭代步骤如下:(1)取x1初值为0.0;(2)x0=x1,把x1的值赋给x0;(3)x1=cos(x0),求出一新的x1;(4)若x0-x1的绝对值小于0.000001,则招待步骤(5),否则执行步骤(2);(5)所求z1就是方程cos(x)-x=0的一个实根作为函数值返回。输出结果Root=0.739085

Root=0.739085.

float fun0

{float x1=0.0,x0;   do{x0=x1;x1=cos(x0);}while(fabs(x0-x1)>=le-6);

Return x1;}

22、 根据以下公式计算s,计算结果通过形指针sn传回;s通过形参传入。SN=1/1-1/3+1/5-1/7+……(-1)^n/(2n-1)例如:若n的值为11时,S=0.764601

void fun(float*sn,int n)

{int i;float s=1;*sn=0;

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

{*sn=*sn+s*(1.0/(2*i+1));s=-s;}}

23、 S=(1+1/2)+(1/3+1/4)+……+(1 (2n-1)+1/2n如:若给n输入12后  则输出为S=3.775958。n的值要求大于1但不大于100。

double fun(int n)

{int i;double s=0.0;

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

s=s+(1.0/(2*i-1)+1.0/(2*1));return s;}

24、 计算:s=(1-1n(1)-1n(2)- (3)-…1n(m))2s作为函数值返回。在C语言中可调用log(n)函数   求ln(n)。log函数的引用说明是double  log( double  x).如,若  的值为15,则函数值为723。57080  

double fun(int m)

{int i;double s=1.0;

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

return(s*s);}

25、 计算下列级数,和值由函数值返回。S=1-x+x2/2!-x2/3!+……+(-1*  n/n!.如当n=15,x=0.5时,值为 0.606531.

Double fun(double x,int n)

{int i,j=1;double s=1.0,s1=1.0;

For(i=1;i<=n;i++){j=-1*j;s1=s1*i;

S=s+j*pow(x,i)/s1;}return s;}

26、 根据以下公式计算s,计算结果作为函数值返回;n通过形参传入。

S=1+1/(1+2)+1/(1+2+3)+……+1/(1+2+3+……+n)。若n的值为11时,值为1.833333。

float fun(int n)

{int i,s1=0;float s=0.0;

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

s=s+1.0/s1;}return s;}

27、 根据以下公式求P的值,结果由函数值带回。m与n为两个正数且要求m>n。P=m!/(n!(m-n)!) 例如:m=12,n=8时,运行结果为495.000000。

float fun (int m int n)

{int i;double p=1.0;

for(i=1;i<=m;i++) p=p*i;

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

for(i=1;i<=m-n;i++)p=p/i;

return p;}

28、 p的值(要求满足精度0.005,即某项小于0.005时停止迭代)。

      p/2=1+1/3+1*2/(3*5)+1*2*3/(3*5*7)+1*2*3*4/(3*5*7*9)+…+1*2*3*…*n/(3*5*7*…*(2n+1)),如果输入精度0.0005,则程序输出3.140578。

double fun(double eps)

{double s=1.0,s1=1.0;int n=1;while(s1>=eps){s1=s1*n/(2*n+1);

s=s+s1;n++;}return 2*s;}

29、 S=1/(1×2)+1/(2×3)+……+1/(n×(n+1))例如,当n=10时,函数值为0.909091。

double fun(int n)

{int i;double s=0.0;for(i=1;i<=n;i++)s=s+1.0/(i*(i+1));return s;}

30、 计算并输出给定10个数的方差。

S=[ ∑(xk-x2)  ]0.5

 

其中x2=             

              K=1

例如,给定的10个数为95.0,89.0,76.0,95.0,88.0,72.0,85.0,81.0,90.0,56.0,则输出为S=11.730729。

Double fun(double  x[10])

{double x1=0.0,s=0.0;int i;

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

x1=x1/10;

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

s+=(x[i]-x1)*(x[i]-x1);

return sqrt(s/10);}

31、 S=(1-1/2)+(1/3-1/4)+…+(1/(2n-1)-1/2n。例如,若给n输入8后,则输入为S=0.662872。

double fun(int n)

{int i;double s=0.0;

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

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

Return s;}

32、 计算s=(1n(1)+1n(2)+1n(3)+…+1n(m))0.5.可调用log(n)函数求ln(n)。若m的值为20,则函数值为6.506583。

double fun(int m)

{int i;double s=0.0;

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

return sqrt(s);}

33、 计算下列和值由函数值返回。S=1+x+x2/2!+x3/3!+…+xn/n!例如,当n=10,x=0.3时,函数值为1.349859。

S=1+x+x2/2!+x3/3!+……xn/n!例如,当n=10,x=0.3时,函数值为1.349859。

double fun(double x,int n)

{int i;double s=1.0,s1=1.0;

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

s=s+pow(x,i)/s1;}return s;}

34、 S=1+(1+20.5)+(1+20.5+30.5)+…+(1+20.5+30.5)+…+(1+20.5+30.5+…+n0.5)如,若给n输入20后,则输出为S=534.188884。

double fun(int n)

{int i;double s=0.0,s1=0.0;

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

{s1=s1+pow(i,0.5);s=s+s1;}

return s;}

35、 Sn=1+1/1!+1/2!+1/3!+1/4!+…+1/n!如,若给n输入15,则输出为s=2.718282.

double fun(int n)

{double t,sn=1.0;int i,j;

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

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

sn+=1.0/t;}return sn;}

36、 计算并输出当x<0.97时下列多项   式的值,直到[Sn-Sn-1]<0.000001为止。

Sn=1+0.5x+(0.5*(0.5-1))/2!*x3(0.5*(0.5-1)*(0.5-2))/3!*x3+…+(0.5*(0.5-1)*(0.5-2))*…(0.5-n+1))/n!*xn.若给x输入0.21后,则输出为s=1.100000。

double fun(double x)

{double

S1=1.0,p=1.0,sum=0,s0,t=1;

int n=1;do{s0=s1;sum+=s0;t*=n;p*=(0.5-n+1)*x;s1=p/t;n++;}while(fabs(s1-s0)>=le-6);return sum;}

数组题

37、 求出一个2×M整型二维数组中最大元素的值,并将此值返回调用函数。

fun (int a[][M])

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

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

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

if(max<a[i][j])max=a[i][j];

return max;}

38、 求出一个4×M整型二维数组中最小元素的值,并将此值返回调用函数。

fun (int a[][M])

{int i,j,min=a[0][0];

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

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

If(min>a[i][j])min=a[i][j];

Return min;}

39、 求出二维数组每列中最大元素,并依次放入PP所指的一维数组中。

void fun(int tt[M][N],int pp[N])

{int i,j,max;

for(j=0;j<N;j++){max=tt[0][j];

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

If(tt[i][j]>max)max=tt[i][j];pp[j]=max;}}

40、 程序定义了N×N的二维数组,给数组周边元素置0值。

fun (int w[][N])

{int i,j;

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

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

if(i= =0︳︳i= =N-1︳︳j= =0︳︳j==N-1)

W[i][j]=0;}

41、 程序定义了N×N的二维数组,使数组中第一行元素中的值与倒数第一行元素中的值对调、第二行元素中的值与倒数第二行元素中的值对调、……、其他依次类推。

例如:a数组中的值为

0 11 12 7 9

1 9 7 4 5

20 13 18 3 1

14 5 6 8 2

15 9 17 4 1

则返回主程序后a数组中的值应为

15 9 17 4 1

14 5 6 8 2

20 13 18 3 1

1 9 7 4 5

0 11 12 7 9

int fun(int a[][N])

{int i,j,k;

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

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

{k=a[i][j];a[i][j]=a[N-i-1][j];a[N-i-1][j]=k;}}

42、程序定义了N×N的二维数组,使数组中第一行元素中的值与最后一列元素中的值对调、第二列元素中的值与倒数第二列元素中的值对调、……、其他依次类推。例如:a数组中的值为

0 11 12 7 9

1 9 7 4 5

20 13 18 3 1

14 5 6 8 2

15 9 17 4 1

则返回主程序后a数组中的值应为

9 7 12 11 0

5 4 7 9 1

1 3 18 13 20

2 8 6 5 14

1 4 17 9 15

Int fun(int a[][N])

{int i,j,k;

For(i=0;i<N/2;i++)

For(j=0;j<N;j++)

{k=a[j][i];a[j][i]=a[j][N-i-1];a[j][N-i-1]=k;}}

43、下列程序定义了N×N的二维数组,并在主函数中自动赋值。编写函数:使数字右上半三角元素中的值乘m。例如,若m的值为2,a数组中的值为

 a=1 9

   2 7

则返回主程序后a数组的值应为

18

14

int fun(int a[][N],int m)

{int i,j;

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

for(j=I;j<N;j++)a[i][j]*=m;}

44、程序定义了N×N的二维数组,使数组左下半三角元素中的值加上n。如:若n的值为3,a数组中值为

a= 2 5 4

1 6 9

5 3 7

则返回主程序后a数组中的值应为

5 5 4

4 9 9

8 6 10

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

{int i,j;

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

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

a[i][j]=a[i][j]+n;}

45、下列程序N×N的二维数组 ,并在主函数中赋值。编写函数:求出数组周边元素的平方和并作为函数值返回给主函数中的s。例如:若a数组中的值为

a=0 1 2 7 9

1 11 21 5 5

2 21 6 11 1

9 7 9 10 2

5 4 1 4 1

则返回主程序后的s值310.

int fun (int w[][N])

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

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

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

if(i= =0||i==N-1||j= =0||j= =N-1)

s=s+w[i][j]*w[i][j];return s;}

46、下列程序N×N的二维数组 ,并在主函数中赋值。求出数组周边元素的平均值并作为函数值返回给主函数中的s。若a数组中的值为

 a =0 1 2 7 9

1 9 7 4 5

2 3 8 3 1

4 5 6 8 2

5 9 1 4 1

则返回主程序后的s值应为3.375。
double fun (int w[][N])

{int i,j,k=0;double av=0.0;

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

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

if(i= =0||i= =N-1||j= =0||j= =N-1)

{av=av+w[i][j];k++;}return av/k;}

47、求出二维数组周边元素之和,作为函数值返回。二维数组中的值在主函数中赋予。例如:若二维数组中的值为

1 3 5 7 9

2 9 9 9 4

6 9 9 9 8

1 3 5 7 0

则函数值为61。

int fun(int a [M][N])

{int i,j,sum=0;

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

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

if(i= =0||i= =M-1||j= =0||j= =N-1)

sum=sum+a[i][j];return sum;}

48、实现矩阵(3行3列)的转置(即行列互换)。例如,若输入下面的矩阵:

100  200  300

400  500  600

700  800  900

则程序输出:

100  400  700

200  500  800

300  600  900

int fun (int array[3][3])

{int i,j,t;

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

for(j=i+1;j<3;j++){t=array[i][j];

array[i][j]=array[j][i];

array[j][i]=t;}}

49、实现B=A+A,即把矩阵加上A的转置,存放在矩阵B中。

输入下面矩阵: 1 2 3

4 5 6

7 8 9

 

其转置矩阵为: 1 4 7

2 5 8

3 6 9

则程序输出:2 6 10

6 10 14

10 14 18

Void fun(int a[3][3],int b[3][3])

{int i,j;

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

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

b[i][j]=a[i][j]+a[j][i];}

50、将M行N列的二维数组中的数据按列的顺序依次放到一维数组中,例如,二维数组中的数据为:

33 33 33 33

44 44 44 44

55 55 55 55

则一维数组中的内容应该是

33,44,55,33,44,55,33,44,55,33,44,55。

Void fun(int (*s)[10],int *b,int *n,int ㎜ int m)

{int x,y;

For(x=0;x<nn;x++)

For(y=0,y<mm;y++)

{b[x*mm+y]=*(s[y]+x);(*n)++;}}

51、将M行N列的二维数组中的数据,按行的顺序依次放到一维数组中,一维数组中数据的个数存放在形参n所指的存储单元中。若二维数组中的数据为:

33 33 33 33

44 44 44 44

55 55 55 55

则一维数组中的内容应该是

33,33,33,33,44,44,44,44,55,55,55,55.

Void fin (int (*s)[10],int*b, int*n, int mm, int m)

{int i,j,k=0;

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

for(j=0;j<nn;j++)b[k++]=s[i][j];

*n=k;}

52、求出一个M×N二维数组每行元素的和数,并依次放入一个一维数组中传回主函数。例如,若有以下二维数组:

6 10 2 10 16

17 15 15 8 6

4 18 11 19 12

0 12 1 3 7

则输出:44,61,64,23

fun (int a[][N],int b[])

{int i,j,sum=0,n=0,

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

{for(j=0;j<N;j++)sum+=a[i][j];

b[n++]=sum;sum=0;}}

53输出一个如下的n阶方阵。变量n文件c9670503.In中。例如若读入4或5,则分别输出1  2   3   4

8  7   6   5

9  10  11  12

16  15  14  13

1 2 3 4 5

10 9 8 7 6

11 12 13 14 15

20 19 18 17 16

25 24 23 22 21

Void Mtrx(int)

{int a[M]={0},d=0,I,j,k;} *fp;

Fp=fopen(dat52.dat,w);

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

{for(j=0;j<n;j++){d+;a[j] if(i%2)  for(k=0;k<n;k++)

{printf(%3d  ,

a[k]);fprintf(fp,%3d,a[k]);}

else for(k=n-1;k>=0;k--)

{print(\n);fprintf(fp,\n)

Fclose(fp);}

54、求数组的最小元素在数组中下标存放在k所指的存储单元中。如输  234,345,753,134,436,458,100, 5,760则输出结果为6,100。

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

{inti;*k=0;for(i=0;i<t;i++)if(s[*k]>s[i])*k=i;}

55、找出一维数组元素中最大的值和它所在的下标,最大值和它所在的下标通过形参传回。数组元素中的值已居主函数中赋予。主函数中x是数组名,n是x中的数据个数,max存放最大值,index存放最大值所在元素的下标。

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

{int i;*max=a[0];*d=0;

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

if (*max<a[i]){*max=a[i];*d=i;}}

56、把20个随机数存入一个数组,然后输出该数组中的最小值。

int fun(int list[],int size)

{int x,i;x=0;

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

if(list[x]>list[i])x=i;return x;}

57、将数组xx(有n个元素)的前k个元素(k<n)移到数组的尾部,变为后k个元素,但是数组的这两段(原前k个元素为一段、另外的n-k个元素为一段)中元素的顺序不得改变。例如,若输入:7和 1 2 3 4 5 6 7,再输入:5,则输出应为:6 7 1 2 3 4 5。

Void Move(int n,int xx[],int k)

{int i,j,t;

for(i=0;i<k;i++){t=xx[0];

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

xx[j-1]=xx[j];xx[n-1]=t;}}

58、移动一维数组中的内容,若数组中有n个整数,要求把下标从p到n-1(p≤n-1)的数组元素平移到数组的前面,一维数组中的原始内容为

1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,P的值为6。移动后,一维数组中的内容应为7,8,9,10,10,11,12,13,14,15,1,2,3,4,5,6。

void fun(int *w,int p,int n)

{int i,j,t;

for(i=p;i<=n-1;i++){t=w[n-1];

for(j=n-2;j>=0;j- -)

W[j+1]=w[j];w[0]=t;}}

59、移动一维数组中的内容,若数组中有n个整数,要求把下标从0到P(P≤n-1)的数组元素平移到数组的最后,如一维数组中的原始内容应为1,2,3,4,5,6,7,8,9,10,10,11,12,13,14,15,P为3移动后一维数组中的内容应为5,6,7,8,9,10,11,12,13,14,15,1,2,3,4。

Void fun(int *w,int p,int n)

{int i,j,t;

For(i=0;i<=p;i++){t=w[0];

For(j=1;j<n;j++)

w[j-1]=w[j];w[j-1]=t;}}

60、删去一维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。若一维数组中的数据是:

2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10删除后,数组中的内容应该是:2,3,4,5,6,7,8,9,10。

Int fun(int a[],int n)

{int i,j=1;

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

if(a[j-1]!=a[i])a[j++]=a[i];return j;}

61、求出能整除X且不是奇数的各整数,并按从小到大的顺序放在PP所指的数组中,这些除数的个数通过形参n返回。若X中的值为24,则有6个数符合要求,它们是2,4,6,8,12,24。

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

{int i,j=0;

For(i=2;i<=x;i=i+2)

If(x%i= =0)pp[j++]=i;*n=j;}

62、求出能整除X且不是偶数的各整数,并按从小到大的顺序放在PP所指的数组中,这些除数个数通过形参n返回。若X中的值为30,则有4个数符合要求,它们是1,3,5,15。

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

{int i,j=0;

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

if(x%i= =0)pp[j++]=i;*n=j;}

63、将大于整数m且紧靠m的k个非素数存入所指的数组中。如,若输入15,5,则应输出16,18,20,21,22。

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

{int i,j,n;

for(i=m+1,n=0;n<k;i++)

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

if(i%j= =0){xx[n++]=i;break;}}

64、求出1到1000之内能被5或13整除、但不能同时被5和13整除的所有整数并将它们放在a所指的数组中,通过n返回这些数的个数。

void fun(int *a,int *n)

{int i,j=0;

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

if((i%5= =0||i%13= =0)&& i %65 !=0)

a[j++]=i;*n=j}

65、求出1到m(含m)之内能被7或11整除的所有整数放在数组a中,通过n返回这些数的个数。若传给m的值为50,输出7,11,14,21,22,28,33,35,42,44,49

void fun(int m,int *a,int *n)

{int i,j=0;

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

If(i%7= =0||i%11= =0)a[j++]=i;*n=j;}

66、求出1到1000之内能被7或11整除的所有整数,但不能同时被7和11整除的所有整数并将它们放在a所指的数组中,通过a返回这些数的个数。

void fun(int *a,int *n)

{int i,j=0;

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

if((i%7= =0||i%11= =0)&&i%77!=0)

a[j++]=i;*n=j;}

67、将大于整数m且紧靠m的k个素数存入所指的数组中。例如,若输入17,5则应输出19,23,29,31,37。

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

{int i,j,n;

for(i=m+1,n=0;n<k;i++)

{for(j=2;j<I;j++)if(i%j==0)break;

If(j>=i)xx[n++]=i;}}

68、求出小于或等于lim的所有素数并放在aa数组中,该函数返回所求出的素数的个数。

int fun(int lim,int aa[MAX])

{int i,j,k=0;

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

{for(j=2;j<i;j++)if(i%j= =0)break;

if(j>=i)aa[k++]=i;}return k;}

69、将所有大于1小于整数m的非素数存入XX所指数组,非素数的个数通过K传回。例如,输入17,则应输出4,6,8,9,10,12,14,15,16。

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

{int i,j,n=0;

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

{for(j=2;j<i;j++)if(i%j= =0)break;

if(j<i)xx[n++]=i;}*k=n;}

70、将所有大于1小于整数m的素数存入XX所指数组中,系数的个数通过k传回。输入25,则应输出2,3,5,7,11,13,17,19,23.

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

{int i,j,t,n=0;

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

{t=1;for(j=2;j<1;j++)

if(i%j= =0){t=0;break;}

if(t= =1)xx[n++]=i;}*k=n;}

71、m个人的成绩存放在score数组中,编写函数;将高于平均分的分数作为函数值返回,将高于平均分的分数放在up所指的数组中。如,当score数组中的数据为

24,35,88,76,90,54,59,66,96时,函数返回的人数应该是5,up中的数据应为88,76,90,66,96。

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

{int i,j=0;float av=0.0;

for(i=0;i<m;i++)av=av+score[i]/m;

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

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

return j;}

72、m个人的成绩存放在score数组中,编写函数;将低于平均分的分数作为函数值返回,将低于平均分的分数放在below所指的数组中,当score数组中的数据为

10,20,30,40,50,60,70,80,90时,函数返回的人数应该是4,below中的数据应为10,20,30,40.

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

{int i,j=0;float av=0.0;

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

av+= score[i]

av=av/m;

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

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

return j;}

73、计算n门课程的平均分,计算结果作为函数值返回。若有5门课程的成绩是90.5,72,80,61.5,55则函数的值为71.80

float fun(float *a,int n)

{float av=0.0;int i;

for(i=0;i<n;i++)av=av+a[i];

Return (av/n);}

74、统计各年龄段的人数。N个龄通过调用随机函数获得,并放在主函数的age数组中。要求函数把0至9岁年龄段的人数在d[0]中,把10至19岁年龄段的人数放在d(1)中,把20至29岁年龄段的人数放在d[2]中,依次类推,把100岁(含100)以上年龄的人数都放在d[10]中。结果在主函数中输出。

void fun(int *a,int*b)

{int i,j;

for(j=0;j<M;j++)b[j]=0;

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

if(a[i]>=100)b[10]++;

else b[a[i]/10]++;}

75、分别求出数组中所奇数之和以及所有偶数之和。形参n给出数组中数据的个数;利用指针odd返回奇数之和,利用指针even返回偶数之和。例如,数组中的值依次为:1,9,2,3,11,6;则利用用指针odd返回奇数之和24;利用指针even返回偶数之和8。

fun(int*a,int n,int*odd,int*even)

{int i;*odd=*even=0;

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

if(a[i]%2==1)*odd+=a[i];

else*even+=a[i];}

76、删除bb数组中所有值为Y的元素。

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

{int i,pos=*n-1;

for(;pos>=0;pos--)

if(bb[pos]= =y)

{for(i=os;i<*n-1;i++)

bb[i]=bb[i+1];(*n)- -;}}

77、求出数组dd中前k个数的小数的部分的和,并返回此值。若输入4和101.91、213.87、345.79、420.83,则输出3.4。

double Acc(int k,double dd[])

{int i,a;double b,sum=0;

for(i=0;i<k;i++){a=dd[i];

b=dd[i]-a;result+=b;}return sum;}

78、求出数组PP中n个数的整数部分的和,并返回此值。若输入4和11.91、23.87、35.79、40.83,则输出109.0,整数部分的值应小于10的16次方。

Double Pbt(int n,double pp[])

{int i,a;double sum=0;

for(i=0;i<n;i++){a=pp[i];sum+=a;}

return sum;}

79、计算并输出给定数组(长度为9)中每相邻两个元素之平均值的平方根之和。例如,给定数组中的9个元素依次为12.0、34.0、4.0、23.0、34.0、45.0、18.0、3.0、11.0,输出应为:S=35.951014。

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


计算机二级C语言上机题库(七)的评论 (共 条)

分享到微博请遵守国家法律