4-1 简单输出整数 (10分)
void PrintN(int N) { int i,sum=0; for(i=1; i<=N; i++) printf("%d\n",i); }
4-2 多项式求值 (15分)
double f( int n, double a[], double x ) { int i; double sum; for(i=0; i<=n; i++) { if(i==0) sum+=a[i]; else if(i==1) sum+=a[i]*x; else { x*=x; sum+=a[i]*x; } } return sum; }
4-3 简单求和 (10分)
int Sum ( int List[], int N ) { int i,sum=0; for(i=0;i<N;i++) sum+=List[i]; return sum; }
4-4 求自定类型元素的平均 (10分)
ElementType Average( ElementType S[], int N ) { int i; double sum,ave; for(i=0; i<N; i++) sum+=S[i]; ave=sum/N; return ave; }
4-5 求自定类型元素的最大值 (10分)
ElementType Max( ElementType S[], int N ) { int i,j,temp; for(i=0; i<N-1; i++) for(j=0; j<N-i-1; j++) { if(S[j]<S[j+1]) { temp=S[j]; S[j]=S[j+1]; S[j+1]=temp; } } return S[0]; }
4-6 求单链表结点的阶乘和 (15分)
int fun(int n) { if(n==0 || n==1) return 1; else return n*fun(n-1); } int FactorialSum( List L ) { int sum = 0; while(L!=NULL){ int m = fun(L->Data); sum += m; L = L->Next; } return sum; }
4-7 统计某类完全平方数 (20分)
int IsTheNumber ( const int N ) { int M=N; double m=sqrt(N); int m1=sqrt(N),a[10]= {0},i,j,c=0; if(m>m1) return 0; else { while(M>0) { j=M%10; a[j]++; M=M/10; } for(i=0; i<10; i++) { if(a[i]>1) c=1; if(c==1) break; } if(c==1) return 1; else return 0; } }
4-8 简单阶乘计算 (10分)
int Factorial( const int N ) { int i,fac=1; if(N<0) return 0; else { for(i=1; i<=N; i++) fac*=i; return fac; } }
4-9 统计个位数字 (15分)
int Count_Digit ( const int N, const int D ) { int i,num=0,M; if(N>=0) M=N; else M=-N; if(M==0) { if(D==0) return 1; else return 0; } else { while(M>0) { i=M%10; if(i==D) num++; M=M/10; } } return num; }
4-10 阶乘计算升级版 (20分)
void Print_Factorial( const int N ) { int i,j,f[3200]= {0}; f[0] = 1; if(N<0) printf("Invalid input"); else { for(i=2; i<=N; i++) { int c = 0; for(j=0; j<3200; j++) { int s = f[j]*i+c; f[j]=s%10; c = s/10; } } for(j = 3199; j >= 0; j--) { if(f[j]!=0) break; } for(i=j; i>=0; i--) { printf("%d",f[i]); } } }
4-11 求自定类型元素序列的中位数 (25分)
void mergearray(ElementType A[],int first,int mid,int last,ElementType temp[]) { int i=first,j=mid+1,m=mid,n=last,k=0; while(i<=m&&j<=n){ if(A[i]<=A[j]){ temp[k++]=A[i++]; } else{ temp[k++]=A[j++]; } } while(i<=m){ temp[k++]=A[i++]; } while(j<=n){ temp[k++]=A[j++]; } for(i=0;i<k;i++){ A[first+i]=temp[i]; } } void mergesort(ElementType A[],int first,int last,ElementType temp[]) { if(first<last){ int mid=(first+last)/2; mergesort(A,first,mid,temp); mergesort(A,mid+1,last,temp); mergearray(A,first,mid,last,temp); } } ElementType Median( ElementType A[], int N ) { ElementType p[MAXN]; mergesort(A,0,N-1,p); return A[N/2]; }
4-12 判断奇偶性 (10分)
int even( int n ) { if(n%2==0) return 1; else return 0; }