-
使用函数求特殊a串数列和
给定两个均不超过9的正整数a和n,要求编写函数求a+aa+aaa++⋯+aa⋯a(n个a)之和。
要求定义并调用函数fn(a,n),它的功能是返回aa⋯a(n个a)
#include <stdio.h>
int fn(int a,int n)
{
int k =0,i;
for(i=1;i<=n;i++)
{
k = k+a;
a = a*10;
}
return k;
}
int main()
{
int a,n,s=0,t=0,j;
scanf("%d %d",&a,&n);
if(a>0 && n>0 && a<9 && n<9)
{
t = fn(a,n); //n=3时 t=aaa
for(j=1;j<=n;j++)
{
s = s+fn(a,j); //求和 n=3时,s=a+aa+aaa
}
printf("fn(%d, %d) = %d\n",a,n,t);
printf("s = %d\n",s);
}
return 0;
}
-
欧拉函数
在数论中,欧拉函数f(n)被定义为:小于等于n的正整数中和n互质的数的数目(互质即两者最大公约数为1)
如f(1)=1,因为与小于等于1的数中与1互质的数只有1
#include <stdio.h>
int f(int a)
{
int i,j,m,r,count=1;
if(a==1)
return 1; //如果输入的数为1,则只有1与其互质
else
{
count = 1;
for(i=2;i<=a;i++)
{
m=a;
j=i;
r = m%j; //若在此r ==0 则最大公约数即
while(j!=0) //辗转相除法
{
r=m%j;
m = j;
j = r;
}
if(m==1)
{
count++;
}
}
return count;
}
}
int main()
{
int t,n,i,sum=0;
scanf("%d",&t);
for(i=1;i<=t;i++)
{
scanf("%d",&n);
printf("%d\n",f(n)); //调用函数判断输入的数有几个互质
}
return 0;
}
-
使用函数验证哥德巴赫猜想
本题要求实现一个判断素数的简单函数,并利用该函数验证哥德巴赫猜想:任何一个不小于6的偶数均可表示为两个奇素数之和。素数就是只能被1和自身整除的正整数。
输入两个正整数m和n(0<=m<=n<=100),将m和n之间的偶数表示成两个素数之和,输出时每行显示5组。要求定义并调用函数prime(m)判断m是否为素数,当m为素数时返回1,否则返回0。
#include <stdio.h>
int prime(int p);
void print_g(int n);
int main()
{
int m,n,i,count=0;
scanf("%d %d",&m,&n);
if(m<6) m =6; //由于小于6的偶数不能考虑 所以只能从6~n
if(m%2!=0) //如果m不为偶数,则让它加1成为偶数
m++;
for(i=m;i<=n;i+=2) //此时m已为偶数,只需每次循环+=2即可
{
print_g(i);
count++;
if(count<5)
printf(", ");
else
{
printf("\n");
count = 0;
}
}
return 0;
}
int prime(int p)
{
int i;
for(i=2;i<=p/2;i++)
{
if(p%i==0) //判断素数
{
return 0;
}
}
if(i>p/2 && p!=1)
{
return 1;
}
}
void print_g(int n)
{
int i;
for(i=2;i<=n;i++)
{
if(prime(i)==1 && prime(n-i)==1) //两个加起来等于一个正整数的素数
{
printf("%d=%d+%d",n,i,n-i);
break;
}
}
}
-
使用递归函数输出指定范围内的Fibonacci数
本题要求实现一个计算Fibonacci数的简单函数,并利用其实现另一个函数,输出两正整数m和n(0<m≤n≤10000)之间的所有Fibonacci数。所谓Fibonacci数列就是满足任一项数字是前两项的和(最开始两项均定义为1)的数列。
要求定义并调用函数fib(n),它的功能是返回第n
项Fibonacci数。例如fib(7)返回值是13。定义并调用函数print_fn(m,n)输出给定范围[m
,n
]内的所有Fibonacci数,相邻数字间有一个空格。如果给定区间内没有Fibonacci数,则输出一行“No Fibonacci number”。
#include <stdio.h>
int fib(int t)
{
if(t<=2) //输入的数小于2时,都返回值1
return 1;
else
return fib(t-1)+fib(t-2); //利用递归实现
}
void print_fn(int m,int n)
{
int i,count =0;
for(i=1;fib(i)<n;i++)
{
if(fib(i)>=m&&fib(i)<=n) //在m到n区间
{
if(count==0)
{
printf("%d",fib(i));
count++;
}
else
{
printf(" %d",fib(i));//最后输出的一个数没有空格
count++;
}
}
}
if(count==0) //m到n区间一个斐波那契数都没有
printf("No Fibonacci number");
}
int main()
{
int m,n;
scanf("%d %d",&m,&n);
print_fn(m,n);
return 0;
}
-
使用函数输出指定范围内的完数
本题要求实现一个计算整数因子和的简单函数,并利用其实现另一个函数,输出两正整数m和n之间的所有完数。所谓完数就是该数恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。
要求定义并调用函数factorsum(number),它的功能是返回 number的因子和;定义和调用函数print_pn(m,n)逐行输出给定范围[m,n]内每个完数的因子累加形式的分解式,每个完数占一行,格式为“完数 = 因子1 + 因子2 + ... + 因子k”,其中完数和因子均按递增顺序给出。如果给定区间内没有完数,则输出一行“No perfect number”。
#include <stdio.h>
int factorsum(int number)
{
int j,sum = 0;
sum = 0;
for(j=1;j<number;j++)
{
if(number%j==0)
{
sum =sum +j;
}
}
return sum;
}
void print_pn(int m,int n)
{
int i,j,flag = 0;
for(i=m;i<=n;i++) //m和n之间
{
if(factorsum(i)==i) //如果调用的factorsum即所有因子和等于i本身
{
printf("%d = 1",i); //因子必有1
for(j=2;j<i;j++)
{
if(i%j==0)
{
printf(" + %d",j);
}
}
printf("\n");
flag = 1;
}
}
if(flag == 0)
printf("No perfect number\n"); //m到n之间一个完数都没有用
}
int main()
{
int m,n;
scanf("%d %d",&m,&n);
print_pn(m,n); //调用函数
return 0;
}