设计一个函数,该函数用于求一个任意大小的二维double型数组的平均值。
该函数的名字叫做matrixAvg
请使用下面的main函数测试你设计的函数
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int N,M;
scanf(“%d %d”,&M,&N);
double A[M][N];
for(int i=0;i<M;i++)
{
for(int j=0;j<N;j++)
{
scanf(“%lf”,&A[i][j]);
}
}
double sum=0;
for(int i=0;i<M;i++)
{
for(int j=0;j<N;j++)
{
sum=sum+A[i][j];
}
}
int d=M*N;
printf(“%.2f”,sum/d);
return 0;
}
计一个函数,该函数用于实现一维数组的循环右移。
函数原型为:
void arrayShiftRight(int a[ ],int n,int m);
该函数的功能是将长度为n的数组a循环右移m个位置。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int m,n;
scanf(“%d %d”,&n,&m);
int A[n];
int B[n];
for(int i=0;i<n;i++)
{
scanf(“%d”,&A[i]);
}
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(j==n-1)
{
B[0]=A[j];
}
else B[j+1]=A[j];
}
for(int j=0;j<n;j++)
{
A[j]=B[j];
}
}
for(int i=0;i<n;i++)
{
printf(“%d “,A[i]);
}
return 0;
}
本题要求实现一个对整数数组进行简单排序的函数。
函数原型为:void sort( int a[], int n );
其中
a
是待排序的数组,
n
是数组
a
中元素的个数。该函数用某种方法将数组
a
中的元素按升序排列,结果仍然在数组
a
中。
#include <stdio.h>
#include <stdlib.h>
void work(int ints[],int n)
{
int t=0;
while(t==0)
{
t=1;
for(int i=0;i<n;i++)
{
if(ints[i]>ints[i+1])
{
int temp=ints[i];
ints[i]=ints[i+1];
ints[i+1]=temp;
t=0;
}
}
}
}
void Printf(int ints[],int n)
{
printf(“After sorted the array is: “);
for(int i=0;i<n;i++)
{
printf(“%d “,ints[i]);
}
}
int main()
{
int n;
scanf(“%d”,&n);
int ints[n];
for(int i=0;i<n;i++)
{
scanf(“%d”,&ints[i]);
}
work(ints,n);
Printf(ints,n);
return 0;
}
本题要求实现一个求整数的逆序数的简单函数。
函数原型为:int reverse( int number );
其中函数
reverse
须返回用户传入的整型
number
的逆序数。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int reverse(int n)
{
int N=1;
int t=10;
for(;abs(n)/1>=10;t=t*10)
{
if(abs(n)/t>0) N=N+1;
else break;
}
int A[N];
for(int i=0;i<N;i++)
{
t=t/10;
A[i]=n/t;
n=n-A[i]*t;
}
int B[N];
for(int i=0;i<N;i++)
{
B[i]=A[N-1-i];
}
for(int i=0;i<N;i++)
{
A[i]=B[i];
}
int result=0;
t=1;
for(int i=N-1;i>=0;i–)
{
result=A[i]*t+result;
t=t*10;
}
if(A[N-1]==0)
result=result/10;
return result;
}
int main()
{
int n;
scanf(“%d”,&n);
printf(“%d\n”,reverse(n));
return 0;
}
本题要求的程序功能是:首先在main函数中输入10个数,然后在被调函数ave中求出这10个数的平均值,最后在main函数中输出结果。要求写出函数ave。
函数原型为:double ave(double a[],int n);
其中
a
和
n
是由主调函数传入的参数。
#include <stdio.h>
#include <stdlib.h>
double ave(double x[],int N)
{
double sum=0;
double result;
for(int i=0;i<N;i++)
{
sum=sum+x[i];
}
result=sum/N;
return result;
}
int main()
{
int N;
scanf(“%d”,&N);
double x[N];
for(int i=0;i<N;i++)
{
scanf(“%lf”,&x[i]);
}
double p=ave(x,N);
printf(“ave=%.2f\n”,p);
return 0;
}
若两个复数分别为:c1=x1+y1i 和c2=x2+y2i,则它们的乘积为 c1×c2=(x1x2−y1y2)+(x1y2+x2y1)i。
本题要求实现一个函数计算两个复数之积。
#include <stdio.h>
#include<string.h>
double result_real, result_imag;
void complex_prod( double x1, double y1, double x2, double y2 )
{
result_real=x1*x2-y1*y2;
result_imag=x1*y2+x2*y1;
}
int main(void) {
double imag1, imag2, real1, real2;
scanf(“%lf %lf”, &real1, &imag1);
scanf(“%lf %lf”, &real2, &imag2);
complex_prod(real1, imag1, real2, imag2);
printf(“product of complex is (%f)+(%f)i\n”, result_real, result_imag); return 0;
}
本题要求实现一个函数,统计给定区间内的三位数中有两位数字相同的完全平方数(如144、676)的个数。
函数原型为:int search( int n );
其中传入的参数
int n
是一个三位数的正整数(最高位数字非0)。函数
search
返回[101,
n
]区间内所有满足条件的数的个数。
#include<stdio.h>
int search( int n )
{
int i,j,a=0,b,c,e;
for(i=101;i<=n;i++)
{
e=i/100;
b=(i-e*100)/10;
c=(i-e*100-b*10);
if(e==b||b==c||e==c)
{
for(j=2;j<32;j++)
{
if(i%j==0)
if(i/j==j)
{
a++;
continue;
}
}
}
}
return(a);
}
void main()
{
int number;
scanf(“%d”,&number);
printf(“count=%d\n”,search(number));
}
本题要求实现求Fabonacci数列项的函数。Fabonacci数列的定义如下:
f(n)=f(n−2)+f(n−1) (n≥2),其中f(0)=0,f(1)=1。
函数原型如下:int f( int n );
函数
f
应返回第
n
个Fabonacci数。
#include<stdio.h>
int f( int n )
{
int a[n],i;
a[0]=1;a[1]=1;
for(i=2;i<n;i++)
a[i]=a[i-2]+a[i-1];
return(a[n-1]);
}
void main()
{
int n;
scanf(“%d”, &n);
printf(“%d\n”, f(n));}
本题引用自PTA,原作者:浙江大学陈越
本题要求实现一个计算非负整数阶乘的简单函数。函数原型为:int Factorial( const int N );
其中
N
是用户传入的参数,其值不超过12。如果
N
是非负整数,则该函数必须返回
N
的阶乘,否则返回0。
#include<stdio.h>
int Factorial(int N)
{
int a,i;
if(N<=0)
a=0;
else
for(a=1;N>0;N–)
{
a=a*N;
}
return(a);
}
void main()
{
int N, NF;
scanf(“%d”, &N);
NF = Factorial(N);
if (NF) printf(“%d! = %d\n”, N, NF);
else printf(“Invalid input\n”);
}
判断奇偶性
#include<stdio.h>
#include<string.h>
int even(int n)
{
if((n%2)==0)
return 1;
else
return 0;
}
int main()
{
int n;
scanf(“%d”, &n);
if (even(n))
{
printf(“%d is even.\n”, n);
}
else
{
printf(“%d is odd.\n”, n);
}
}
判断回文串
#include<stdio.h>
#include<string.h>
int whetheriscopy ( char a[10] )
{
char p[10];
int i,j;
j=strlen(a);
j–;
for(i=0;i<j&&a[i]==a[j];i++,j–);
if(i>=j)
{
return 1;
}
else
{
return 0;
}
}
int main()
{
char s[100];
gets(s);
if(whetheriscopy(s))
printf(“Yes”);
else
printf(“No”);
}
本题目要求计算下列分段函数f(x)的值:
#include<stdio.h>
int main()
{
float a,sum;
scanf(“%f”,&a);
if(a>=5)
{
sum=a*a+4*a-2;
printf(“f(%.1f) = %.1f”,a,sum);
}
else if(a>=0&&a<5)
{
sum=3*a+2;
printf(“%.1f”,sum);
}
else if(a<0)
{
sum=0;
printf(“%.1f”,sum);
}
}
函数求值
求子串定位函数无答案