《程序设计与基础》实验报告——实验四 函数(C语言)

实验题目1:

写一个函数,求解以下数列前n项之和并输出,其中n应从键盘输入。

                                                                           

输入和输出样例如下:

样例一:

输入:Input n: 3

输出:sum = 5.166667

样例二:

输入:Input n: 20

输出:sum = 32.660259

分析:设第k项为a/b,则k+1项为(a+b)/a,所以可以利用递归的方法解决。

#include<stdio.h>
int main(){
	float sum(int n);
	int n;
	scanf("%d",&n);
	printf("s=%.6f\n",sum(n));
}
float sum(int n){
    int i;
    double a=2,b=1,sum=0,t;
    for(i=1;i<=n;i++)
    {
        sum=sum+a/b;
        t=a; 
        a=a+b;
        b=t;

    }
 return sum;
} 

实验题目2:

编程利用函数求从3~100之间的双质数(给定质数pq,如果p = q + 2,则pq为双质数)。

输入和输出要求:3和100应从键盘输入;每行仅输出一对双质数,分多行输出。

分析:设计两个for循环,首先循环找到3~100以内的质数,可以通过整除判别,循环起始为从2到sqrt(i)+1,(还有更棒的起始条件,读者可自行查阅),然后把找到的质数放到一个数组中,再利用第二次循环找到双质数(双质数必定相邻,这里不做解释)

#include<stdio.h>
#include<math.h>
int main(){
	void fun(int m,int n);
	int m,n;
	scanf("%d,%d",&m,&n);
	fun(m,n);
} 
void fun(int m,int n){
		int a[50],k=0;
	for(int i=m;i<=n;i++){
		int temp=0;
		for(int j=2;j<sqrt(i)+1;j++){
			if(i%j==0){
				temp=1;
			}
		}
		if(temp==0){
			a[k]=i;
			k++;
		}
	}
	for(int i=0;i<k;i++){
		if(a[i]==a[i+1]-2)
		printf("%d|%d\n",a[i],a[i+1]);
	}
}

实验题目3:

编写一个函数实现求10 000以内的回文数。所谓回文数就是将一个数从左向右读与从右向左读是一样的,例如,121和1331都是回文数。

输出要求:在函数中,将所有的回文数输出。在输出时,每输出10个回文数便换行输出。

分析:原理很简单,就是把每个整数的各位数拿出来,然后逆序组合,这里我根据位数大小讨论(实际上必然可以推导出一个适用于不同位数通用公式,以后有机会补上)

#include <stdio.h>
#include <stdlib.h>
 
int main()
{
	int a[10000];
    int n,k,t,i=0;
    for(n=0;n<1000000;n++)
    {
    	int div = 1;
    	while(n/div >= 10)
			div *= 10;
		int k = n;
		int flag = 1;
		while(k > 0)
		{
			int left = k / div;
			int right = k % 10;
			if(left != right) 
			{
				flag = 0;
				break;
			}

			k = (k % div) / 10;
			div /= 100;
		 } 
		if (flag == 1)
		{
			a[i] = n;
			i++;
		}
	}
      
    for(int j=0;j<i;j++){
    	printf("%d ",a[j]);
    	if((j+1)%10==0)
    	printf("\n");
	}
    return 0;
}

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值