C语言基础题

  • 使用函数求特殊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;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值