1.本题要求实现一个计算m~n(m<n)之间所有整数的和的简单函数。
函数接口定义:
int sum( int m, int n );
其中m
和n
是用户传入的参数,保证有m<n。函数返回的是m~n之间所有整数的和。
int sum( int m, int n )
{
int sum=0;
sum=(n-m+1)*(n+m)/2;//等差数列求和公式
return sum;
}
2.
本题要求实现函数输出n行字符金字塔。
函数接口定义:
void CharPyramid( int n, char ch);
其中n
和ch
是用户传入的参数,n为[1, 9]的正整数。要求函数按照如样例所示的格式打印出n
行由字符ch
构成的字符金字塔。注意每个字符后有一个空格。
void CharPyramid( int n, char ch)
{
for(int i=0;i<n;i++)
{
for(int j=n-i-1;j>0;j--)
{
printf(" ");
}
for(int j=0;j<i+1;j++)
{
printf("%c ",ch);
if(j==i)
{
printf("\n");
}
}
}
}
3.
本题要求实现一个统计整数中指定数字的个数的简单函数。
函数接口定义:
int CountDigit( int number, int digit );
其中number
是不超过长整型的整数,digit
为[0, 9]区间内的整数。函数CountDigit
应返回number
中digit
出现的次数。
int CountDigit( int number, int digit )
{
int count=0;
if(number<0)
{
number=-number;
}
if(number==0&&digit==0)
{
return 1;
}
while(number>0)
{
if(number%10==digit)
{
count++;
}
number=number/10;
}
return count;
}
4.
水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:153=13+53+33。 本题要求编写两个函数,一个判断给定整数是否水仙花数,另一个按从小到大的顺序打印出给定区间(m,n)内所有的水仙花数。
函数接口定义:
int narcissistic( int number ); void PrintN( int m, int n );
函数narcissistic
判断number
是否为水仙花数,是则返回1,否则返回0。
函数PrintN
则打印开区间(m
, n
)内所有的水仙花数,每个数字占一行。题目保证100≤m
≤n
≤10000。
int narcissistic( int number )
{
int gw,sw,bw,qw;
gw=number%10;
sw=(number/10)%10;
bw=(number/100)%10;
qw=number/1000;
if(number>99&&number<1000)
{
if(gw*gw*gw+sw*sw*sw+bw*bw*bw==number)
return 1;
}
else if(number>999&&number<10000)
{
if(gw*gw*gw*gw+sw*sw*sw*sw+bw*bw*bw*bw+qw*qw*qw*qw==number)
return 1;
}
return 0;
}
void PrintN( int m, int n )
{
for(int i=m+1;i<n;i++)
{
if(narcissistic(i))
{
printf("%d\n",i);
}
}
}
5.
本题要求实现一个函数,用下列公式求cos(x)的近似值,精确到最后一项的绝对值小于e:
cos(x)=x0/0!−x2/2!+x4/4!−x6/6!+⋯
函数接口定义:
double funcos( double e, double x );
其中用户传入的参数为误差上限e
和自变量x
;函数funcos
应返回用给定公式计算出来、并且满足误差要求的cos(x)的近似值。输入输出均在双精度范围内。
double funcos( double e, double x )
{
double fact(int n)
{
double result = 1;
for (int i = 1; i <= n; i++) {
result *= i;
}
return result;
}
double sum = 1.0;
double fz = 1.0, fm = 1.0;
int n = 2;
int flag = -1;
while (fabs(fz / fm) >= e)
{
fz = pow(x, n);
fm = fact(n);
sum += flag * (fz / fm);
flag = -flag;
n += 2;
}
return sum;
}