回顾大一·C语言编程8.2+8.3+9.1+9.2+9.3(1)(2)+9.4(1)(2)

程序的功能为:通过调用一个判断素数的函数isprime(),验证歌德巴赫猜想:即任何大于2的偶数均可表示为两个素数之和。例如:4=2+2(特例,仅此一个),6=3+38=3+5。程序要求输入任一偶数x,输出6到该数范围内的各个满足条件的组合。


#include  <stdio.h>
int isprime(int m) 
{	int i,flag=1;
		for(i=2;i<m;i++)
			if(m%i==0)
			{	flag==0;
				break;
			}
  	if(flag) return 1;
		else return 0;        
}
main()
{ 	int n,x,a,b;
  	scanf("%d",&x);
		for(n=6;n<=x;n+=2)            
	    	for(a=3;a<=n/2;a+=2)
				if(isprime(a)) 
	    		{	b=n-a;
           		if(isprime(b)) 			
	          		{ 	printf("%d=%d+%d\n",n,a,b);
      				continue; //退出a循环,判别下一个n的组合
	          		}
	   			}
}



编程: 主函数已经给出,编写以下指定的6个函数,在主函数中依次调用各个函数分别实现从键盘输入n个整数、求其中最大值、最小值和平均值,按升序排序,输出排序前后的n个数。


#include<stdio.h>
void in(int arr[],int n);
void out(int arr[],int n);
int ave(int arr[],int n);
int max(int arr[],int n);
int min(int arr[],int n);
void sort(int arr[],int n);
main()
{
	int a[10],n=10;
	printf("请输入10个整数: ");
	in(a,n);
	printf("\n排序前为: ");
	out(a,n);
	printf("\n平均值为:%d\n",ave(a,n));
	printf("\n最大值为:%d\n",max(a,n));
	printf("\n最小值为:%d\n",min(a,n));
	sort(a,n);
	printf("\n排序后为:");
	out(a,n);
	printf('\n');
}
void in(int arr[],int n)
{
	int i;
	for(i=0;i<n;i++)
		scanf("%2d",&arr[i]);
}
void out(int arr[],int n)
{
	int i;
	for(i=0;i<n;i++)
		printf("%3d",arr[i]);
}
int ave(int arr[],int n)
{
	int i,aver,sum=arr[0];
	for(i=1;i<n;i++)
		sum=sum+arr[i];
	aver=sum/n;
	return(aver);
}
int max(int arr[],int n)
{
	int i,max=arr[0];
	for(i=0;i<n;i++)
	{
		if(arr[i]>max)
			max=arr[i];
	}
	return(max);
}
int min(int arr[],int n)
{
	int i,min=arr[0];
	for(i=0;i<n;i++)
	{
		if(arr[i]<min)
			min=arr[i];
	}
	return(min);
}
void sort(int arr[],int n)
{
	int i,j,t;
	for(j=0;j<n-1;j++)
		for(i=0;i<n-j;i++)
			if(arr[i]>arr[i+1])
			{
				t=arr[i];
				arr[i]=arr[i+1];
				arr[i+1]=t;
			}
}

程序的功能是:从键盘接受任意一个字符串,通过调用函数ishuiwen()判断出该字符串是否为回文字符串。


#include  <stdio.h>
#include  <string.h>
main()
{ 	    int ishuiwen(char a[]);  
		char a[80];
		puts("请输入一串字符:");
		gets(a);
  	if(ishuiwen) 			
			printf("是回文!\n");
		else
			printf("不是回文!\n");
}
int ishuiwen(char a[]) 
{	int i,j,flag=1;
		for(i=0,j=strlen(a)-1;a[i]!='\0';i++)
			if(a[i]!=a[j])
			{	flag=0;
				break;
			}
  	if(flag) return 1;
		else return 0;        
}

函数fac()是用户自定义的一个用递归方法求任意整数阶乘的函数,在main函数中通过调用该函数求出一个三位整数n,其每位数字的阶乘之和正好等于该数本身,即x!+y!+z!=n。例如145=1!+4!+5!


#include<stdio.h>			
int fac(int m)				//1
{	int f;					//2
		if(m==0||m==1)		//3
			f=1;				//4
		else					//5
			f=m*fac(m-1);	 	//6
    return f; 				//7
}
main()
{	int i,a,b,c;				//8
		for(i=100;i<=999;i++)	//9
		{	a = i / 100;		//10
			b = i % 100 / 10;	//11
			c = i % 10;		//12
			i=fac(a)+fac(b)+fac(c);//13
				printf("%d\n", i);		//14
		}
}

编写程序:根据下面的要求,按所给的公式计算并输出结果。

要求:

①分别编写一个求阶乘n!的函数fac(n)、一个求组合数函数cnm(n,m);

②编写主函数,由键盘输入n和m,通过嵌套调用①中的函数完成计算。

③输入n和m要给出提示,并检查n和m的合理性,不合理的输入应输出错误信息,并不再进行计算。

#include <stdio.h>
main()
{
    int cnm(int n,int m);
    int n,m;
    printf("Input number:n,m\n");
    scanf("%d,%d",&n,&m);
    if(n<m||n<0||m<0)
        printf("输入错误\n");
    else
        printf("result %d\n",cnm(n,m));
}
int fac(int n)
{   int f;
    if(n==0||n==1)
        f=1;
    else
        f=n*fac(n-1);
    return f;
}
int cnm(int n,int m)
{
    int fac(int n);
    return (fac(n)/(fac(n-m)*fac(m)));
}


编写程序: 用递归方法编写求Fibonacci数列第n项的值的函数fib(n),并且在main函数中调用该函数输出Fibonacci数列从第1项到第n项的系数,每行输出5项,n的值由用户从键盘输入。


#include<stdio.h>
main()
{
    int fib(int n);
    int n,i;
    printf("要输出几项:(n大于0)");
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        printf("%12d",fib(i));
        if(i%5==0)
            printf("\n");
    	
    }
    printf("\n");
}
int fib(int n)
{
    int f;
    if(n==1||n==2)
        f=1;
    else
        f=fib(n-1)+fib(n-2);
    return f;
} 

分析以下程序的运行结果,然后运行程序验证自己的分析是否正确。


#include <stdio.h>
void f(int c)
{  int a=0;
      static int b=0;
   a++;
      b++;
   printf("%d: a=%d, b=%d\n", c, a, b);
}
main()
{  int  i;
      for (i=1; i<=3; i++)  
		f(i);
   }


分析以下程序的运行结果,然后运行程序验证自己的分析是否正确。


#include <stdio.h>
int a=10,b=20; 
main( )
{ 	int a=1,c=0;       		
 	c=a+b;
		printf("%d,",c);
		a++;
		b++;
		mysum(a,b);    
  	{ 	int a=6,b=6;   		
        c=a+b;          		
     	printf("%d,",c);
    }
		printf("%d\n",a+b); 	
}

int mysum(int x,int y)
{	a++;
		b++;
		printf("%d\n",a+b);
		return x+y;
}



  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值