PTA 基礎程式設計題目集 -函式12題
阿新 • • 發佈:2019-02-18
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;
}