C语言编程题

目录

1、求斐波那契数列1,1,2,3,5,8……前20项之和

#include<stdio.h>
int main()
{
	int i,j,k,t=2;
	i=j=1;
	printf("%d %d\n",i,j);
	for(k=0;k<9;k++)
	{
		i=i+j;
		j=i+j;
		t=t+i+j;
		printf("%d %d\n",i,j);
	}
	printf("总和为:%d",t);
}

在这里插入图片描述

2、编程输出1000之内的所有完数,并统计完数的个数

一个数如果恰好等于它的因子之和(因子指除本身之外的约数),这个数就称为“完数”。例如:6的因子为1、2、3,而6=1+2+3,因此6是“完数”。

#include<stdio.h>
int main()
{
	int i,j,s=0,flag=0;
	for(i=1;i<1000;i++)
	{
		s=0;
		for(j=1;j<i;j++)
		{
			if(i%j==0)
			s=s+j;
		}
		if(i==s)
		{
			flag++;
			printf("%d\n",i);
		}
	}
	printf("完数个数:%d",flag);
}

在这里插入图片描述

3、编写函数delete函数,其功能是删除含有n个数的整型数组a中,下标为i位置的元素,请编写delete函数,并在主函数中调用。

#include<stdio.h>
int main()
{
	int n,i,j;
	int a[5];
	void delete(int x[],int n,int k);
	printf("输入5个元素\n");
	for(i=0;i<5;i++)
	scanf("%d",&a[i]);
	printf("输入要删除元素的下标i\n");
	scanf("%d",&j); 
	delete(a,5,j);
	printf("结果"); 
	for(i=0;i<5-1;i++)
	printf("%d",a[i]);

}
void delete(int a[],int n,int k)
{
	int i,j;
	for(i=0;i<n;i++)
	{
		if(i==k)
		{
			for(j=i;j<n;j++)
			a[j]=a[j+1];
		}
	}
}

在这里插入图片描述

4、编写函数fun,其功能是利用冒泡法

将一个整数数组由小到大进行排序,在main函数中从键盘输入数组元素,调用fun函数排序,然后输出排序后的数组

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

在这里插入图片描述

5、编写函数fun,其功能为求100-,300之间(包含100和300)所有整数中各位数字之和为x(x为一个正整数)的整数个数,要求从main函数输入x的值,并输出符合条件的整数个数。例如100-300之间各位数字之和为5的整数有104,113,122,131, 140,203,212,221,230,即从主函数中输入5,则应输出9

#include<stdio.h>
int main()
{
	int fun( int x);
	int n;
	scanf("%d",&n);
	printf("%d",fun(n));
}
int fun( int x)
{
	int i,flag=0;
	for(i=100;i<=300;i++)
		if(i%10+i%100/10+i/100==x)
		flag++;
	return flag;
}

6、有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中

解1:

#include <stdio.h>
int main()
{
	int a[11]={1,2,3,4,5,6,7,8,9,10};
	int i,t,m;
	printf("输入一个数:\n");
		scanf("%d",&m);
	for(i=0;i<11;i++)
	{
		if(m<a[i])
		{
			t=m;m=a[i];a[i]=t;
		}
	else if(m>=a[9])
			a[10]=m;
	}
	  printf("排序后:\n");
    for(i=0;i<11;i++)
		printf("%d ",a[i]);
return 0;
}

在这里插入图片描述
解2:
重新开拓一个数组,判断插入数的位置后,后面数组值往后移一位,记得完成后要加break,因为如果不停止的话,后面有符合条件的还会执行循环。

#include "stdio.h"
void main()
{
   int a[5]={1,3,4,7,9};
   int b[6],i,j;
   int n;
   for(i=0;i<5;i++)
   b[i]=a[i];
   scanf("%d",&n);
   for(i=0;i<5;i++)
   {
   		if(n>=a[i]&&n<=a[i+1])
   		{
   			for(j=5;j>i+1;j--)
   			{
   				b[j]=b[j-1];
   			}
   			b[i+1]=n;
   			break;
   		}	
   }
   for(i=0;i<6;i++)
   printf("%d ",b[i]); 
}

