当前位置: 代码迷 >> C语言 >> [求助]C语言题急寻解体者!谢谢
  详细解决方案

[求助]C语言题急寻解体者!谢谢

热度:218   发布时间:2007-06-19 22:24:49.0
[求助]C语言题急寻解体者!谢谢
1. 从键盘输入20个数,放入数组中,然后求它们的平均值;

2. 用随机函数产生整数100个,放入数组中,然后求其中的最大值和最小值并输出最大值最小值在数组中的位置;

3.输入一批数求其平均值,并找出与平均值最接近的数;

4.用随机函数产生整数100个,放入数组中,然后按从大到小排列输出。

5. 已知级数前三项为:x0=0,x1=0,x2=1, 下一项为前三项之和,请编程求出该级数的前20项,并要求每5个数为一行输出;
搜索更多相关的解决方案: C语言  解体  

----------------解决方案--------------------------------------------------------

1. 从键盘输入20个数,放入数组中,然后求它们的平均值;


#include <stdio.h>

#define n 20

void main()
{
int a[20],i;
float sum=0;
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n;i++)
sum+=a[i];
sum=sum/n;
printf("avgerage is: %.2f\n",sum);
}


----------------解决方案--------------------------------------------------------

5. 已知级数前三项为:x0=0,x1=0,x2=1, 下一项为前三项之和,请编程求出该级数的前20项,并要求每5个数为一行输出;



#include <stdio.h>
#define n 20 //可以改变n的值输出不同的结果
void main()
{
int i,a[n],m;
a[0]=a[1]=0;
a[2]=1;

for(i=3;i<n;i++)
a[i]=a[i-1]+a[i-2]+a[i-3];
m=0;
for(i=0;i<n;i++)
{
m++;
printf("%d ",a[i]);
if(m%5==0&&i!=0)
printf("\n");
}
}


----------------解决方案--------------------------------------------------------
5. 已知级数前三项为:x0=0,x1=0,x2=1, 下一项为前三项之和,请编程求出该级数的前20项,并要求每5个数为一行输出:


#include <stdio.h>

int f(int);
void main()
{
for(int i=0;i<20;i++)
{
printf("%d\t",f(i));
if(i%5==4)
printf("\n");
}
return;
}


int f(int n)
{
if(n==0||n==1)
return 0;
if(n==2)
return 1;
if(n>2)
return f(n-3)+f(n-2)+f(n-1);
}

----------------解决方案--------------------------------------------------------
4.用随机函数产生整数100个,放入数组中,然后按从大到小排列输出:


#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 100


void qsort(int[],int,int);
int findpivot(int[],int,int);
int partition(int[],int,int,int);
void swap(int[],int,int);
void main()
{
srand(time(NULL));
int A[SIZE];
for(int n=0;n<SIZE;n++)
{
A[n]=rand();
}
qsort(A,0,99);
for(n=0;n<SIZE;n++)
printf("%d\n",A[SIZE-n]);
return ;
}

void qsort(int A[],int i,int j)
{
if(j<=i)return ;
int pivotindex=findpivot(A,i,j);
swap(A,pivotindex,j);
int k=partition(A,i-1,j,A[j]);
swap(A,k,j);
qsort(A,i,k-1);
qsort(A,k+1,j);
}


int findpivot(int A[],int i,int j){return (i+j)/2;}

int partition(int A[],int l,int r,int pivot)
{
do
{
while(A[++l]<pivot);
while((r!=0)&&A[--r]>pivot);
swap(A,l,r);
}while(l<r);

swap(A,l,r);
return l;
}

void swap(int A[],int a,int b)
{
int hold=A[a];
A[a]=A[b];
A[b]=hold;
}

----------------解决方案--------------------------------------------------------
用指针不是更简单吗?
用选择法,对100个数排序就可以了。
----------------解决方案--------------------------------------------------------

#define SIZE 100
void main()
{
srand(time(NULL));
int A[SIZE];
for(int n=0;n<SIZE;n++)
{
A[n]=rand();
}
int *p,i;
p=A;sort(p,SIZE)
for(p=A;i<SIZE;i++)
{
printf("%d",*p);
p++;
}
}
sort(int *x,int n)
{
int i,j,k,t;
for(i=0;i<n;i++)
{
k=i;
for(j=i+1;j<n;j++)
if (*(x+i)<(x+k))
k=j;
if(k!=i)
{
t=*(x+i);*(x+i)=*(x+k);*(x+k)=t;
}
}
}
这样应该可以。
我没运行。可以试下。


----------------解决方案--------------------------------------------------------
  相关解决方案