在这里插入图片描述

7、求100-200之间所有的素数,并输出。素数是只能被1和自身整除的数

#include<stdio.h>
int main()
{
	int i,j,flag;
	for(i=101;i<200;i++)
	{
		flag=1;
		for(j=2;j<i;j++)
		{
			if(i%j==0)
			flag=0;
		}
		if(flag==1)
		printf("%d ",i);
	}
}

在这里插入图片描述

8、将含有10个数的整型数组由小到大排序

#include<stdio.h>
int main ()
{
	int a[10];
	int i,j,temp;
	printf("请输入数组的10个元素\n");
	for(i=0;i<10;i++)
	scanf("%d",&a[i]);
	for(i=0;i<10-1;i++)
	for(j=0;j<10-i-1;j++)
	{
		if(a[j]>a[j+1])
		{
			temp=a[j];
			a[j]=a[j+1];
			a[j+1]=temp;
		}
	}
	for(i=0;i<10;i++)
	printf("%d ",a[i]);
}

在这里插入图片描述

9、编程求解马克思手稿中的数学题:有30个人,在一家饭馆里吃饭共花了50先令,每个男人各花3先令,每个女人各花2先令,每个小孩各花1先令,问男人、女人和小孩各有几人?

#include <stdio.h>
void main()
{
	int x,y,z;
	for(x=1;x<16;x++)
		for(y=1;y<25;y++)
			for(z=1;z<30;z++)
			{
				if(x+y+z==30&&3*x+2*y+z==50)
				printf("%d %d %d\n",x,y,z); 
			}
  
}

在这里插入图片描述

10、计算100~200之间的所有素数之和,判别一个数是否是素数请用给定的函数实现。

函数原型为:int fun(int m);
说明:
参数:m 是要进行判断的数;
返回值:若数 m 是素数,则返回值为1;否则返回值为0。

#include <stdio.h>
void main()
{
	int fun(int m);
   	int i,sum=0;
   	for(i=101;i<200;i++)
   	{
   	    if(fun(i)==1)
   	    {
   	    	sum=sum+i;
   	    	printf("%d ",i);   	    	
   	    }
   	}
   		printf("素数和:%d",sum);

}
int fun(int m)
{
	int i,flag=1;
	for(i=2;i<m;i++)
	{
		if(m%i==0)
		flag=0;
	}
	return flag;
}

在这里插入图片描述

11、输出以下的杨辉三角形(要求输出10行)

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1

#include <stdio.h>
void main()
{
   int a[10][10];
   int i,j;
   for(i=0;i<10;i++)
   {
	a[i][0]=1;
	a[i][i]=1;	
   } 
   
   for(i=2;i<10;i++)
   		for(j=1;j<i;j++)
   			a[i][j]=a[i-1][j-1]+a[i-1][j];//活学活用二维数组
   
   for(i=0;i<10;i++)
   {
   	for(j=0;j<=i;j++)
   	{
   	printf("%d ",a[i][j]);
   	}
	printf("\n");
   }
}

在这里插入图片描述

12、打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数 本身。

例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位

#include<stdio.h>
void main()
{
    int x,y,z,i;
    for(i=100;i<1000;i++)
    {
    	x=i%10;
    	y=i%100/10;
    	z=i/100;
    	if(x*x*x+y*y*y+z*z*z==i)
    	printf("%d ",i);
    } 
}

在这里插入图片描述

13、求两个数的最大公约数和最小公倍数

如:15和6的最大公约数为3,最小公倍数为30
最大公约数:

#include<stdio.h>
void main()
{
    int a,b,c;
    scanf("%d%d",&a,&b);
    while(b)
    {
    	c=a%b;
    	a=b;
    	b=c;
    }
    printf("%d ",a);
}

在这里插入图片描述
最小公倍数:

#include<stdio.h>
void main()
{
    int a,b,i=1;
    scanf("%d%d",&a,&b);
    while((a*i)%b)
    {
    	i++;
    }
    printf("%d",a*i);
}

在这里插入图片描述

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微笑伴你而行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值